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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Пн, июл 08 2013, 12:13 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Сб, июл 28 2012, 17:18
Сообщения: 50
Добрый день пытаюсь загрузить документ формата *.doc. Использую ф.м. GUI_UPLOAD с параметром filetype = 'BIN'. Ф.м. возвращает таблицу строк. Как мне конвертировать в string результат?

_________________
My solution is difficult


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Пн, июл 08 2013, 12:38 
Ассистент
Ассистент

Зарегистрирован:
Ср, май 22 2013, 11:44
Сообщения: 41
FM 'SCMS_BINARY_TO_XSTRING'


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Вт, июл 09 2013, 03:30 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Этим способом вы не получите текстовое содержимое doc-файла. Он имеет сложную структуру и расковырять бинарные данные на уровне абапа будет "сложновато". Действуйте через OLE.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Вт, июл 09 2013, 16:08 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Сб, июл 28 2012, 17:18
Сообщения: 50
AFH написал(а):
Действуйте через OLE.

Если не трудно Вы бы не могли привести пример или ссылку, как обрабатывать загружаемый файл через OLE?

_________________
My solution is difficult


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Вт, июл 09 2013, 21:31 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
в строку можно преобразовать так
Code:
  DATA: converter TYPE REF TO cl_abap_conv_obj.
  DATA: xstr TYPE xstring.

  CALL METHOD cl_umc_ostream=>tab2xstr
    EXPORTING
      it_data  = tab
      i_length = size
    IMPORTING
      e_xstr   = xstr.


но с данными .doc файла тут действительно делать нечего

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Ср, июл 10 2013, 04:16 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Как работать с OLE примеров очень много. Вам нужно примерно следующее:

1. Открыть документ
2. сделать

Code:
    ваш документ.WholeStory
    ваш документ.Copy


3. Импортировать в абапе содержимое буфера обмена:

CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_IMPORT

Таким образом весь текст документа должен оказаться у вас в обычной текстовой табличке без форматирования.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Чт, авг 22 2013, 12:49 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Сб, июл 28 2012, 17:18
Сообщения: 50
Нашел функцию ALSM_EXCEL_TO_INTERNAL_TABLE, есть ли аналог только с Word?

Code:
INCLUDE ole2incl.

DATA: l_word_basic TYPE ole2_object.

TYPES: BEGIN OF ty_tab,
        line TYPE string,
       END OF ty_tab.

DATA: word_tab TYPE STANDARD TABLE OF ty_tab .
CREATE OBJECT l_word_basic 'WORD.BASIC'.
CALL METHOD OF l_word_basic 'FILEOPEN'
  EXPORTING
  #1 = 'C:\temp\123.DOC'.
*Select All
CALL METHOD OF l_word_basic 'WholeStory'.
*Copy
CALL METHOD OF l_word_basic 'Copy'.

* read clipboard into ABAP
CALL METHOD cl_gui_frontend_services=>clipboard_import
  IMPORTING
    data                 = word_tab
  EXCEPTIONS
    cntl_error           = 1
*      ERROR_NO_GUI         = 2
*      NOT_SUPPORTED_BY_GUI = 3
    OTHERS               = 4
        .
**  Close WORD
CALL METHOD OF l_word_basic 'APPCLOSE'.
* Free Object
FREE OBJECT l_word_basic.


Метод clipboard_import - вернул пустую таблицу. :cry:

_________________
My solution is difficult


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Чт, авг 22 2013, 16:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
через iXML грузим, парсим, находим таблицу и читаем содержимое.
мне кажется код не очень большой будет но работать будет только для docx.

_________________
Новый этап на проекте - устранение доработок :).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Чт, авг 22 2013, 20:12 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Сб, июл 28 2012, 17:18
Сообщения: 50
Брат Мигель написал:
через iXML грузим, парсим, находим таблицу и читаем содержимое.
мне кажется код не очень большой будет но работать будет только для docx.

Можно немного подробнее куда копать :idea:

_________________
My solution is difficult


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Пт, авг 23 2013, 10:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
считываем docx в xstring

Code:
l_data_xml = cl_openxml_helper=>load_local_file ( l_filename ).


достаем содержимое файла.

Code:
  CREATE OBJECT gr_zipper.
  gr_zipper-> load( string ).
  gr_zipper-> get( EXPORTING name = 'word/document.xml' IMPORTING content = gv_document ).
  gr_ixml = cl_ixml=>create ( ).
  gr_stream_factory = gr_ixml->create_stream_factory ( ).
  gr_istream = gr_stream_factory->create_istream_xstring ( gv_document ).
  gr_document = gr_ixml->create_document ( ).
  gr_parser = gr_ixml->create_parser ( stream_factory = gr_stream_factory
                                        istream        = gr_istream
                                        document       = gr_document ).
    gr_parser-> parse( ).


идем по таблицам

Code:
lr_ffilter = lr_nnode ->create_filter_name( name = 'tbl' namespace = 'w' ).
lr_fiterator = lr_nnode ->create_iterator_filtered( lr_ffilter ).
lr_fnode = lr_fiterator ->get_next( ).


идем строкам таблицы

Code:
lr_ffilter = lr_nnode ->create_filter_name( name = 'tr' namespace = 'w' ).
lr_fiterator = lr_nnode ->create_iterator_filtered( lr_ffilter ).
lr_fnode = lr_fiterator ->get_next( ).


идем по ячейкам

Code:
lr_ffilter = lr_nnode ->create_filter_name( name = 'tc' namespace = 'w' ).
lr_fiterator = lr_nnode ->create_iterator_filtered( lr_ffilter ).
lr_fnode = lr_fiterator ->get_next( ).
lv_value = lr_fnode->get_value().


Конечно копаться в мозгах XML файла дело неблагодарное :), но как вариант.

_________________
Новый этап на проекте - устранение доработок :).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Пт, авг 23 2013, 11:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
Можно еще получить доступ через трансформацию xml файла, но я пока не осилил.
Можно погуглить, достаточно много ссылок.

_________________
Новый этап на проекте - устранение доработок :).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка документа MS Word во внутреннюю таблицу
СообщениеДобавлено: Пт, авг 23 2013, 13:49 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 29 2012, 16:47
Сообщения: 85
Цитата:
Можно еще получить доступ через трансформацию xml файла, но я пока не осилил.
Можно погуглить, достаточно много ссылок.


Трансформация дело хорошее - но не избавленное от глюков.
При переносе на разные версии сапа вылезает косяк - не стоит того .. "мне так кажется".
openxml - просто и надежно и со вкусом.


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

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


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

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


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

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