Delphi + Excel

MA
  • Rejestracja:około 17 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Poznań
0

Na wstępie od razu zaznaczam że przeglądałem tematy na tym forum o tym, głównie w oparciu o ten
http://4programmers.net/Forum/viewtopic.php?id=56356 testowalem, ale jest jedno duze ALE...
Gdy wywoluje
Excel.Save;
to wychodzi okno dialogowe gdzie ma zapisac, da sie tego uniknac ?

Teraz drugie pytanie: czy musi byc Excel zainstalowany zeby to w ogole chodzilo ?

Trzecie pytanie : Gdzies kiedys widzialem ze bylo w artykulach o laczeniu sie z Excelem przez ADO, i preferowalbym raczej to rozwiazanie ale teraz nie moge go znalezc. Samo polaczenie zrobic umiem, ale nioe wiek jak i czy da sie wtedy przez ADO ladnie w odpowiednie komorki zainsertowywac dane ?

Oleksy_Adam
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 11 lat
0

ADO jest fajne do przesyłania danych tabelarycznych. W tym typie połączenia nie musisz mieć zainstalowanego excela tylko fizyczny plik xls. Obiekty COM oferują wiele. Od przesyłania po formatowanie na makrach kończąc. W zasadzie można wszystko. Poniżej masz fragment mojej procedurki zapisującej plik

Kopiuj
procedure TExportSpec.xlSaveFile();
begin
  {$I-}
    MkDir(ExtractFilePath(xlSpecName()));
  {$I+}
  if FileExists(xlSpecName()) then DeleteFile(xlSpecName());

    xlWB.SaveAs(xlSpecName(), xlNormal, '', Password,
      EmptyParam, EmptyParam, xlNoChange, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, lcid);

  xlWB.Close();
end;

Jak nie chcesz komunikatów to poczytaj o:

Kopiuj
  lcid := GetUserDefaultLCID();
  xlApp := TExcelApplication.Create(nil);
  xlWB := TExcelWorkbook.Create(nil);
  xlWS := TExcelWorksheet.Create(nil);
  
  // wyłącza komunikaty
  xlApp.DisplayAlerts[lcid] := false;

  // procedury

  xlApp.ScreenUpdating[lcid] := True;
  xlApp.Visible[lcid] := True;

  // po skończeniu pracy powinno się włączać
  xlApp.DisplayAlerts[lcid] := true;

  xlWS.Disconnect();
  xlWB.Disconnect();
  xlApp.Disconnect();

<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>
MA
  • Rejestracja:około 17 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Poznań
0
Oleksy_Adam napisał(a)

ADO jest fajne do przesyłania danych tabelarycznych. W tym typie połączenia nie musisz mieć zainstalowanego excela tylko fizyczny plik xls. Obiekty COM oferują wiele. Od przesyłania po formatowanie na makrach kończąc. W zasadzie można wszystko. Poniżej masz fragment mojej procedurki zapisującej plik
...
</delphi>

Super. Potem sprawdzę. Mógłbyś jeszcze zapodać jakieś procedury jeśli masz ? Zawsze może mi się coś przydać... Bo patrząc po różnych zrodlach trochę głupieję np:

Kopiuj
ExcelApp.WorkBooks[1].WorkSheets[Sheet].Cells[1, 1]:=
ExcelApp.Cells[1, 1].Value:=

I jedno pytanie dodatkowo: czy podczas edycji, da rade nadpisac plik ? Bo widze ze go usuwasz tak na pierwszy rzut oka ;-)

Wodzu
  • Rejestracja:około 23 lata
  • Ostatnio:około 10 lat
0
maciejmt napisał(a)

... Bo patrząc po różnych zrodlach trochę głupieję np:

Kopiuj
ExcelApp.WorkBooks[1].WorkSheets[Sheet].Cells[1, 1]:=
ExcelApp.Cells[1, 1].Value:=

http://msdn.microsoft.com/en-us/library/bb212512.aspx


"as above, so below..all things come from the one. Now You are the victim, carried by the wind, then rooted to the ground. If You want, to learn the secrets..close Your eyes..."

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.