Excel Comate Datei ohne Rückfrage speichern

Anfängerfragen zum Programmieren mit PureBasic.
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Excel Comate Datei ohne Rückfrage speichern

Beitrag von TheSaint »

Hallo Zusammen,

versuche schon einige Zeit, nachdem ich Daten in ein Excel-Sheet eingetragen habe mittels:

Code: Alles auswählen

ExcelObject\SetProperty("Cells(" + Str(intRow) + ",14) = "+ Cell6$ + "")
die Excel Datei mit dem gleichen Namen zu speichern, ohne das Rückfrage kommen ob Datei überschrieben werden soll.
Anschließend will ich Excel beenden.
Leider erfolglos. :cry:

Ich habe folgendes versucht:

Code: Alles auswählen

ExcelObject\Invoke("Workbook\Saved = True")
und

Code: Alles auswählen

ExcelObject\Invoke("ThisWorkbook.Save")
und

Code: Alles auswählen

ExcelObject\Invoke("Quit(SAVECHANGES:=True)")
und

Code: Alles auswählen

ExcelObject\Invoke("Save")
und noch einiges andere.

Irgendwie verstehe ich die Syntax nicht um Comate weiter zu nutzen.

Wäre toll wenn mir jemand helfen könnte.

Schon mal vielen Dank.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
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:

Beitrag von Falko »

Die Rückfrage kannst du so ausschalten:

Code: Alles auswählen

ExcelObject\SetProperty("Application\DisplayAlerts = #False") 
Das Gegenstück wäre dann mit #True

Das Andere, wo du true ohne # schreibst, müsste dann wohl eher #True sein. (Sieh Beispiele im Comate\Basic demos\ -Ordner zu Excel)

Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Du musst generell beachten, das du die "." in Excel für COMate mit einem "/" ersetzt. Sonst funktioniert das nicht.

Wie Falco bereits gesagt hat, müssen Variablen immer mit # anfangen. Oder man übergibt den reinen Wert. Dazu kannst du im Excel über Visual Basic dir den Objaktkatalog mit F2 anzeigen lassen. Dort die Variable eingeben und du siehst, welche Wert dahintersteckt. #True und #False sind wohl die einzigen Variablen, die auch PB kennt, die anderen musst du eh in PB definieren.
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Falko,

vielen Dank für Deine Hilfe,
Falko hat geschrieben:Die Rückfrage kannst du so ausschalten:

Code: Alles auswählen

ExcelObject\SetProperty("Application\DisplayAlerts = #False") 
Das Gegenstück wäre dann mit #True
Das Andere, wo du true ohne # schreibst, müsste dann wohl eher #True sein.
Die Rückfrage ob gespeichert werden soll ist weg. :D

Jedoch habe ich jetzt das Problem, dass Excel nicht vollständig geschlossen wird, und zwar bleibt Excel immer noch in dem Windows Task Manager erhalten. Das war vorher nicht so.

Ich verwende folgenden Code:

Code: Alles auswählen

  ExcelObject\SetProperty("Application\DisplayAlerts = #False") 
  ExcelObject\Invoke("Save")
  ExcelObject\SetProperty("Application\DisplayAlerts = #True")
  ExcelObject\Invoke("Quit()")
  ;ExcelObject\Invoke("Close")
  ExcelObject\Release()
Könntest Du hier noch mal Hilfestellung geben? Wäre toll.
Falko hat geschrieben:(Sieh Beispiele ... -Ordner zu Excel)
Ich habe mir jetzt noch mal Comate heruntergeladen, aber einen Ordner zu Excel habe ich nicht gefunden. Habe alle Verzeichnisse durchgesehen.
Folgende Beispiele habe ich dort gefunden, die ich aber schon durchgesehen habe:

Demo_Excel 2.pb
Demo_Excel.pb
Demo_ExcelWorkbookInWebGadget.pb

Meintest Du diese Beispiele?
Wenn ja, dann schaffe ich es wohl nicht, so wie Du, diese Befehle so abzuleiten. Leider noch Anfänger. :cry:

Wäre toll, wenn Du mir nochmal helfen könntest zu dem Task Manager Problem.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo CNESM,
CNESM hat geschrieben:Du musst generell beachten, das du die "." in Excel für COMate mit einem "/" ersetzt. Sonst funktioniert das nicht.
Darf ich hier bescheiden anfragen, ob es nicht "" hiermit ersetzt werden müsste?

Danke für den Hinweis mit " Excel über Visual Basic dir den Objaktkatalog mit F2".

Ich hatte viele Module in Access und Excel und möchte halt soweit wie möglich von beiden weg und nach PureBasic. Nur leider muss ich desöftern auf vorhandene Excel-Sheets zugreifen.
Jedoch habe ich einfach nur die Probleme, diese Befehle in Comate umzusetzen.

Vielen Dank für Eure Geduld mit mir... bin wohl ein schwieriger Fall. :)
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Du hast natürlich recht. Müsste "/" heissen. Hab mal wieder zu schnell getippt.

Das mit dem Task-Manager liegt daran, das Excel nicht korrekt beendet wird. Es kann an deinem Aufruf "Save" liegen, das es diesen Befehl so nicht gibt.

Also so:

Code: Alles auswählen

ExcelObject\SetProperty("Application\DisplayAlerts = #False") 
ExcelObject\Invoke("ActiveWorkbook\Save") 
ExcelObject\Invoke("Workbooks\Close") 
ExcelObject\SetProperty("Application\DisplayAlerts = #True") 
ExcelObject\Invoke("Quit()") 
ExcelObject\Release()
Ich mach es immer so: Erst in Excel entwickeln und schauen das es funktioniert, dann nach COMate exportieren.
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:

Beitrag von Falko »

[Edit]Da war wohl jemand schneller :lol: [/Edit]

Ich meinte eigentlich den Source im Ordner "Basic demos", den
Source Demo_Excel.pb . Da brauchst du nicht viel umsetzen, da
er so schon läuft wie er soll.

Um Excel komplett zu beenden müssen am Ende diese beiden
Zeilen vorhanden sein:

Code: Alles auswählen

ExcelObject\Invoke("Quit()")
ExcelObject\Release()
Damit sollte alles von Excel aus dem Taskmanager verschwunden sein.

Zu den xl-Konstanten, da hatte ich im Forum mal eine Konstantenliste gepostet, was zum Disphelper in Verwendung mit Excel war. Die könntest Du, je nachdem was Du brauchst, am Anfang in deinen Source kopieren.

Wegen Anfänger in Comate. Das geht mir genauso, aber ich versuche meine Beispiele, die ich mal mit dem Disphelper genutzt habe, in comate umzusetzen. Ist zwar nicht einfach, weil man erst die Hilfe von Comate verstehen muss, aber man kommt sehr
langsam zum Ziel.

Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo CNESM,
CNESM hat geschrieben: Das mit dem Task-Manager liegt daran, das Excel nicht korrekt beendet wird. Es kann an deinem Aufruf "Save" liegen, das es diesen Befehl so nicht gibt.
Vielen Dank für das Codebeispiel. Leider klappt es trotzdem nicht.
Excel bleibt weiter im Taskmanager. :cry:

Ich habe den Code jetzt auf die unterschiedlichste Weise zusammengestellt. Er speichert zwar die Veränderungen, aber....

Ich weis einfach nicht woran das liegt. Geht das den bei Dir???
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Beitrag von TheSaint »

Hallo Falko,
Falko hat geschrieben:

Code: Alles auswählen

ExcelObject\Invoke("Quit()")
ExcelObject\Release()
Damit sollte alles von Excel aus dem Taskmanager verschwunden sein.
vielen Dank für Deine Antwort.
In meinem obigen Codebeispiel habe ich diese beiden Zeilen verwendet.
Nun habe ich die Bespiele von CNESM benutzt.

Jedoch bleibt es immer noch dabei, Excel bleibt im Taskmanager.
Ist das bei Dir auch so???

Verstehe ich einfach nicht.

Nochmals vielen Dank für Deine Hilfe.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag von CNESM »

Sofern schon eine Excel Application im Task-Manager hängt, bleiben auch alle anderen hängen. Von daher vorher mal schauen, ob es auch wirklich keinen mehr gibt.

Zum Testen ist es immer ratsam sich Excel miv Visible = #True sichtbar zu machen, so kannst du schauen, wo es hängen bleibt:

Code: Alles auswählen

ExcelObject\SetProperty("Visible = #True")
Also bei mir läuft das ohne Probleme:

Code: Alles auswählen

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(980,1) = 'Hello'")
   
      MessageRequester("Test", "Test")
    
      ExcelObject\SetProperty("Application\DisplayAlerts = #False") 
      ExcelObject\Invoke("ActiveWorkbook\Save") 
      ExcelObject\Invoke("Workbooks\Close") 
      ExcelObject\SetProperty("Application\DisplayAlerts = #True") 
      ExcelObject\Invoke("Quit()") 
      ExcelObject\Release()
    EndIf
  EndIf
Else
  MessageRequester("COMate -Excel demo", "Couldn't create the application object!")
EndIf
Antworten