Текущее время: Сб, июл 19 2025, 12:55

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: DOI+Excel: вставка строк (без помощи макросов!)
СообщениеДобавлено: Ср, сен 06 2006, 16:21 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Всем привет.
Сорри, если вопрос чайниковский.
Уже реализовал класс, который читает данные (единичные ячейки и таблицы) из Excel'евских документов. Хотел бы заставить его заодно и записывать данные (единичные ячейки и таблицы) в документы.
Проблема в том, что не соображу, как через DOI вставлять строки в документ, для вывода таблиц (чтобы строки, идущие после таблицы, сдвигались вниз).

Как?
1.) Через DOI;
2.) Без использования макросов.
Заранее спасибо.

Пара замечаний:
1.) Как это делается через OLE, я знаю.
2.) Как это делается макросами, я тоже знаю.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 06 2006, 19:24 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Проименуй в экселе ячейки, куда собираешься выводить, и используй метод интерфейса SHEET - SET_RANGES_DATA.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 07 2006, 08:10 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Пономарев Артем написал:
Проименуй в экселе ячейки, куда собираешься выводить, и используй метод интерфейса SHEET - SET_RANGES_DATA.


Да это понятно.
Но что нужно сделать, чтобы эти ячейки (которые надо "проименовать") были?

Есть:
1.) Хидер;
2.) Таблица (в шаблоне - одна строка);
3.) Футер.

Нужно заполнить таблицу произвольным количеством строк (сдвинув футер вниз), затем заполнить футер.

КАК?

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 07 2006, 08:16 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
111 написал(а):
Нужно заполнить таблицу произвольным количеством строк (сдвинув футер вниз), затем заполнить футер.

КАК?


А и ладно. Сделаю по-тупому. Прочитаю то, что идет после таблицы, затем это скопирую вниз.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 07 2006, 09:35 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
INSERT_RANGE_DIM вместо велосипеда и простой подсчет строк таблицы в программе избавят от тупого подхода.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, сен 07 2006, 18:04 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Пономарев Артем написал:
INSERT_RANGE_DIM вместо велосипеда и простой подсчет строк таблицы в программе избавят от тупого подхода.


МЛИН!!! :-(
Ну не вставляет строки этот метод, не вставляет!

См. выше.
Я несколько раз подчеркнул в предыдущих постах, что мне надо ВСТАВИТЬ СТРОКИ, чтобы строки, идущие после позиции вставки, СДВИНУЛИСЬ ВНИЗ.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 11 2006, 16:54 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
C помощью DOI - никак. Только смесь DOI+OLE типа:
Code:
  DATA: ls_handle TYPE cntl_handle,
        ls_range  TYPE ole2_object,
        ls_appl   TYPE ole2_object.

        CALL METHOD excel->select_range
             EXPORTING rangename = <range>
                       no_flush  = 'X'.

        CALL METHOD document->get_document_handle
          IMPORTING error    = error
                    handle   = ls_handle
                    retcode  = retcode.
        GET PROPERTY OF ls_handle-obj 'Application' = ls_appl.
        IF sy-subrc = 0.
          DO i_rows TIMES.
            CALL METHOD excel->select_range
                 EXPORTING rangename = <range>
                           no_flush  = 'X'.
            GET PROPERTY OF ls_appl 'Selection' = ls_range queue-only.
            CALL METHOD OF ls_range 'Copy' NO FLUSH QUEUE-ONLY.
            CALL METHOD OF ls_range 'Insert'
                 NO FLUSH QUEUE-ONLY
                 EXPORTING #1 = -4121.
          ENDDO.
          SET PROPERTY OF ls_appl 'CutCopyMode' = 0 queue-only.
          FREE OBJECT: ls_appl,
                       ls_range.
        ENDIF.

Здесь <range> - твоя шаблонная строка, формат которой сохранится при вставке новых строк, i_rows - число вставленных строк.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, янв 09 2007, 22:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
супер! отличная тема!!! очень помогла. недаром EGF и Nicky555 - гуру!!

от себя лишь скажу, что если выводить много строк (около 20000), то производительней сделать так:
Code:
          CALL METHOD excel->select_range
               EXPORTING rangename = <range>
                         no_flush  = 'X'.
          GET PROPERTY OF ls_appl 'Selection' = ls_range queue-only.
          CALL METHOD OF ls_range 'Copy' NO FLUSH QUEUE-ONLY.
          DO i_rows TIMES.
            CALL METHOD OF ls_range 'Insert'
                 NO FLUSH QUEUE-ONLY
                 EXPORTING #1 = -4121.
          ENDDO.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, янв 10 2007, 15:34 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
У последнего метода есть неприятное свойство. Если ниже вставляемых строк есть ячейки смерженные вертикально, то количество вставленных строк может быть больше, чем вы хотите вставить. Если ниже идет текст, то могут оказаться пустые строки.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB