На главную Наши проекты:
Журнал   ·   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
  
> Copy&Paste в Excel средствами Delphi , Не пойму, я копирую данные или нет?.. И вообще..
    Здрасте!
    Я хочу скопировать строку таблицы Excel с первого листа и перенести ее на другой лист.
    Но я не пойму, что происходит когда ставлю метод "Copy" :
    ExpandedWrap disabled
      procedure TForm1.oleWordOpen();
       var
           exelPath:olevariant; // путь к документу Excel.
           exel,elist,elist2:variant;
       
      begin
      exelPath:='D:\2008.xls';
       
       try
       exel:=CreateOleObject('Excel.Application');
       exel.workbooks.open(exelPath);
       elist:=exel.workbooks[1].worksheets['Лист1'];//первый лист
       elist2:=exel.workbooks[1].worksheets['Лист2'];//Второй лист
       exel.visible:=true;
       exel.DisplayAlerts:=false;
      except
           ShowMessage('Невозможно открыть приложение Excel');
           exit;
       end;
      elist.rows[3].select;
      {********************************}
      {Вот здесь непойму, что я сделал?}
      {Я чего нибудь скопировал?       }
      {********************************}
       elist.rows[3].copy;
      end.


    Если скопировал строку, то как с ней дальше обращаться?
    Я могу активировать второй лист книги, могу выделить в нем строку или ячейку:
    ExpandedWrap disabled
       elist2.Activate;
      // выделяется 4 ячейка в первом столбце второго листа. Даже записать в нее что-то возможно.
      elist2.range['A4'].select;
      // или
      // выделяется 4 строка
       elist2.rows[4].select;


    Но как всю строку из "Лист1" перенести в "Лист2" незнаю. Уже 3 день мучаюсь... В Excele -самом, макрос написал, все работает, но его методы здесь не проходят практически:
    ExpandedWrap disabled
      Rows("16:16").Select
          Selection.Copy
          Sheets("Лист2").Select
          Rows("1:1").Select
          ActiveSheet.Paste


    В инете по моему случаю мне ничего найти не удалось... :(
      Лень это в Delphi проверить, но примерно так:

      ExpandedWrap disabled
        exel.workbooks[1].worksheets['Лист1'].Rows['1:1'].Copy;
        exel.workbooks[1].worksheets['Лист2'].Rows['1:1'].Paste;
      Сообщение отредактировано: adem -
        adem:
        Цитата

        'Method Paste' not supported by automation object.//Однако..
        (process stopped.Use Step or Ран, //но нафик уже это надо, в моем положении :( ...)

        Вот я не могу понять что надо сделать, что б поддерживался метод "Paste" :( , "Copy" то поддерживает ...
        Наверняка, что-то есть. Раз Бейсик это может, то почему бы это невмочь Делфи?

        В данный момент, я смог добиться, что бы "програмка" смогла "поячеечно" копировать и вставлять в другой лист, т.е.
        циклом перебирать строку и каждую ячейку копировать в другой лист.
        Хотелось бы обойтись без этого гемороя, но чуствую придется, потому как еще больше вопросов с копированием целой строки предвидится: Там в строке попадаюстся ячейки с датами, а обычным, моим написанным методом, типа, как я хочу сделать, даты выводятся ввиде десятичного числа (или как там это число, типа, 39544 называется) и надо его переводить в "формат времени", если бы получилось моя идея "копи&паста" всей строки, то результат бы был очень странным и не устроит мое начальство, однозначно(хотело видеть,допустим 01.01.2008, а видит, типа, 36789). А "поячеечно", я хотя бы могу контролировать ячейки с датами.
        Наверняка есть способ и эту "занозу" обойти, но у меня знаний маловато :(

        Но все-таки "оч хочеца" узнать, а можно ли целыми строками манипулировать при работе Delphi-Excel ...
        Сообщение отредактировано: uborshik -
          Все получилось.
          Проанализировав код VB (первый пост), пришел к выводу, что обращаться к методу Paste "от имени" rows (или range), в том виде как я хотел, нельзя.
          Короче вот с такой концовкой, написанного в первом посте кода, все работает:
          ExpandedWrap disabled
            .................
            elist.rows[3].select;
            elist2.Activate;
            elist2.rows['1:1'].select;
            exel.activeSheet.paste; // exel:=CreateOleObject('Excel.Application');
            end.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0222 ]   [ 16 queries used ]   [ Generated: 27.06.25, 23:19 GMT ]