Текущее время: Вс, июл 20 2025, 00:54

Часовой пояс: 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 часа


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

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


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

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