![]() |
Excel Dokument speichern ohne Sicherheitsabfrage
Hallo,
Ich möchte mein Excel dokument Speichern, ohne das ich eine Abfrage bekomme, ob ich die bestehende Datei wirklich überspeichern will. Hier mein Quellcode (im Forum gefunden)
Delphi-Quellcode:
Ist es möglich das Excel Dokument zu speichern, so das es zu keiner extra Bestätigung kommt?procedure TForm1.ExcelOeffnen; var WorkBk: _WorkBook; // ein WorkBook deklarieren WorkSheet: _WorkSheet; // ein WorkSheet deklarieren Excel: TExcelApplication; _lcid: LCID; begin _lcid := GetUserDefaultLCID; Excel := TExcelApplication.Create(Self); // Zum Server TExcelApplication verbinden Excel.Connect; // WorkBooks zur ExcelApplication hinzufügen Excel.Workbooks.Open('C:\Fondskurse.xls', emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, EmptyParam,EmptyParam,EmptyParam,_lcid); // erstes WorkBook auswählen WorkBk := Excel.WorkBooks.Item[1]; // erstes WorkSheet definieren WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet; // Wer aus Zelle (1,1) anzeigen // ShowMessage(Worksheet.Cells.Item[1, 2].Value); Worksheet.Cells.Item[1, 1]:='test2'; Excel.Save('C:\Fondskurse.xls'); // Auch schon mit WorkBk.Close(True, 'C:\Fondskurse.xls', emptyParam, _lcid); ausprobiert // Server disconnecten Excel.Quit; end; Und nebenbei: Was ist eigentlich ein WorkBook und WorkSheet? Wie kann ich mir das Vorstellen? Bin dankbar für jede Hilfe, Ferby |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Hallo Ferby,
es ist eigfentlich ganz einfach: Entweder du iterierst über die offenen WorkBooks und speicherst diese - oder du setzt die Eigenschaft DisplayAlerts der ExcelApplication auf False und verwirfst alle ungespeicherten Änderungen. In beiden Fällen siehst du dann keinen Dialog mehr. Grüße vom marabu |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Hallo,
Delphi-Quellcode:
Entweder du iterierst über die offenen WorkBooks und speicherst diese
wie mache ich das? Ich tu mir gerade recht schwierig da ich mir nicht sicher bin, was überhaupt ein WorkBook ist......
Delphi-Quellcode:
oder du setzt die Eigenschaft DisplayAlerts der ExcelApplication auf False und verwirfst alle ungespeicherten Änderungen
Verwerfen will ich die Änderungen nicht, ich will die Änderrungen abspeichern, Also fällt diese Lösung für mich weg. |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Die zweite Methode hatte ich nur wegen der Vollständigkeit mit angegeben. Iterieren kannst du so:
Delphi-Quellcode:
Die Objekte Application, WorkBook und WorkSheet spielen eine Schlüsselrolle bei der Automation von Excel. Kurz gesagt fasst ein WorkBook mehrere WorkSheets zusammen und eine Application mehrere WorkBooks. Näheres dazu solltest du in einem Excel Handbuch finden.
var
i: Integer; xl: TExcelApplication; begin for i := 0 to Pred(xl.Workbooks.Count) do xl.Workbooks[i].Save(GetUserDefaultLCID); end; Freundliche Grüße |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Hallo,
danke für deine Hilfe, werde es morgen ausprobieren ob es so geht |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Hallo,
Es kommt die Fehlermeldung --------------------------- NONAME --------------------------- Ungültiger Index. --------------------------- OK --------------------------- ............. ED: So gehts:
Delphi-Quellcode:
danke!
for i := 0 to Pred(Excel.Workbooks.Count) do
Excel.Workbooks[i+1].Save(GetUserDefaultLCID); |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Sorry Ferdinand, das war die Macht der Gewohnheit. In VBA werden die Collection-Items ja ab 1 gezählt.
Richtig ist es dann so:
Delphi-Quellcode:
Freundliche Grüße
var
i: Integer; xl: TExcelApplication; begin for i := 1 to xl.Workbooks.Count do xl.Workbooks[i].Save(GetUserDefaultLCID); end; |
Re: Excel Dokument speichern ohne Sicherheitsabfrage
Hallo Zusammen,
Das was hier schon steht habe ich gerade auch mal Probiert. Beim ersten Klicken klappt das auch doch sobald ich das 2te mal das machen möchte setzt der Workbooks.count auf null und springt nicht in die For schleife rein! Wenn ich die forschleife rauslasse und eine 1 also i eintrag kommt ungütliger Index :( Code:
Delphi-Quellcode:
procedure TfrmZeiterfassung.AnfangArbeitClick(Sender: TObject);
var i: Integer; begin if AmArbeiten= true then Messagedlg('Sie Sind schon am Arbeiten',mtError,[mbok],0) else begin Excel:= CreateOleObject('Excel.Application'); Excel.Workbooks.open(ExtractFilePath(Application.ExeName) + 'Zeiterfassung2007.xls'); excel.sheets[AktuelleMappe].cells[AktuelleZeile,1].value:=DateToStr(AktuellesDatum); AmArbeiten:= true; AnfangsZeitArbeit:= Time; ShowMessage(TimeToStr(AnfangsZeitArbeit)); excel.sheets[AktuelleMappe].cells[AktuelleZeile,2].value:= TimeToStr(AnfangsZeitArbeit); for i := 1 to xl.Workbooks.Count do xl.Workbooks[i].Save(GetUserDefaultLCID); Excel.Quit; end; end; procedure TfrmZeiterfassung.EndeArbeitClick(Sender: TObject); var i: Integer; begin if AmArbeiten= false then Messagedlg('Sie Sind nicht am Arbeiten',mtError,[mbok],0) else if InDerPause= true then Messagedlg('Sie sind noch in der Pause',mtError,[mbok],0) else begin Excel:= CreateOleObject('Excel.Application'); Excel.Workbooks.open(ExtractFilePath(Application.ExeName) + 'Zeiterfassung2007.xls'); AmArbeiten:= false; EndeZeitArbeit:= Time; ShowMessage(TimeToStr(EndeZeitArbeit)); excel.sheets[AktuelleMappe].cells[AktuelleZeile,5].value:= TimeToStr(EndeZeitArbeit); for i := 1 to xl.Workbooks.Count do xl.Workbooks[i].Save(GetUserDefaultLCID); Excel.Quit; end; end; procedure TfrmZeiterfassung.AnfangPauseClick(Sender: TObject); var i: integer; begin if AmArbeiten= false then Messagedlg('Sie können nicht in die Pause gehen da sie noch nicht am Arbeiten sind.',mtError,[mbok],0) else begin if InderPause= true then Messagedlg('Sie Sind schon in der Pause.',mtError,[mbok],0) else begin Excel:= CreateOleObject('Excel.Application'); Excel.Workbooks.open(ExtractFilePath(Application.ExeName) + 'Zeiterfassung2007.xls'); InderPause:= true; AnfangsZeitPause:= Time; ShowMessage(TimeToStr(AnfangsZeitPause)); excel.sheets[AktuelleMappe].cells[AktuelleZeile,3].value:= TimeToStr(AnfangsZeitPause); for i := 1 to xl.Workbooks.Count do xl.Workbooks[i].Save(GetUserDefaultLCID); Excel.Quit; end; end; end; procedure TfrmZeiterfassung.EndePauseClick(Sender: TObject); var i: integer; begin if AmArbeiten= false then Messagedlg('Sie können nicht in die Pause gehen da sie noch nicht am Arbeiten sind.',mtError,[mbok],0) else begin if InderPause= false then Messagedlg('Sie Sind nicht in der Pause.',mtError,[mbok],0) else begin Excel:= CreateOleObject('Excel.Application'); Excel.Workbooks.open(ExtractFilePath(Application.ExeName) + 'Zeiterfassung2007.xls'); InderPause:= false; EndeZeitPause:= Time; ShowMessage(TimeToStr(EndeZeitPause)); excel.sheets[AktuelleMappe].cells[AktuelleZeile,4].value:= TimeToStr(EndeZeitPause); for i := 1 to xl.Workbooks.Count do xl.Workbooks[i].Save(GetUserDefaultLCID); Excel.Quit; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 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