AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel schließen und speichern(!)

Ein Thema von ImpCaligula · begonnen am 9. Mai 2007 · letzter Beitrag vom 25. Jun 2007
Antwort Antwort
ImpCaligula

Registriert seit: 30. Aug 2006
21 Beiträge
 
#1

Excel schließen und speichern(!)

  Alt 9. Mai 2007, 11:06
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

Excel.Workbooks.Close (savechanges:=true); noch....

Excel.Workbooks.Close (savechanges:=true, filename:='c:\test.xls');
Kann mir hier jemand bei den 2 Codezeilen helfen? Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Excel schließen und speichern(!)

  Alt 10. Mai 2007, 20:02
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
oaktrvm

Registriert seit: 21. Jun 2007
Ort: Lübeck
3 Beiträge
 
#3

Re: Excel schließen und speichern(!)

  Alt 22. Jun 2007, 21:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Excel schließen und speichern(!)

  Alt 23. Jun 2007, 00:39
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:
{------------------------------------------------------------------------------}
{ 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;
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
oaktrvm

Registriert seit: 21. Jun 2007
Ort: Lübeck
3 Beiträge
 
#5

Re: Excel schließen und speichern(!)

  Alt 24. Jun 2007, 21:06
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
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Excel schließen und speichern(!)

  Alt 24. Jun 2007, 21:58
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Excel schließen und speichern(!)

  Alt 24. Jun 2007, 22:42
so klappt bei mir das speichern der neuen daten:
Delphi-Quellcode:
  // nervige Meldungen ausschalten:
  Excel.DisplayAlerts := FALSE;

  WBobj.saved := false;
  WBobj.Close (saveChanges:=TRUE, FileName:=DateiName);
  Excel.Quit;
das ist aber nicht die beste lösung.
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;
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Excel schließen und speichern(!)

  Alt 24. Jun 2007, 23:05
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:
{-------------------------------------------------------------------------------
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;
Wenn dann ein Fehler auftritt, weil der Path oder die Laufwerk Angaben nicht stimmen, werden die Rückfragen wieder angezeigt.


Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
oaktrvm

Registriert seit: 21. Jun 2007
Ort: Lübeck
3 Beiträge
 
#9

Re: Excel schließen und speichern(!)

  Alt 25. Jun 2007, 21:35
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz