Zrobiłem zapisywanie do Excela, ale gdy stwierdziłem że za długo się to zapisuję postanowiłem przenieść to do wątku... No i zaczęły się schody - "Funkcja CoInitalize nie została wywołana". Próbowałem na rózne sposoby, w konstruktorze wywoływałem, i także poprzez Initalize. Co tu zrobic ? (Przed przeniesieniem do watku nie bylo problemow, wiec to raczej nie jest problem CoInitalize...)
Chyba ze trzeba utworzyc obiekty Excela przed wywolaniem watku i je przekazac jako parametry...
constructor ExportToExcel.Create(Zakres,AVG: Boolean; P_Out, P_Form, P_Szabl: string ; CreateSuspended : Boolean);
var
I : Integer;
begin
FreeOnTerminate := True;
inherited Create(False);
Excel_Formularz := CreateOleObject('Excel.Application');
Excel_Szablon := CreateOleObject('Excel.Application');
tmp := CreateOleObject('Excel.Application');
Excel_Formularz.WorkBooks.Open(Path_Formularz);
Excel_Szablon.WorkBooks.Open(Path_Szablon);
tmp.WorkBooks.Open(Path_Formularz);
CountSheet := Excel_Formularz.WorkBooks[1].WorkSheets.Count;
CountRow := Excel_Szablon.Range['A65536'].End[3].Rows.Row;
if(CountRow > 1) then
begin
SetLength(Arkusz,CountSheet);
(...)
end
else
Terminate;
end;
procedure ExportToExcel.Execute;
var
I,J : Integer;
begin
while not(Terminated) do
begin
for I := 0 to CountSheet - 1 do
begin
Excel_Formularz.Workbooks[1].WorkSheets[I+1].Name := Arkusz[I].Nazwa;
for J := Arkusz[I].Start to Arkusz[I].Koniec do
begin
Col := Excel_Szablon.Cells[J,3];
Row := Excel_Szablon.Cells[J,4];
Wzor := UpperCase(Excel_Szablon.Cells[J,5]);
Cell := Col + Row;
Synchronize(Wartosc);
Excel_Formularz.WorkBooks[1].WorkSheets[I+1].Range[Cell,Cell] := Wynik;
end;
end;
if(FileExists(Path_Out)) then
DeleteFile(Path_Out);
Excel_Formularz.WorkBooks[1].SaveAs(Path_Out);
Excel_Formularz.DisplayAlerts := False;
Excel_Formularz.Quit;
Excel_Szablon.DisplayAlerts := False;
Excel_Szablon.Quit;
tmp.DisplayAlerts := False;
tmp.Quit;
Terminate;