Текущее время: Вт, июл 01 2025, 11:39

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 10:18 
Специалист
Специалист

Зарегистрирован:
Сб, май 14 2005, 20:46
Сообщения: 108
Откуда: Санкт-Петербург
Добры день!

Задача загрузка данных из XLS. При этом количество символов в одной ячейки может быть большим (более 10000 символов). При выгрузке использовал DOI и метод insert_one_table. Есть ли что то подобное для загрузки? Есть GET_RANGES_DATA, но он не может считать достаточное количество символов.

Хелп плиз!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 10:21 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, апр 05 2008, 22:12
Сообщения: 63
Пол: Мужской
Я в свое время копировал в Z ФМ ALSM_EXCEL_TO_INTERNAL_TABLE и расширял поле структуры, куда грузится эксель - работало, но насчет > 10000 не уверен.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 10:24 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 20 2008, 16:29
Сообщения: 245
Откуда: RU->DE
Пол: Мужской
А я поднимал excel в фоне, сохранял как txt и открывал с помощью GUI_UPLOAD. Работает быстро и длина неограничена практически (что по полям, что по записям). Проблема только в том что Excel кавычки неправильно сохраняет, но и с этим можно бороться.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 10:27 
Специалист
Специалист

Зарегистрирован:
Сб, май 14 2005, 20:46
Сообщения: 108
Откуда: Санкт-Петербург
Есть важное уточнение. В экселе нужно грузить определённые ячейки с поименованными области. В этом особенность. Поэтому я не могу через текст работать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 13:22 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
HF написал(а):
Есть важное уточнение. В экселе нужно грузить определённые ячейки с поименованными области. В этом особенность. Поэтому я не могу через текст работать.

Поименовать можно по разному, хоть "вышивкой крестиком". Наверно все-таки имеется ввиду какое то упорядочивание, именованные строки или столбцы?!

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 13:31 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
HF написал(а):
Есть важное уточнение. В экселе нужно грузить определённые ячейки с поименованными области. В этом особенность. Поэтому я не могу через текст работать.

А что, если в том же файле, но на другом листе в подряд идущих ячейках прописать формулы - ссылки на хаотично расположенные именованные ячейки первого листа. И потом уже со второго листа выгружать как текст.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 14:37 
Специалист
Специалист

Зарегистрирован:
Сб, май 14 2005, 20:46
Сообщения: 108
Откуда: Санкт-Петербург
Parazit написал:
HF написал(а):
Есть важное уточнение. В экселе нужно грузить определённые ячейки с поименованными области. В этом особенность. Поэтому я не могу через текст работать.

Поименовать можно по разному, хоть "вышивкой крестиком". Наверно все-таки имеется ввиду какое то упорядочивание, именованные строки или столбцы?!


Поименованные области Ranges. Смысл прочитать данные из ячейки даже из одной (по Ranges смогу найти ячейку), но объем передаваемых данных большой. Можно делать через clipboard или напрямую через OLE, но это не очень хорошие идеи.

Gustav написал:
HF написал(а):
Есть важное уточнение. В экселе нужно грузить определённые ячейки с поименованными области. В этом особенность. Поэтому я не могу через текст работать.

А что, если в том же файле, но на другом листе в подряд идущих ячейках прописать формулы - ссылки на хаотично расположенные именованные ячейки первого листа. И потом уже со второго листа выгружать как текст.


Очень оригинальная идея! Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 15:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
HF написал(а):
Задача загрузка данных из XLS. При этом количество символов в одной ячейки может быть большим (более 10000 символов).

А изначально какая задача стоит? Войну и Мир в R/3 загрузить?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Вт, дек 06 2011, 18:47 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Цитата:
А изначально какая задача стоит? Войну и Мир в R/3 загрузить?

Что-то вроде того.
Стоит задача загрузить значения примерно с десятка именованных ячеек (у каждой свое имя) в САП.
При этом не должно быть никаких ограничений на длину текста, кроме как каких-то технических, вроде 32К текста в ячейке.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Ср, дек 07 2011, 09:08 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
прочитал тред, так и не понял в чём проблема. Если в эксельном файле данные есть то что мешает их получить?

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Ср, дек 07 2011, 09:25 
Специалист
Специалист

Зарегистрирован:
Сб, май 14 2005, 20:46
Сообщения: 108
Откуда: Санкт-Петербург
chumpa написал:
прочитал тред, так и не понял в чём проблема. Если в эксельном файле данные есть то что мешает их получить?


На входе есть xls файл, ячейки (поименованные области), в которых лежат нужные данные. Задача получить эти данные. Делаю через DOI. Есть в i_oi_spreadsheet есть метод GET_RANGES_DATA, но у этого метода есть ограничение на длину передаваемых данных. Вопрос есть ли какой то другой метод реализовать задачу через DOI?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Ср, дек 07 2011, 09:41 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
8051core написал(а):
Стоит задача загрузить значения примерно с десятка именованных ячеек (у каждой свое имя) в САП.

Тю! С десятка-то можно и через OLE2 и свойство Range.Value. Я могу понять волнения, если б была хотя бы тыща ячеек, а 10-то - "эт-то не-серь-езно!" (с) "Операция Ы".
HF написал(а):
Смысл прочитать данные из ячейки даже из одной (по Ranges смогу найти ячейку)

Надеюсь, я правильно понимаю, что вы не собираетесь на листе сначала искать имя, а потом вычислять адрес ячейки, которой это имя принадлежит. Но на всякий случай напоминаю, что если, например, ячейке D5 присвоено имя "Моя_ячейка", то обратиться к свойству Value этой ячейки можно и через Range("D5").Value, и через Range("Моя_ячейка").Value - т.е. никаких дополнительных поисков имени делать не надо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Ср, дек 07 2011, 10:01 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
А, так задача именно через DOI? тогда мимо тазика, там много ограничений и функционал не полностью реализован.
Если надо загружать через клиента то можно руками закодировать через OLE2.
Если надо загружать через сервер то прога на джаве или меппинг в SAP XI (при наличии).

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Ср, дек 07 2011, 14:30 
Специалист
Специалист

Зарегистрирован:
Вт, ноя 28 2006, 16:02
Сообщения: 114
Сохраните как XML свой файл и загружайте трансформацией.
Можете Войну и мир в ячейку вставить.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка большого объема данных из XLS
СообщениеДобавлено: Ср, дек 07 2011, 14:49 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 16 2010, 09:57
Сообщения: 106
Откуда: СПб
Пол: Мужской
В порядке эксперимента смастерил пример с использованием по OLE2 ActiveX'а MSScriptControl. Значения ячеек читаются прямо с листа Excel, собираются в длинную-предлинную строку с заданным разделителем, строка передается в SAP и при помощи команды SPLIT укладывается во внутреннюю таблицу. Из-за использования string, к сожалению, алгоритм подойдёт только для последних версий SAP.

Перед исполнением report'а нужно сначала при помощи следующего макроса VBA создать тестовый файл Excel, содержащий 10 произвольных именнованных ячеек, заполненных строками максимальной длины - из 32767 символов:
Code:
Sub PrepareData()
    Dim r As Integer, c As Integer, i As Integer
    Dim cell As Range, str As String
    For i = 1 To 10 'создаем 10 именованных ячеек (случайным образом)
        r = Int(20 * Rnd) + 1
        c = Int(10 * Rnd) + 1
        Set cell = Cells(r, c)
        cell.Interior.ColorIndex = 36 'жёлтая заливка ячейки для наглядности
        cell.Name = "Моя_ячейка_" & i 'дадим имя "Моя_ячейка_..."
        cell.Value = String(32767, i + 64) 'заполним латинской буквой (начиная с A - код 65)
    Next i
End Sub

Файл Excel надо сохранить на диске под желаемым именем и прописать полное имя файла в соответствующей переменной в следующем report'е:
Code:
REPORT zzzzzzz.

TYPE-POOLS ole2.

DATA sc     TYPE ole2_object.
DATA vbcode TYPE string.
DATA idx    TYPE string.

DATA excel_filename   TYPE string VALUE 'C:\KKu\Книга2.xlsx'.
DATA name_list        TYPE string.
DATA name_separator   TYPE string VALUE '~'. "здесь не использовать пробел как разделитель
DATA value_separator  TYPE string VALUE '-~|~-'.

DATA long_string_from_excel TYPE string.
DATA itab_values_from_excel TYPE TABLE OF string.

START-OF-SELECTION.

  CONCATENATE
  'Моя_ячейка_1' name_separator
  'Моя_ячейка_2' name_separator
  'Моя_ячейка_3' name_separator
  'Моя_ячейка_4' name_separator
  'Моя_ячейка_5' name_separator
  'Моя_ячейка_6' name_separator
  'Моя_ячейка_7' name_separator
  'Моя_ячейка_8' name_separator
  'Моя_ячейка_9' name_separator
  'Моя_ячейка_10'
  INTO name_list.

  CONCATENATE
  'Function GetExcelData(excelFilename, nameList, nameSeparator, valueSeparator)'
  '    Dim xlApp, wks, nameArray, i, retString'
  '    Set xlApp = CreateObject("Excel.Application")'
  '    Set wks = xlApp.Workbooks.Open(excelFilename).Worksheets(1)'
  '    nameArray = Split(nameList, nameSeparator)'
  '    For i = LBound(nameArray) To UBound(nameArray)'
  '        retString = retString & CStr(wks.Range(CStr(nameArray(i))).Value) & valueSeparator'
  '    Next'
  '    retString = Left(retString, Len(retString) - Len(valueSeparator))'
  '    wks.Parent.Close False'
  '    Set wks = Nothing'
  '    xlApp.Quit'
  '    Set xlApp = Nothing'
  '    GetExcelData = retString'
  'End Function'
  INTO vbcode
  SEPARATED BY cl_abap_char_utilities=>cr_lf.

  CREATE OBJECT sc 'MSScriptControl.ScriptControl' NO FLUSH.
  SET PROPERTY OF sc 'Language' = 'vbscript' no flush.
  CALL METHOD OF sc 'AddCode' NO FLUSH
    EXPORTING #1 = vbcode.
  CALL METHOD cl_gui_cfw=>flush.

  CALL METHOD OF sc 'Run' = long_string_from_excel NO FLUSH
    EXPORTING #0 = 'GetExcelData'
    #1 = excel_filename
    #2 = name_list
    #3 = name_separator
    #4 = value_separator.
  CALL METHOD cl_gui_cfw=>flush.

  FREE OBJECT: sc.

  SPLIT long_string_from_excel AT value_separator
    INTO TABLE itab_values_from_excel.

  WRITE: / name_list.

Подробнее о подходе можно посмотреть в моем сообщении здесь: Поговорим об MS Script Control (правда, в контексте другого продукта).


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.

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


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

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


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

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