Delphi + Excel

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 ?

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

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:

  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();
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:

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 ;-)

0
maciejmt napisał(a)

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

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1