COMatePlus speichert nicht

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePlus speichert nicht

Beitrag von Kiffi »

Joel hat geschrieben:Wenn ich aber in der bereits geöffneten Datei was ändere und diese dann schließe werden die Änderungen nicht mehr gespeichert.
kannst Du das ein wenig näher erläutern? Die Excel-Datei ist geöffnet? Von welchem Programm? Von Excel oder Deinem?

Bin mir jetzt nicht sicher, aber ich gehe mal davon aus, dass man keine Änderungen an geöffneten Dateien durchführen kann.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus speichert nicht

Beitrag von Joel »

Kiffi hat geschrieben:Die Excel-Datei ist geöffnet? Von welchem Programm? Von Excel oder Deinem?
Grüße ... Kiffi
Jup. Mein Code öffnet die Datei damit die bearbeitet werden kann. Wenn ich aber nun was änder werden die Änderungen nicht mehr gespeichert.
Kiffi hat geschrieben:Bin mir jetzt nicht sicher, aber ich gehe mal davon aus, dass man keine Änderungen an geöffneten Dateien durchführen kann.
Grüße ... Kiffi
Habe es mal mit einem SaveAs unter anderem Pfad probiert. aber das hat leider auch nichts geholfen.

Hier nochmal der aktuelle ProblemCode:

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("ActiveWorkbook")
    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("Cells("+Str(letzte_Reihe+2)+",1) = 'Lieder:'")
      
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      FFormat=#xlNormal
      ;Workbook\Invoke("SaveAs('" + Dropbox_Pfad$ + "'," + Str(FFormat) + ")")
      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
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePlus speichert nicht

Beitrag von Kiffi »

Habe grade Deinen Code ausprobiert. Bei mir klappt es
problemlos. Die Änderungen werden gespeichert.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus speichert nicht

Beitrag von Joel »

Kiffi hat geschrieben:Habe grade Deinen Code ausprobiert. Bei mir klappt es
problemlos. Die Änderungen werden gespeichert.

Grüße ... Kiffi
Komisch. Bei mir nicht. Hast du auch selbst was eingegeben?

Also nochmal mein vorgehen (hast du das auch so gemacht)?:

1. Die Variable DropboxPfad$ zu einer bestehenden xls Datei ändern.
2. Code ausführen
3. In den Code unter die schon automatisch eingefügten Zeilen noch irgenwas eingeben
4. Excel Fenster durch x schließen (es sollte keine Meldung kommen)

5. Wenn man nun die Excel Datei wieder öffnet ist nur das gespeichert, was mein Code automatisch eingefügt hat aber nicht meine eingegebenen Zeichen.

Code: Alles auswählen

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

If ExcelObject
  If ExcelObject\SetProperty("Visible = #True") = #S_OK
    WorkBook = ExcelObject\GetObjectProperty("ActiveWorkbook")
    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("Cells("+Str(letzte_Reihe+2)+",1) = 'Lieder:'")
      
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      FFormat=#xlNormal
      ;Workbook\Invoke("SaveAs('" + Dropbox_Pfad$ + "'," + Str(FFormat) + ")")
      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 speichert nicht

Beitrag von Falko »

Hallo Joel,

Da das Excel geöffnet ist, also nicht komplett beendet wird, bis du das X für Close machst, würde ich folgendes
empfehlen. Du kannst folgendes weg lassen und ansonsten deinen Code so belassen:
;Workbook\Invoke("Save") - auskommentieren
:)
Dann wird nach dem Schließen deine aktuelle Eintragung gespeichert, egal ob vom Programm oder nachträglich von Hand
eingetragene Zellen eingetragen wurden.
[EDIT]
Aber.... das folgende muss abgeändert werden.

Code: Alles auswählen

ExcelObject\SetProperty("Application\DisplayAlerts = #False")
auf

Code: Alles auswählen

ExcelObject\SetProperty("Application\DisplayAlerts = #True")
Sonst wird leider nichts gespeichert, da keine Abfrage dazu kommt. Also kannste das Save stehen lassen.


Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus speichert nicht

Beitrag von Joel »

okay das funktioniert. aber mit dem altert= false wollte ich eigentlich erreichen das diese Meldung nicht kommt. kann ich das nicht hinbekommen das er das mit dem x ohne weiterreden direkt mit allen Änderungen speichert?
----------------------------------------------------------

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 speichert nicht

Beitrag von Falko »

Soweit ich sehen kann, geht es nicht, wenn du Alert auf False
setzt. Du machst ja auch kein Close, wenn du die Methode Save benutzt.
Da wird wie beim manuellen Speichern unter dem Menüpunkt Datei erst die
Datei überschrieben. Nicht bei einem Close. Das funktioniert dann wiederum
beim Alert True. Aber vielleicht hat Kiffi hier noch einen Trick parat :wink: .
Ob man in Excel Befehle verbiegen könnte, sodass anstelle eines Close ein Speichern
ausführt, habe ich leider keine Idee dazu. Das wäre vielleicht dann eine Möglichkeit, ohne
Ausgabe einer Speichern-Meldung die Datei zu speichern.

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 speichert nicht

Beitrag von Kiffi »

Falko hat geschrieben:Aber vielleicht hat Kiffi hier noch einen Trick parat :wink:
Man kann einen Eventhandler setzen. Hier wird dann ein WorkBookBeforeClose-Event
beim Schließen des Excel-Fensters gemeldet, woraufhin ein Save(As) ausgeführt werden kann.

Hier mal ein Probier-Code (Debug-Ausgaben beachten!):

Code: Alles auswählen

[...]
Global WorkBook.COMateObject
[...]
Procedure ExcelCallback(Object.COMateObject, eventName$, parameterCount) 
  Debug "ExcelEvent: " + eventName$
  If eventName$ = "WorkbookBeforeClose"
    Workbook\Invoke("Save")
  EndIf
EndProcedure

If ExcelObject
	
	ExcelObject\SetEventHandler("", @ExcelCallback())
	
  If ExcelObject\SetProperty("Visible = #True") = #S_OK
    WorkBook = ExcelObject\GetObjectProperty("ActiveWorkbook")
    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("Cells("+Str(letzte_Reihe+2)+",1) = 'Lieder:'")
      
      ExcelObject\SetProperty("Application\DisplayAlerts = #False")
      FFormat=#xlNormal
      ;Workbook\Invoke("SaveAs('" + Dropbox_Pfad$ + "'," + Str(FFormat) + ")")
      Workbook\Invoke("Save")
      
      OpenWindow(0, 100, 100, 100, 100, "TestFenster")
      Repeat
      	WWE = WaitWindowEvent()
      Until WWE = #PB_Event_CloseWindow
      
      WorkBook\Release()
      
    EndIf
  EndIf
  ExcelObject\Release()
Else
  MessageRequester("Excel Datei erstellen", "Couldn't create the application object!")
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: COMatePlus speichert nicht

Beitrag von Joel »

super danke! funzt
----------------------------------------------------------

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 speichert nicht

Beitrag von Falko »

@Kiffi :allright: und Danke. Hab die Callback-Procedure mit aufgenommen.
MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten