Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Excel Dokument speichern ohne Sicherheitsabfrage (https://www.delphipraxis.net/88758-excel-dokument-speichern-ohne-sicherheitsabfrage.html)

ferby 20. Mär 2007 15:35


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:

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;
Ist es möglich das Excel Dokument zu speichern, so das es zu keiner extra Bestätigung kommt?

Und nebenbei: Was ist eigentlich ein WorkBook und WorkSheet? Wie kann ich mir das Vorstellen?


Bin dankbar für jede Hilfe,

Ferby

marabu 20. Mär 2007 18:38

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

ferby 20. Mär 2007 18:52

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.

marabu 20. Mär 2007 19:33

Re: Excel Dokument speichern ohne Sicherheitsabfrage
 
Die zweite Methode hatte ich nur wegen der Vollständigkeit mit angegeben. Iterieren kannst du so:

Delphi-Quellcode:
var
  i: Integer;
  xl: TExcelApplication;
begin
  for i := 0 to Pred(xl.Workbooks.Count) do
    xl.Workbooks[i].Save(GetUserDefaultLCID);
end;
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.

Freundliche Grüße

ferby 20. Mär 2007 23:52

Re: Excel Dokument speichern ohne Sicherheitsabfrage
 
Hallo,

danke für deine Hilfe, werde es morgen ausprobieren ob es so geht

ferby 21. Mär 2007 13:04

Re: Excel Dokument speichern ohne Sicherheitsabfrage
 
Hallo,

Es kommt die Fehlermeldung

---------------------------
NONAME
---------------------------
Ungültiger Index.
---------------------------
OK
---------------------------


.............


ED:

So gehts:

Delphi-Quellcode:
     for i := 0 to Pred(Excel.Workbooks.Count) do
     Excel.Workbooks[i+1].Save(GetUserDefaultLCID);
danke!

marabu 21. Mär 2007 20:04

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:
var
  i: Integer;
  xl: TExcelApplication;
begin
  for i := 1 to xl.Workbooks.Count do
    xl.Workbooks[i].Save(GetUserDefaultLCID);
end;
Freundliche Grüße

r3v0 18. Apr 2007 10:47

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