Hallo zusammen,
ich habe in meiner Anwendung Funktionalitäten, die mir Excel-Sheets erstellen. Bisher habe ich unter D7 Prof. mit der 97er-Office-Komponenten gearbeitet. Beim Umstieg auf BDS2006 stehen mir ja nur 2000 oder XP bei der Installation zur Verfügung. Leider verhält sich meine Anwendung beim Generieren der Excel-Sheets jetzt anders.
Bisher konnte der Anwender Excel-Sheets in der Form generieren, dass nach erfolgter Erstellung Excel mit dem erstellten Sheet sichtbar am Bildschirm war (was dann der Anwender damit macht - speichern oder drucken - ist ihm überlassen).
Unter BDS2006 mit OfficeXP-Unterstützung ist es jetzt so, dass Excel nach erfolgter Erstellung nicht mehr sichtbar wird.
Grundsätzlich verwende ich TExcelApplication und Co. so:
Delphi-Quellcode:
procedure CreateMISExcel(aVTIST: TVirtualStringTree;aTitel: String; aExApp: TExcelApplication; aExBook:TExcelWorkbook; aExSheet: TExcelWorksheet);
var
...
begin
strPath:=ExtractFilePath(Application.ExeName)+'Vorlagen\blanko.xls';
OpenExcel(aExApp);
aExApp.Workbooks.Open(strPath,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,FLCID);
aExSheet.ConnectTo(aExApp.Sheets.item[1] as _WorkSheet);
aExSheet.Cells.Item[1,1]:=aTitel;
...
aExApp.Visible[FLCID] := true;
CloseExcel(aExApp, aExBook, aExSheet);
end;
mit
procedure OpenExcel(aExApp: TExcelApplication);
begin
FLCID:=GetUserDefaultLCID;
aExApp.Connect;
aExApp.Visible[FLCID] := False;
aExApp.UserControl := False;
aExApp.DisplayAlerts[FLCID]:=False;
aExApp.AskToUpdateLinks[FLCID]:=False;
end;
und
procedure CloseExcel(aExApp: TExcelApplication; aExBook:TExcelWorkbook; aExSheet: TExcelWorksheet);
begin
aExApp.Disconnect;
end;
Diese Lösung war bisher auch auch "sauber", also keine Excel-Instanzen mehr im Taskmanager o.ä.
Die Einzige Änderung, die ich in meinem Projekt bei der Portierung vornehmen musste, war 2 "EmptyParam"-Werte zusätzlich in
Delphi-Quellcode:
aExApp.Workbooks.Open(strPath,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,FLCID);
einzufügen, da sich offenbar die Definition geändert hat. Da ich keine Dokumentation zu den Parametern in der
BDS-Hilfe finden kann, kann dieses Verhalten evtl. auch mit den neuen Parametern zusammenhängen.
Igotcha