AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Excel Dokument speichern ohne Sicherheitsabfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Excel Dokument speichern ohne Sicherheitsabfrage

Ein Thema von ferby · begonnen am 20. Mär 2007 · letzter Beitrag vom 18. Apr 2007
Antwort Antwort
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 20. Mär 2007, 15:35
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 20. Mär 2007, 18:38
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
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 20. Mär 2007, 18:52
Hallo,

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......


 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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 20. Mär 2007, 19:33
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
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 20. Mär 2007, 23:52
Hallo,

danke für deine Hilfe, werde es morgen ausprobieren ob es so geht
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 21. Mär 2007, 13:04
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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 21. Mär 2007, 20:04
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
  Mit Zitat antworten Zitat
r3v0

Registriert seit: 26. Mär 2007
Ort: Wegberg
45 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Excel Dokument speichern ohne Sicherheitsabfrage

  Alt 18. Apr 2007, 10:47
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;
Blub ich bin die Sig.
  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 12:32 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