я точно не знаю, но большинство объектов автоматизации Microsoft поддерживают IPersist или IPersistStream , что может позволить вам загружаться из потока в памяти.
Что-то вроде (псевдокод):
xl = new Office.ExcelApplication;
(xl as IPersistStream).Load(myMemoryStream);
Вы можете использовать вспомогательную функцию оболочки CreateStreamOnHGlobal , чтобы создать оболочку IStream вокруг некоторой памяти:
functionCreateStreamOnMemory(pData: Pointer; nCount: DWORD): IStream;
var
hMem: HGLOBAL;
dwError: DWORD;
p: Pointer;
begin
hMem := GlobalAlloc(GMEM_MOVEABLE or GMEM_NODISCARD, nCount);
//CreateStreamOnHGlobal says "The handle must be
//allocated as movable and nondiscardable."
if hMem = 0 then
RaiseLastWin32Error;
p := GlobalLock(hMem);
if p = nil then
begin
dwError := GetLastError;
GlobalFree(hMem);
raise EWin32Error.Create('Could not lock global memory object: '+SysErrorMessage(dwError));
end;
try
CopyMemory(p, pData, nCount);
finally
GlobalUnlock(hMem);
end;
OleCheck(CreateStreamOnHGlobal(hMem, True, Result)); //Because we pass True, the stream will take care of freeing the HGLOBAL when the stream is released
end;
Запишите вашу строку в память и посмотрите, загружается ли она.