Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Может кто подскажет по IPersistStorage   Найти похожие ветки 

 
antoniz   (2003-06-26 09:20) [0]

Смысл следующий открыть в Excel объект из TOleConteiner, т.е. по сути дела создать его копию. Привожу код:
procedure TfrmPattern.OpenInExcel(OleStream: TMemoryStream);
var
Excel: Variant;
begin
Excel:=CreateOleObject("Excel.Application");
if Assigned(frmPatternConteiner.olePattern.StorageInterface) then
(IDispatch(Excel.WorkBooks.Add) as IPersistStorage).Load(frmPatternConteiner.olePattern.StorageInterface);
Excel.Visible:=true;
end;

frmPatternConteiner.olePattern - это TOLEConteiner

Код выполняется без ошибки. Однако в Excel открывается книга как вновь созданная. Т.е. такое впечатление что в нее через IPersistStorage ничего не грузилось. Excel XP если это существенно, но я думаю что нет.

Подскажите в чем я не прав.


 
Digitman ©   (2003-06-26 09:53) [1]

а сам олей-контейнер чем и каким способом загружен перед загрузкой данных из него ?


 
antoniz   (2003-06-26 10:03) [2]

у него внедренный объект, из ёкселевского файла. Короче его средствами.


 
Digitman ©   (2003-06-26 10:15) [3]

метод IPersistStorage.Load - это ф-ция или процедура ?


 
antoniz   (2003-06-26 10:18) [4]

функция


 
Digitman ©   (2003-06-26 10:41) [5]

так ведь она же что-то возвращает !

проанализируй возвр. ей результат - возможно, он даст тебе подсказку...


 
antoniz   (2003-06-26 10:49) [6]

Переделал код теперь функция возвращает, что все отлично, но результат тот же. До этого она возвращала, что не доступа к Storage.
код теперь следующий:
procedure OpenInExcel;
var
Storage: IStorage;
PersistStorage, PersistStorage2: IPersistStorage;
Excel: Variant;

begin
Storage:=nil;
PersistStorage2:=IDispatch(frmPatternConteiner.olePattern.OleObject) as IPersistStorage;
OleCheck(StgCreateDocfile(nil, STGM_READWRITE
or STGM_SHARE_EXCLUSIVE or STGM_CREATE, 0,Storage));
OleCheck(PersistStorage2.Save(Storage,false));
Excel:=CreateOleObject("Excel.Application");
PersistStorage:=(IDispatch(Excel.WorkBooks.Add) as IPersistStorage);
if Assigned(Storage) then
Case PersistStorage.Load(Storage) of
S_OK: ShowMessage("Yes"); //возвращает теперь это
CO_E_ALREADYINITIALIZED: ShowMessage("Initial");
E_OUTOFMEMORY: ShowMessage("Out");
E_FAIL: ShowMessage("Fail");
end;
Excel.Visible:=true;
end;

И что делать теперь?



Страницы: 1 вся ветка

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
14-31504
Silentium!
2003-06-19 17:29
2003.07.10
процессы


1-31216
Far
2003-06-28 23:06
2003.07.10
Format vs Mask


1-31244
race1
2003-06-28 19:33
2003.07.10
menu vs. shift


14-31498
Дмитрий К.К.
2003-06-23 06:08
2003.07.10
Именинники 23 июня


1-31194
Mishenka
2003-06-28 04:04
2003.07.10
Как в TreeView определить количество узлов верхнего уровня?