Текущее время: Чт, май 15 2025, 23:00

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Интеграция с Excel
СообщениеДобавлено: Чт, апр 07 2005, 15:42 
Специалист
Специалист

Зарегистрирован:
Пн, дек 06 2004, 11:36
Сообщения: 151
День добрый!
Трабла такая - есть xls-документ с листом, на котором размечен шаблон. Этот шаблон заполняется данными из приложения. Нужно сделать возможность динамического формирования новых листов с тем же шаблоном. Есть метод создания нового листа: spreadsheet->add_sheet, но он создает его чистым, а нужно, чтобы шаблон был и при том один и тот же. Метода копирования листа вместе с шаблоном, я не нашел. Может сталкивался кто.
Зарание благодарен.


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

Зарегистрирован:
Пт, сен 17 2004, 08:10
Сообщения: 1024
Так пропишите процедуру заполнения чистого листа для формирования шаблона. Ну то есть сами этот шаблон и сформируйте из системы.

_________________
- Ничего не поделаешь, - возразил Кот. - Все мы здесь не в своем уме - и ты, и я!
- Откуда вы знаете, что я не в своем уме? - спросила Алиса.
- Конечно, не в своем, - ответил Кот. - Иначе как бы ты здесь оказалась? :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, апр 08 2005, 12:11 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 05 2005, 17:02
Сообщения: 70
Насколько я знаю, такого метода нет в Ёкселе. Я делаю так - сначала создаю чистый лист, потом копирую все ячейки листа шаблона. Копировать надо именно все ячейки, чтобы сохранить форматирование строк и колонок


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

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Однажды получил мудрый совет в данном форуме - если нет метода интерфейса spreadsheet, надо воспользоваться доступом через OLE, получив ссылку на объект книги.
я использовал так для своих целей (вставка нескольких строк (RANGE)):
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 = itmp-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.
ELSE.
* MSG: ошибка выполнения команды OLE
MESSAGE e009 INTO dummy_c.
CALL METHOD g_log->message_add.
CONTINUE.
ENDIF.

А метод объекта коллекции Sheets для копирования листа в пределах книги есть - см. справку VBA.

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, сен 16 2005, 20:13 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
При помощи этой темы сделал копирование sheets, так большой сенькс авторам.
Новый вставляется слева от активного, если не передано имя исходного листа - копируется текущий.

Code:

methods COPY_SPREADSHEET
    importing
      !SOURCE type SOI_FIELD_NAME optional
      !NAME type SOI_FIELD_NAME
    exceptions
      SOURCE_NOT_EXIST
      DESTINATION_ALREADY_EXISTS .

updated
Code:
 
DATA: h_handle      TYPE cntl_handle,
        h_appl        TYPE ole2_object,
        h_sheets       TYPE ole2_object,
        h_active      TYPE ole2_object.
  DATA: l_active      TYPE soi_field_name,
        l_source      TYPE soi_field_name.
  DATA: lt_sheets     TYPE soi_sheets_table.

  CALL METHOD spreadsheet_interface->get_sheets
    IMPORTING
      sheets = lt_sheets.

  CALL METHOD spreadsheet_interface->get_active_sheet
    IMPORTING
      sheetname = l_active.
*--- проверить, что источник существует
  IF source IS NOT SUPPLIED.
    l_source = l_active.
  ELSE.
    READ TABLE lt_sheets WITH KEY sheet_name = source
                         TRANSPORTING NO FIELDS.
    IF sy-subrc <> 0.
      RAISE source_not_exist.
    ENDIF.
    l_source = source.
  ENDIF.
*--- проверить, что новое имя еще не используется
  READ TABLE lt_sheets WITH KEY sheet_name = name
                        TRANSPORTING NO FIELDS.
  IF sy-subrc = 0.
    RAISE destination_already_exists.
  ENDIF.
*-- указатель на ole объект
  CALL METHOD document_proxy->get_document_handle
    IMPORTING
      handle = h_handle.
  DO 1 TIMES.
    GET PROPERTY OF h_handle-obj 'Application' = h_appl.
    CHECK  sy-subrc = 0.

*---- указатель на копируемый лист
    CALL METHOD OF h_appl 'SHEETS' = h_sheets
      EXPORTING
        #1 = l_source.
    CHECK sy-subrc = 0.

*----скопировать, вставив слева от активного
    GET PROPERTY OF  h_sheets 'COPY' = l_active
  exporting
    #1 = h_active.
    CHECK sy-subrc = 0.

*----переименовать
    GET PROPERTY OF h_appl 'ActiveSheet' = h_active.
    CHECK sy-subrc = 0.

    SET PROPERTY OF h_active 'Name' = name.
    CHECK sy-subrc = 0.
  ENDDO.

  FREE OBJECT:
    h_appl,
    h_sheets,
    h_active.
ENDMETHOD.

Как вставлять после текущей я так и не понял ;(


Последний раз редактировалось Boger Вт, сен 20 2005, 14:26, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб, сен 17 2005, 13:39 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Наверно проще посмотреть на MSDN :)
Там достоточно понятно описаны все методы объектов офиса.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, сен 18 2005, 12:35 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
а еще проще в VB editor набрать слово sheets и нажать f1. Результат будет абсолютно тот-же самый!
Проблема соответствия синтаксиса VB абаповскому.
Code:
Copies the sheet to another location in the workbook.

expression.Copy(Before, After)
...
Before  Optional Variant. The sheet before which the copied sheet will be placed. You cannot specify Before if you specify After.

After  Optional Variant. The sheet after which the copied sheet will be placed. You cannot specify After if you specify Before.

Мне совершенно не понятно, что в абапе соответсвует Before, After.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 20 2005, 14:22 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Сегодня наконец начал смотреть что почему не работает, чтобы не плодить ошибки исправлю уже выложенную версию.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, окт 02 2005, 19:45 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Захотелось пояснить, то что поправили :)
Соответственно Before и After - это ABAP переменные, которые хранят ссылки на листы Excel'я
PS
На SDN есть простенькая статейка на эту тему: An Easy Reference For OLE Automation


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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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