Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.193.158] |
|
Сообщ.
#1
,
|
|
|
Как загрузить xls файл с потока в ole обект?
procedure TForm1.btn2Click(Sender: TObject); Var Ap : Variant; i : Integer; begin Ap := CreateOleObject('Excel.Application'); Ap.Workbooks.Open('D:\123__.xls'); //////////// поменять на поток try Ap.Visible := False; Ap.DisplayAlerts := False; Ap.ActiveWorkBook.SaveAs('D:\test2.xls'); finally Ap.Workbooks.Close; Ap.Quit; end; end; |
Сообщ.
#2
,
|
|
|
procedure Stream2Excel(const Stream: TStream); var DataHandle: HGLOBAL; Buffer: Pointer; LockBytes: ILockBytes; Storage: IStorage; OleObject: IOleObject; App: Variant; begin DataHandle := GlobalAlloc(GMEM_MOVEABLE, Stream.Size); if DataHandle = 0 then OutOfMemoryError; OleObject := nil; try Buffer := GlobalLock(DataHandle); try Stream.Read(Buffer^, Stream.Size); finally GlobalUnlock(DataHandle); end; CreateILockBytesOnHGlobal(DataHandle, True, LockBytes); OleCheck(StgOpenStorageOnILockBytes(LockBytes, nil, STGM_READWRITE or STGM_SHARE_EXCLUSIVE, nil, 0, Storage)); OleCheck(OleLoad(Storage, IOleObject, nil, OleObject)); OleObject.DoVerb(0, nil, nil, 0, 0, Rect(0, 0, 0, 0)); App := GetActiveOleObject('Excel.Application'); ... finally if (DataHandle <> 0) then GlobalFree(DataHandle); if (OleObject <> nil) then OleObject.Close(OLECLOSE_NOSAVE); end; end; |
Сообщ.
#3
,
|
|
|
Как сделать так чтоб Окно Excel не отображалось пользователю?
|
Сообщ.
#4
,
|
|
|
Цитата NOCaut @ чтоб Окно Excel не отображалось пользователю попробуй OleObject.DoVerb(-3,... или App.Visible := False; |
Сообщ.
#5
,
|
|
|
App.Visible := False; - будет после OleObject.DoVerb(), а -3 параметр - попробую.
Добавлено OleObject.DoVerb(-3.. - при доступе к елементам получаю ошибку App.Sheets[p.Sheet+1].Cells[p.Row+1,p.Col+1] := ValueList[i]; Project test.exe raised exception class EOleException with message 'OLE error 800A03EC'. |
Сообщ.
#6
,
|
|
|
Цитата NOCaut @ EOleException with message 'OLE error 800A03EC'. варианты - выход за границы массива - ошибка в формате данных - длина превышает допустимую для ячейки |
Сообщ.
#7
,
|
|
|
Не один из вариантов не подходит. при параметре OleObject.DoVerb(0 ... все работает
|