COMatePlus Excel Datei einlesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

COMatePlus Excel Datei einlesen

Beitrag 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
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: COMatePlus Excel Datei einlesen

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus Excel Datei einlesen

Beitrag 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
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: COMatePlus Excel Datei einlesen

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePlus Excel Datei einlesen

Beitrag von Kiffi »

so is besser:

Code: Alles auswählen

WorkBook = ExcelObject\GetObjectProperty("ActiveWorkbook")
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus Excel Datei einlesen

Beitrag 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
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: COMatePlus Excel Datei einlesen

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus Excel Datei einlesen

Beitrag 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:
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Antworten