Seite 1 von 1

COMatePlus Excel Datei einlesen

Verfasst: 09.12.2012 19:21
von Joel
Hey,

ich würde gerne eine Excel Datei einlesen, die zuvor auch mit COMatePlus erstellt wurde und weiteren Text einfügen

Beispiel:

- Ich habe die Datei test.xls. Diese möchte ich öffnen.
- Jetzt soll herausgefunden werden in welcher Zeile die letzten Wörter stehen. (Die Datei sieht aus wie eine art Aufgabenliste)
- zwei Zeilen unter diesem "letzten Text" möchte ich nun weiteren Text einfügen.
- Nun soll die Datei wieder gespeichert werden.

Ich möchte also eine Excel Datei immer weiter mit Text erweitern.

Gibt es Ideen, wie man das anstellen könnte?

Hier mein bisheriger Code:

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi"
IncludeFile "ExcelConstants.pbi"
date$ = FormatDate("%dd/%mm/%yyyy", Date())
Define.COMateObject ExcelObject, WorkBook
ExcelObject = COMate_CreateObject("Excel.Application")

If ExcelObject
  If ExcelObject\SetProperty("Visible = #True") = #S_OK
    WorkBook = ExcelObject\GetObjectProperty("Workbooks\Add")
    If WorkBook
      
      ExcelObject\SetProperty("Cells(1,1) = 'Datum:'")
      ExcelObject\SetProperty("Cells(1,2) = '" + date$ + "' AS DATE")
      ExcelObject\SetProperty("Cells(3,1) = 'Aufgabe:'")
      
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      FFormat=#xlNormal
      Workbook\Invoke("SaveAs('" + Excel_Temp$ + "'," + Str(FFormat) + ")")
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      WorkBook\Release()
    EndIf
  EndIf
  ExcelObject\Release()
Else
  MessageRequester("Excel Datei erstellen", "Couldn't create the application object!")
EndIf

Re: COMatePlus Excel Datei einlesen

Verfasst: 09.12.2012 22:49
von Falko
Hast du mal aus der Excelfunktions-Lib
das Beispiel mal ausprobiert? http://www.purebasic.fr/german/viewtopi ... 66#p239466

XLSFunc_GetLastRow(NewExcelObject)

Damit müsstest du die letzte Textzeile erhalten.
Alles weitere dürfte sich dann auch ergeben.

Für die weitere Funktionen habe ich die Test-Datei ergänzt.

Gruß,
Falko

Re: COMatePlus Excel Datei einlesen

Verfasst: 15.12.2012 11:45
von Joel
Habe es mal versucht umzusetzen, aber es funktioniert noch nicht. Ich möchte eine Excel Datei öffnen und in Zeile 30 ein Wort hinzufügen. Leider funktioniert das nicht.

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi"
IncludeFile "ExcelConstants.pbi"
XIncludeFile "ExcelFunktion.pbi"
date$ = FormatDate("%dd/%mm/%yyyy", Date())
Define.COMateObject ExcelObject, WorkBook
ExcelObject = XLSFunc_OpenExcelFile("C:\Users\Joel\Desktop\2012_11_12.xls")

;ExcelObject = COMate_CreateObject("Excel.Application")

If ExcelObject
  If ExcelObject\SetProperty("Visible = #True") = #S_OK
    WorkBook = ExcelObject\GetObjectProperty("Workbooks\Open")
    If WorkBook 
      ExcelObject\SetProperty("Cells(30,1) = 'Datum:'")
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      FFormat=#xlNormal
      Workbook\Invoke("Save")
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      WorkBook\Release()
    EndIf
  EndIf
  ExcelObject\Release()
Else
  MessageRequester("Excel Datei erstellen", "Couldn't create the application object!")
EndIf

Re: COMatePlus Excel Datei einlesen

Verfasst: 15.12.2012 14:33
von Falko
Versuch das mal ohne Open, da hiermit nur der Dateiname und Path gesetzt wird und
du dort dann ja kein invoke benutzen kannst.

Dieses funktioniert hier ohne /open , was du suchst.

Code: Alles auswählen

...
  WorkBook = ExcelObject\GetObjectProperty("Workbooks")
...
Gruß,
Falko

Re: COMatePlus Excel Datei einlesen

Verfasst: 15.12.2012 14:59
von Kiffi
so is besser:

Code: Alles auswählen

WorkBook = ExcelObject\GetObjectProperty("ActiveWorkbook")
Grüße ... Kiffi

Re: COMatePlus Excel Datei einlesen

Verfasst: 15.12.2012 15:07
von Joel
OK Danke! Das funktioniert.

Jetzt ist aber noch das Problem, dass meine Änderungen nicht gespeichert werden. Also er soll die Änderungen nochmal speichern ohne nochmal nachzufragen. Ich vermute mal dass da was schief geht, da die Excel Datei erst öffne und dann schon direkt den SaveAs Pfad festlege.

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi"
IncludeFile "ExcelConstants.pbi"
XIncludeFile "ExcelFunktion.pbi"
date$ = FormatDate("%dd/%mm/%yyyy", Date())
Define.COMateObject ExcelObject, WorkBook
ExcelObject = XLSFunc_OpenExcelFile(Dropbox_Pfad$)

If ExcelObject
  If ExcelObject\SetProperty("Visible = #True") = #S_OK
    WorkBook = ExcelObject\GetObjectProperty("Workbooks")
    If WorkBook
      letzte_Reihe = XLSFunc_GetLastRow(ExcelObject)+3
      ExcelObject\SetProperty("Cells("+Str(letzte_Reihe)+",1) = 'Datum:'")
      ExcelObject\SetProperty("Cells("+Str(letzte_Reihe)+",2) = '" + date$ + "' As DATE")
      
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      FFormat=#xlNormal
      Workbook\Invoke("SaveAs('" + Dropbox_Pfad$ + "'," + Str(FFormat) + ")")
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      WorkBook\Release()
    EndIf
  EndIf
  ExcelObject\Release()
Else
  MessageRequester("Excel Datei erstellen", "Couldn't create the application object!")
EndIf

Re: COMatePlus Excel Datei einlesen

Verfasst: 15.12.2012 15:46
von Falko
wie Kiffi schon vorhin geschrieben hatte, nimm besser folgendes:

Code: Alles auswählen

    WorkBook = ExcelObject\GetObjectProperty("ActiveWorkbook")
    Debug COMate_GetLastErrorDescription()+"2" ; Nur zur Fehlerüberprüfung!
Vor allem, wenn du dir nicht sicher bist, welche Funktion falsch läuft,
mach hinter jeder COMate-Funktion dieses Debug wie oben dahinter.
Dann wärst du vielleicht auch selbst darauf gekommen, das es mit
dem Save nichts zu tun hatte :)

Gruß,
Falko

Re: COMatePlus Excel Datei einlesen

Verfasst: 15.12.2012 15:55
von Joel
Sry Kiffi, habe deinen Beitrag gar nicht gesehen :D

Vielen Dank! Funktioniert alles!

Echt gut, dass ihr immer so schnell antwortet. Paar Minuten Zocken, F5 und man hat eine Antwort :allright: