Mit -4137 geht es, danke!
Ich habe jetzt einiges geändert, weil das Abscreenen im Endeffekt Schwachsinn ist, da die Excel-Tabelle ja wesentlich mehr Daten enthalten kann als man sieht, auch wenn mans maximiert hat..
Delphi-Quellcode:
procedure TForm1.ExcelViewer(ms:TMemoryStream);
var
Excel : Variant;
strPath : string;
offen : boolean;
begin
offen:=false;
ms.Position:=0;
strPath:=ExtractFilePath(paramstr(0))+'hype.xls';
try
Excel := GetActiveOleObject('Excel.Application');
offen:=true;
except
Excel := CreateOleObject('Excel.Application');
end;
if offen then
try
WB.close;
except
end;
try
ms.savetofile(strPath);
except
showmessage('Nicht genügend freier Speicherplatz oder fehlende Schreibrechte');
end;
WB:=Excel.Workbooks.open(strPath);
Excel.visible:=true;
Excel:=Unassigned;
end;
WB ist eine globale Variable vom Typ Variant. Damit kann ich gegebenenfalls das zuletzt über mein Programm geöffnete Workbook schließen, damit ich die hype.xls wieder benutzen kann. Ich habe leider nicht herausgefunden, wie ich bei Excel.Workbooks.Close den Namen des zu schließenden Workbooks übergeben kann, daher diese unschöne Lösung. Ist schon schwer, ohne Autovervollständigung zu programmieren, ich kann gar nicht gucken, welche Methoden mir zur Verfügung stehen, welche Übergabeparameter die erwarten etc :/
Offene Fragen wären noch die mit dem Stream und obs auch ohne WB geht.
Vielen Dank.