На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Paste to ExcelApplication
    Вопрос на засыпку (от слова спать) :)
    Как вставить из буфера обмена таблицу в Excel, используя ExcelApplication ?

    Нигде в нете не могу найти ответ!
    Впрочем, нашёл где-то такую строчку:
    OLEVariant(Workbooks[1].Worksheets[1] ).PasteSpecial;

    Это работает, но если запущено больше одного экселя, то вставляет ОНО текст не в ту книгу, которую надо! И вообще, что это за зверь - OLEVariant? Я его боюсь :o
    Можно без него обойтись?
      Цитата ILUXER @
      И вообще, что это за зверь - OLEVariant

      можно просто Variant и CreateOleObject
      сделай подобную операцию в Excel'е и запиши макрос, потом посмотри код... перевести на Delphi не составит большого труда
          dron-s
          Пробовал, там написано ActiveSheet.Paste
          Это никак не помогает.
          В Delphi я не могу написать Workbooks[1].ActiveSheet.Paste потому что Undeclared identifer Paste.

          Albinos_X
          Был уже тут, читал. Но... ничего про вставку в Excel из clipboarda, всё только про Word.
            Цитата ILUXER @
            В Delphi я не могу написать Workbooks[1].ActiveSheet.Paste потому что Undeclared identifer Paste.

            А вот с этого места - поподробнее... У меня все компилируется... Покажи, как запускаешь Excel.
              там про Excel тоже есть, просто не внимательно прочитал статью... поясню... дело в том, что если ты запустишь сначала книгу отдельно, потом свою книгу, но обращаться будешь по :
              ExpandedWrap disabled
                OLEVariant(Workbooks[1].Worksheets[1] ).PasteSpecial;

              то она уже никак не будет иметь индекс = 1, твоя книга будет уже второй т.д. и т.п., то же самое если запустишь несколько книг, потом свою, потом часть закроешь, то индек изменится...
              поэтому следует :
              1. При открытии сразу связывать объект (переменную) с этой книгой или конкретным листом и через него обращаться

              2. Производить поиск нужной книги и листа по заголовку в массиве книг

              3. Фиксировать при запуске индекс книги и следить за её перемещением в массиве

              считаю самым оптимальным первый вариант...

              а через имеющиеся компаненты это уже не сложно сделать
              например для ExcelApplication:
              ExpandedWrap disabled
                ExcelApplication1.Range['A1',EmptyParam]._PasteSpecial(EmptyParam,EmptyParam,EmptyParam,EmptyParam);


              для ExcelWorksheet1 :
              к примеру
              ExpandedWrap disabled
                ExcelWorksheet1._PasteSpecial;


              или
              ExpandedWrap disabled
                ExcelWorksheet1.Paste;
              Сообщение отредактировано: Albinos_X -
                2 Albinos_X
                ExpandedWrap disabled
                  ExcelApplication1.Range['A1',EmptyParam]._PasteSpecial(EmptyParam,EmptyParam,EmptyParam,EmptyParam);

                компилируется, если убрать знак подчёркивания перед _PasteSpecial. Что этот знак обозначает, не догадываюсь, но вставки всё равно не происходит, даже если заменить A1 на EmptyParam. Ошибку выдаёт дебагер во время выполнения "Could not convert type (Error) to type(Boolean)" - точно не помню, что-то вроде этого

                Далее
                ExpandedWrap disabled
                  ExcelWorksheet1.Paste;

                Но у Workшитов нету такой функции! Когда я пишу Workbooks[1].Worksheets[1].paste , Delphi не понимает!

                2 volvo877 & 2 ALL
                На форме TExcelApplication
                AutoConnect=FALSE
                AutoQuit=TRUE

                В программе:
                ExpandedWrap disabled
                  with ExcelApplication1 do
                  begin
                    Connect;
                    Workbooks.Add(EmptyParam, 0);
                    Clipboard.Clear;
                    
                    //...
                    // Здесь в буфер обмена накапливаются нужные данные
                    // ...
                    
                    OLEVariant(Workbooks[1].Worksheets[1] ).PasteSpecial; //Вот эту строчку нужно заменить
                  //чтобы текст вставлялся в нужную книгу
                   
                    //...
                    // Здесь форматирование ячеек и всё такое
                    //...
                   
                    Visible[0]:=true;  //сделать Excel видимым
                    if WindowState[0] = xlMinimized then WindowState[0] := xlNormal;
                    ScreenUpdating[0] := true;
                    Clipboard.Clear;
                  end;
                  Цитата ILUXER @
                  омпилируется, если убрать знак подчёркивания перед _PasteSpecial

                  у тебя какая версия Delphi и Office ?
                  У меня именно они и есть...

                  Цитата ILUXER @
                  Но у Workшитов нету такой функции! Когда я пишу Workbooks[1].Worksheets[1].paste

                  есть... но тот который ты используешь неверен (!!!)....


                  ExpandedWrap disabled
                    ...
                      ExcelApplication1.ConnectKind:=ckNewInstance;
                      ExcelApplication1.AutoConnect:=true;
                      ExcelApplication1.SheetsInNewWorkbook[LOCALE_USER_DEFAULT]:=1;
                      ExcelApplication1.Workbooks.Add(EmptyParam,LOCALE_USER_DEFAULT);
                      ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkbook.ActiveSheet as ExcelWorkSheet);
                     
                      //...
                      // Здесь в буфер обмена накапливаются нужные данные
                      // ...
                     
                      ExcelWorksheet1._PasteSpecial;
                      //чтобы текст вставлялся в нужную книгу
                     
                      //...
                      // Здесь форматирование ячеек и всё такое
                      //...  
                     
                      ExcelApplication1.Visible[LOCALE_USER_DEFAULT]:=true;  //сделать Excel видимым
                      if WindowState[0] = xlMinimized then WindowState[0] := xlNormal;
                      ScreenUpdating[0] := true;
                      Clipboard.Clear;
                    ...


                  в наборе имеется восемь методов ExcelWorksheet1._PasteSpecial
                  с нулём и до 7 параметров:
                  ExcelWorksheet1._PasteSpecial(Format, Link, DisplayAsIcon, IconFileName, IconIdex, IconLabel, lcid);

                  все OleVariant кроме последнего, он Integer...

                  Добавлено
                  Цитата Albinos_X @
                  но тот который ты используешь неверен (!!!)...

                  с помощью него получишь только ссылку на объект...
                  и к тому же это не решит твою проблему с "промахом" страницей...

                  Добавлено
                  да и ещё... кинь на форму ТExcelWorksheet...

                  Добавлено
                  Цитата Albinos_X @
                  есть... но тот который ты используешь неверен (!!!)....

                  ты попутал доступ через компоненту и через OleVariant...
                    Всё заработало, огромное спасибо!
                    Версия Delphi 7, Office 2002.
                    Комоненты на поллитре компонентов (вкладка Servers) - все с добавкой 2000! А будет ли программа работать с другой версией Офиса? :o
                      должна... если бы было _PasteSpecial с параметрами, то может чем-то ХР от 2000 и отличалось бы, так проблем не должно возникать...

                      Удачи!
                        С чем связано то, что данные иногда вставляются в непонятной кодировке?
                          вероятно с тем, откуда копируешь... тоже самое, как русский текст копируется в окно ответа здесь...
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0750 ]   [ 16 queries used ]   [ Generated: 6.08.25, 13:14 GMT ]