AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Excel per OLE speichern, wenn im Editiermodus

Excel per OLE speichern, wenn im Editiermodus

Ein Thema von devidespe · begonnen am 4. Aug 2022 · letzter Beitrag vom 5. Aug 2022
Antwort Antwort
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
433 Beiträge
 
Delphi 10.4 Sydney
 
#1

Excel per OLE speichern, wenn im Editiermodus

  Alt 4. Aug 2022, 15:03
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;
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
330 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 4. Aug 2022, 15:22
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.354 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 4. Aug 2022, 15:28
Excel.Application.Interactive kann man nutzen um eine vorige Überprüfung durchzuführen.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
260 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 4. Aug 2022, 15:33
Hallo,

application.sendkeys

https://docs.microsoft.com/de-de/off...ation.sendkeys

https://stackoverflow.com/questions/...cell-edit-mode

vielleicht hilft's.

Gruß
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
433 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 4. Aug 2022, 21:04
Danke für die Antworten.

Ich bin vorhin über eine zusätzliche Eigenschaft gestolpert, die ich auf False setzen könnte:

Application.EditDirectlyInCell

https://docs.microsoft.com/de-de/off...directlyincell

Wenn ich gerade im Editiermodus bin und Text in eine Zelle eingebe, könnte das die Lösung sein, ich werd’s morgen probieren
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
433 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 5. Aug 2022, 09:01
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.
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.354 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 5. Aug 2022, 09:10
Aber ein CoInitialize(nil); und CoUninitialize; hast Du schon irgendwo vorher/nachher aufgerufen?
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 5. Aug 2022 um 09:25 Uhr)
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
433 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 5. Aug 2022, 09:41
Die basieren ja auf dem COM Modell - so wie ich das verstanden habe, ist OLE etwas anderes.

Ich habe auch per:

Application.SendKeys('{Enter}'); 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.
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
53 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Excel per OLE speichern, wenn im Editiermodus

  Alt 5. Aug 2022, 09:50
Die basieren ja auf dem COM Modell - so wie ich das verstanden habe, ist OLE etwas anderes.
Dann ist vielleicht OleInitialize das richtige, wobei das intern auch CoInitialize aufruft.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf