![]() |
Excel per OLE speichern, wenn im Editiermodus
Hallo zusammen,
ich versuche Excel per OLE zu öffnen und eine bestehende Tabelle zu laden, sowie beim Programmende wieder zu speichern und schließen. Das klappt mit nachfolgendem Code auch sehr gut. Allerdings gibt es Probleme, wenn sich Excel im Editiermodus befindet, ich also gerade Daten in ein Feld eingebe (erreichbar z.B. mit F2). Dann liefern die Aufrufe zum Speichern eine EOleSysError-Exception mit dem Text "Aufruf wurde durch Aufgerufenen abgelehnt". Daher muss ich irgendwie vor dem Speichern prüfen, ob der Editiermodus aktiv ist bzw. diesen deaktivieren, bevor ich mit dem Speichern fortfahren kann. Hat jemand eine Idee, wie ich das bewerkstelligen kann? Danke für Eure Antworten...
Delphi-Quellcode:
var
fFileName : String; Excel, ExcelWorkbook : OleVariant; begin Excel := CreateOleObject('Excel.Application'); Excel.Visible := True; ExcelWorkBook := Excel.WorkBooks.Open(fFileName); ... if not VarIsEmpty(Excel) then begin try ExcelWorkbook.Saved := False; //hier beginnt die Exception, wenn sich Excel im Editiermodus befindet ExcelWorkbook.Close (SaveChanges := True); Excel.Quit; Excel := unassigned; except on E:Exception do ShowMessage('Es ist eine Exception aufgetreten: ' + E.ClassName + #13#13 + E.Message); end; end; |
AW: Excel per OLE speichern, wenn im Editiermodus
nur als Brainstorming Idee. Ich vermute, dass du nichts gegen den Editiermodus machen kannst. Du kannst vielleicht vor dem Beenden probieren, im Programm abzufragen, ob Excel sich in Editiermodus befindet und den Anwender nett bittest, aus dem Editiermodus rauszugehen, damit dein Programm wieder die Kontrolle übernehmen kann. Vielleicht als weiteres Sicherheitsnetz, das Autospeichern in Excel aktivieren :wink:
|
AW: Excel per OLE speichern, wenn im Editiermodus
![]() |
AW: Excel per OLE speichern, wenn im Editiermodus
Hallo,
application.sendkeys ![]() ![]() vielleicht hilft's. Gruß |
AW: Excel per OLE speichern, wenn im Editiermodus
Danke für die Antworten.
Ich bin vorhin über eine zusätzliche Eigenschaft gestolpert, die ich auf False setzen könnte: Application.EditDirectlyInCell ![]() Wenn ich gerade im Editiermodus bin und Text in eine Zelle eingebe, könnte das die Lösung sein, ich werd’s morgen probieren |
AW: Excel per OLE speichern, wenn im Editiermodus
Okay Excel.Application.Interactive und Excel.Application.EditDirectlyInCell erzeugen beide jeweils eine Exception, wenn ich mich zum Zeitpunkt der Abfrage im Editiermodus befinde.
Selbst wenn ich die entstehende Exception als Zeichen für den Editiermodus deute, und entsprechend handhaben möchte, kann ich Excel nicht beenden, weil Excel.Quit ebenfalls eine Exception erzeugt. Seltsam alles, offenbar scheint es keine verlässliche Möglichkeit zu geben, den Editiermodus zu erkennen, diesen zu beenden, oder Excel zu beenden - wenn sich Excel zum Zeitpunkt der Abfrage bereits im Editiermodus befindet. |
AW: Excel per OLE speichern, wenn im Editiermodus
Aber ein
![]()
Delphi-Quellcode:
und
CoInitialize(nil);
![]()
Delphi-Quellcode:
hast Du schon irgendwo vorher/nachher aufgerufen?
CoUninitialize;
|
AW: Excel per OLE speichern, wenn im Editiermodus
Die basieren ja auf dem COM Modell - so wie ich das verstanden habe, ist OLE etwas anderes.
Ich habe auch per:
Delphi-Quellcode:
versucht den Editiermodus per Tastendruck zu beenden, aber es ändert nichts. Laut mehreren Quellen erlaubt Excel explizit nach außen hin nicht die Erkennung/Steuerung dieses Editiermodus. Ich habe mich mit der Exception beholfen, die bei Application.Ready auftritt, und deute das als Editiermodus, bei dem der Nutzer manuell den Modus verlassen muss. Nicht optimal, aber relativ zuverlässig.
Application.SendKeys('{Enter}');
|
AW: Excel per OLE speichern, wenn im Editiermodus
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz