На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Load from Stream for OLE
    Как загрузить xls файл с потока в ole обект?

    ExpandedWrap disabled
      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;
    Сообщение отредактировано: NOCaut -
      ExpandedWrap disabled
        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;
        Как сделать так чтоб Окно Excel не отображалось пользователю?
          Цитата NOCaut @
          чтоб Окно Excel не отображалось пользователю

          попробуй OleObject.DoVerb(-3,... или App.Visible := False;
            App.Visible := False; - будет после OleObject.DoVerb(), а -3 параметр - попробую.

            Добавлено
            OleObject.DoVerb(-3.. - при доступе к елементам получаю ошибку

            ExpandedWrap disabled
               App.Sheets[p.Sheet+1].Cells[p.Row+1,p.Col+1] := ValueList[i];


            ExpandedWrap disabled
              Project test.exe raised exception class EOleException with message 'OLE error 800A03EC'.
              Цитата NOCaut @
              EOleException with message 'OLE error 800A03EC'.

              варианты
              - выход за границы массива
              - ошибка в формате данных
              - длина превышает допустимую для ячейки
                Не один из вариантов не подходит. при параметре OleObject.DoVerb(0 ... все работает
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0260 ]   [ 16 queries used ]   [ Generated: 20.04.24, 01:59 GMT ]