![]() |
Excel schließen und speichern(!)
Salü....
ich habe folgenden Code:
Code:
procedure TForm1.cmd1Click(Sender: TObject);
begin if f_Excel(Excel)then // Excel startet ShowMessage('MSExcel ist erfolgreich gestartet worden!!') else ShowMessage('MSExcel konnte nicht gestartet werden!!'); Excel.Visible := TRUE; // TRUE = Excel sichtbar. Excel.Application.Workbooks.Open(filename:='c:\test.xls'); // Neue Arbeitsmappe öffnen in EXECL //Excel.Application.Workbooks.Add; Excel.Worksheets ['Tabelle1'].Activate; zahl:= '0000123789'; Excel.cells[2,2].select; // Zelle wählen Excel.Selection.numberFormat:= '@'; // benutzerdefiniertes Zahlenformat zuweisen Excel.Cells[2,2]:= zahl; // String in die Zelle schreiben. Excel.Workbooks.Close; // Mappe wieder schliessen. Excel.Quit; // Excel schließen end; Das funktioniert ja auch ganz gut. Aber ich will Excel so benden, dass Änderungen automatisch gespeichert werden. Und dann eventuell auch noch unter einem bestimmten Filenamen. Doch beides funktioniert nicht so, wie ich das gerne will. Weder
Delphi-Quellcode:
noch....
Excel.Workbooks.Close (savechanges:=true);
Delphi-Quellcode:
Excel.Workbooks.Close (savechanges:=true, filename:='c:\test.xls');
Kann mir hier jemand bei den 2 Codezeilen helfen? Danke! |
Re: Excel schließen und speichern(!)
Hallo ImpCaligula,
Von Workbook muss ein Object erstellt werden. Mit saveChanges:=True wird bestimmt das die Änderungen gespeichert werden. Mit WBobj.saved := TRUE; wird die alte Datei mit den neuen Daten ohne Nachfragen überschrieben (Bei FALSE kommt ein Dialogbox und fragt ob die Datei überschrieben werden soll).
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Datei: string; WBobj: olevariant; begin Datei:= 'F:\Excel-ProgammOrdner\Beispiel Daten\Test1.xls'; if f_Excel(Excel)then // Excel startet ShowMessage('MSExcel ist erfolgreich gestartet worden!!') else ShowMessage('MSExcel konnte nicht gestartet werden!!'); Excel.Visible := TRUE; // TRUE = Excel sichtbar. WBobj:= Excel.Application.Workbooks.Add; // Neue Arbeitsmappe öffnen in EXECL Excel.Worksheets ['Tabelle1'].Activate; Excel.Cells[1,1]:= 'Test'; WBobj.saved := TRUE; // ohne nachfragen Überschreiben WBobj.Close (saveChanges:=True, FileName:=Datei); Excel.Quit; Bis bald Chemiker |
Re: Excel schließen und speichern(!)
Hallo Chemiker,
ich habe den Code von ImpCaligula mit Deiner Erweiterung ausprobiert, da ich auch das Problem habe, Daten in eine Excel-Datei aus Delphi heraus speichern zu müssen. Excel wird auch gestartet und die Zahl in das Tabellenblatt eingetragen. Nur das Abspeichern funktioniert nicht, es kommt aber auch keine Fehlermeldung. Habe es mit vorhandener XLS-Datei und auch ohne ausprobiert. System: D7 und Excel 2002 Ich bin Ratlos. Oliver |
Re: Excel schließen und speichern(!)
Herzlich willkommen in der Delphi-PRAXiS, oaktrvm.
Ich habe mal den Quell-Code etwas geändert, vielleicht geht’s dann. Mir steht leider kein Excel 2002 zur Verfügung, deswegen kann ich nicht überprüfen wo der Fehler liegt. Einfach mal ausprobieren.
Delphi-Quellcode:
Bis bald Chemiker
{------------------------------------------------------------------------------}
{ EXCEL starten } {------------------------------------------------------------------------------} function EXCELStarten (var m_EXCEL : Variant): boolean; begin try m_EXCEL := CreateOleObject('Excel.Application'); Result := TRUE; except ShowMessage('Excel konnte nicht gestartet werden!'); Result := FALSE; Exit end; end; procedure TForm1.Button1Click(Sender: TObject); var zahl, zahl2 : string; DateiName: string; WBobj: olevariant; Excel: Variant; begin DateiName:= 'F:\Excel-ProgammOrdner\Beispiel Daten\Test1.xls'; if EXCELStarten(Excel)then // Excel startet begin ShowMessage('MSExcel ist erfolgreich gestartet worden!!'); end else begin ShowMessage('MSExcel konnte nicht gestartet werden!!'); end; Excel.Visible := TRUE; // TRUE = Excel sichtbar. WBobj:= Excel.Application.Workbooks.Add; // Neue Arbeitsmappe öffnen in EXECL Excel.Worksheets ['Tabelle1'].Activate; zahl:= '+0000123789'; zahl2:= '+0000123789222'; Excel.cells[1,1].select; // Zelle wählen Excel.Selection.numberFormat:= '@'; // benutzerdefiniertes Zahlenformat Excel.Cells[1,1]:= zahl; // String in die Zelle schreiben. Excel.Cells[1,2].select; Excel.Selection.numberFormat:= '@'; Excel.Cells[1,2]:= zahl2; Excel.cells[1,6]:= 'Hiervvvvvvvv1111111 '; WBobj.saved := FALSE; WBobj.Close (saveChanges:=TRUE, FileName:=DateiName); Excel.Quit; end; |
Re: Excel schließen und speichern(!)
Hallo Chemiker,
vielen Dank für die schnelle Antwort, aber das trifft es nicht. Das Problem liegt nicht am Eintragen der Daten in das Excel-Blatt, sondern am Speichern. Wenn ich die beiden Zeilen wbobj.saved und wbobj.close auskommentiere, fragt Excel, ob es speichern soll und speichert die Datei unter dem dann gewählten Dateinamen. Die Daten stehen dann korrekt in den entsprechenden Feldern. Wenn die Zeilen drin sind, passiert gar nichts. Egal, ob die Datei test1 im gewählten Verzeichnis vorhanden ist, oder nicht. Liegt es vielleicht an der Unit comobj, die ich für die Funktionen eingebunden habe? mfg Oliver |
Re: Excel schließen und speichern(!)
Hallo oaktrvm,
ich glaube nicht, dass es an der Unit ComObj liegt. Es wird wahrscheinlich daran liegen, dass Du WBobj.saved auf FALSE und saveChanges auf TRUE setzen muss. Außerdem muss der Path und das Laufwerk stimmen, dann müsste es eigentlich funktionieren. Wenn nicht, melde Dich noch mal. Bis bald Chemiker |
Re: Excel schließen und speichern(!)
so klappt bei mir das speichern der neuen daten:
Delphi-Quellcode:
das ist aber nicht die beste lösung.
// nervige Meldungen ausschalten:
Excel.DisplayAlerts := FALSE; WBobj.saved := false; WBobj.Close (saveChanges:=TRUE, FileName:=DateiName); Excel.Quit; scheinbar liegt es an den parametern von wobj.close(...). kenne das problem, das bei unterschiedlichen version von word / excel da gern mal unterschiedliche parameter angegeben werden mussten, selbst wenn es nur eine "emptyParam" mehr war. und noch etwas: wenn du das ole object erstellst, könnte man auch noch prüfen ob excel bereits läuft und dann auf diese instanz zugreifen.
Delphi-Quellcode:
//Create Excel-OLE Object try XLApp := GetActiveOleObject('Excel.Application'); // laden wenn excel offen except XLApp := CreateOleObject('Excel.Application'); // oder Excel starten end; |
Re: Excel schließen und speichern(!)
Hallo computer-glossar.de,
mit WBobj.saved:= FALSE wird EXCEL vorgespielt, dass es noch nicht gespeicherte Änderungen gibt. Mit SaveChanges muss auf TRUE gesetzt werden, sonst werden die Änderungen im WorkBook nicht abgespeichert. Mit Excel.DisplayAlerts := FALSE; währe ich sehr vorsichtig. Man sollt die Rückfragen auch wieder vor dem Verlassen zurückstellen, weil alle Rückfragen ausgestellt werden! Wenn man Excel.DisplayAlerts := FALSE; benutzt sollte man es so anwenden:
Delphi-Quellcode:
Wenn dann ein Fehler auftritt, weil der Path oder die Laufwerk Angaben nicht stimmen, werden die Rückfragen wieder angezeigt.
{-------------------------------------------------------------------------------
Funktion: EXCELOhneNachFragenSchliessen() Bemerkung: Mit dieser Function wird das neu aktive WorkBook unter den unter DateiName angegeben Namen abgespeichert. Dabei wird die Rückfrage "Sollen Ihre Änderungen in <Datei> gespeichert werden?" erscheint immer, wenn eine Arbeitsmappe geschlossen wird, welche nicht gespeicherte Änderungen enthält unterdrückt. Die Datei wird immer abgespeichert, auch wenn diese keine Änderung enthält. Parameter: m_Excel :Variant // Ist die Excel-Apllication-Variable. WorkBobj:olevariant // Ist die Aktuelle Workbook-Variable. DateiName: String // Ist der komplette Path mit Laufwerk, Path // und DateiName. Functions-Wert: = TRUE // alles Klar die Datei ist normal abgespeichert // worden. = FALSE // Es ist beim Abspeichern ein Fehler aufgetreten. Version: 1.01 letz.Ändr.: 12.05.2006 -------------------------------------------------------------------------------} function EXCELOhneNachFragenSchliessen(m_Excel: Variant; WorkBobj: olevariant; const DateiName: String): Boolean; begin Result:= FALSE; m_Excel.Application.DisplayAlerts := False; // Alle Rückfragen ausstellen try WorkBobj.saved := FALSE; WorkBobj.Close (saveChanges:=TRUE, FileName:=DateiName); Result:= TRUE; // Alles OK dann wird TRUE zurückgegeben. finally m_Excel.Application.DisplayAlerts := TRUE; // Alle Rückfragen anstellen m_Excel.Quit; end; end; Bis bald Chemiker |
Re: Excel schließen und speichern(!)
Hallo Chemiker,
der letzte Tip war es. Ich hatte, wie in deinem ersten Posting an ImpCaligula wbobj.saved auf True gesetzt. Mit False geht es. Danke. Oliver |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 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