Текущее время: Вс, авг 03 2025, 07:36

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: загрузка данных из excel
СообщениеДобавлено: Пн, окт 20 2008, 14:38 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
народ столкнулся с необходимостью загрузки данных из файла excel. раньше загружал только из csv. кто-нибудь знает есть ли встроенные средства или надо через ole?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: загрузка данных из excel
СообщениеДобавлено: Пн, окт 20 2008, 14:45 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
damluar написал(а):
народ столкнулся с необходимостью загрузки данных из файла excel. раньше загружал только из csv. кто-нибудь знает есть ли встроенные средства или надо через ole?
ФМ ALSM_EXCEL_TO_INTERNAL_TABLE

_________________
"I have a dream"(c)Martin Luther King, Jr.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 20 2008, 15:30 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
есть одна маленькая проблема: se37 говорит, что такого ФМ нету (((


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 20 2008, 15:42 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
damluar написал(а):
есть одна маленькая проблема: se37 говорит, что такого ФМ нету (((
А ФМ TEXT_CONVERT_XLS_TO_SAP есть?

_________________
"I have a dream"(c)Martin Luther King, Jr.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 20 2008, 16:02 
Ассистент
Ассистент

Зарегистрирован:
Вт, авг 12 2008, 11:26
Сообщения: 39
тоже нету (((


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

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Загрузка из Excel или самому через OLE или пора переходить с SAP R/2 ;-)

_________________
"I have a dream"(c)Martin Luther King, Jr.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 20 2008, 16:57 
Ассистент
Ассистент

Зарегистрирован:
Пн, авг 06 2007, 16:13
Сообщения: 28
Alex80 написал:
Загрузка из Excel или самому через OLE или пора переходить с SAP R/2 ;-)


Могу предложить вариант следующий ( у меня он оформлен ввиде универсального класса по загрузке из екселя).

В ексель помещаем макрос который принимает на вход наименование "именованной области" с которой нужно взять данные и имя файла в который данные нужно выгрузить положить.

Предполагается из екселя нужно выгружать именно табличные данные.
Каждая именованная область начинается с 3х служебных строчек, где 1 строка - техническое имя поля, вторая - имя процедуры преобразования и 3я - флаг выгрузки( выгружать или нет ).
Макрос создает текстовый файл где каждая строка имеет вид: "техническое имя поля" 'Процедура преобразования' 'Значение'.

После вызова макроса класс-загрузчик загружает данные из текстового файла во внутреннюю таблицу, и динамическим ассайном по техническому имени поля переносить значения в целевую внутреннюю таблицу, вызвав перед этим процедуру преобразования.
Code:

class ZCLXLS_LOADER definition
  public
  final
  create public .

*"* public components of class ZCLXLS_LOADER
*"* do not include other source files here!!!

public section.

  methods CONSTRUCTOR
    importing
      !_LOG type ref to ZCL_APPLICATION_LOG . "//Тут отдельное  спасибо  C.Королеву

  methods LOAD
    importing
      !_FN type STRING default 'C:\LOAD_NSI\HSI___.xls '
      !_DATA_RANGE type TEXT128 default 'DATA'
    exporting
      !_TABLE type TABLE
      !_FAILED type CHAR1 .

METHOD load.
  CONSTANTS:
   macro_name TYPE char128 VALUE 'RUN'.

  DATA txt_file TYPE char128.
  DATA str TYPE string.

  CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
    CHANGING
      sapworkdir   = str "m_tmp_dir
    EXCEPTIONS
      cntl_error   = 1
      error_no_gui = 2
      OTHERS       = 3.

  CONCATENATE str  '\~sap_ozm.txt' INTO txt_file.

  export2txt(
    EXPORTING
        _xls_file = _fn
        _macros_name  = macro_name
        _delim  = 9
        _txt_file = txt_file
        _data_range = _data_range ).

  DATA tab TYPE TABLE OF ty_txt_rec.

  str = txt_file.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename            = str
      has_field_separator = 'X'
    TABLES
      data_tab            = tab.

  DATA i_tmp TYPE i.
  cl_gui_frontend_services=>file_delete(
                                   EXPORTING filename = str
                                   CHANGING  rc = i_tmp ).




  DATA prec TYPE REF TO ty_txt_rec.
  DATA pdata TYPE REF TO data.
  DATA row TYPE i.
  row = 9999.

  DATA failed TYPE char1.

  FIELD-SYMBOLS: <field> TYPE ANY.
  LOOP AT tab REFERENCE INTO prec.
    CONDENSE: prec->field,
              prec->conv,
              prec->val.

    TRANSLATE prec->conv TO UPPER CASE.
    TRANSLATE prec->field TO UPPER CASE.

    IF row NE prec->row.
      APPEND INITIAL LINE TO _table REFERENCE INTO pdata.
      row = prec->row.
    ENDIF.

    ASSIGN pdata->(prec->field) TO <field>.
    CHECK sy-subrc EQ 0.
    convert_data(
                  EXPORTING
                   _type = prec->conv
                   _in = prec->val
                  IMPORTING
                  _failed = failed
                  _out = <field> ).
    IF NOT failed IS INITIAL.
      _failed = 'X'.
    ENDIF.

  ENDLOOP.

ENDMETHOD.

method EXPORT2TXT.
  DATA: app TYPE ole2_object,
          wbook_s TYPE ole2_object,
          wb TYPE ole2_object.
  CREATE OBJECT app 'excel.application'.

  SET PROPERTY OF app 'Visible' = 0.
  SET PROPERTY OF app 'ScreenUpdating' = 0.
  SET PROPERTY OF app 'DisplayAlerts' = 0.

  CALL METHOD OF app 'Workbooks' = wbook_s.
  CALL METHOD OF wbook_s 'Open' = wb EXPORTING #1 = _xls_file.
"Sub run(range_name As String, fn As String, delim As Long)
  CALL METHOD OF app 'Run' EXPORTING
        #1 = _macros_name
        #2 = _data_range
        #3 = _txt_file
        #4 = _delim.

CALL METHOD OF app 'Quit'.
  FREE: wbook_s, app, wb.
endmethod.



Собственно сам макрос:

Code:
Sub run(range_name As String, fn As String, delim As Long)
   
Dim Range  As Range

Application.GoTo reference:=range_name
Set Range = Selection

Dim n_rows As Integer
Dim n_coll As Integer

n_rows = Range.Rows.Count
n_coll = Range.Columns.Count

Open fn For Output As #1

For i = 4 To n_rows
For j = 1 To n_coll
    If Range.Cells(3, j) = "X" _
    Or Range.Cells(3, j) = "x" _
    Or Range.Cells(3, j) = "Х" _
    Or Range.Cells(3, j) = "х" _
    Then
     Print #1, i - 3; Chr(delim); _
               Range.Cells(1, j); Chr(delim); _
               Range.Cells(2, j); Chr(delim); _
               Range.Cells(i, j)
    End If
Next
Next

Close #1    ' Close file.













Code:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: загрузка данных из excel
СообщениеДобавлено: Вт, окт 21 2008, 18:23 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, авг 05 2008, 19:46
Сообщения: 96
Откуда: С Урала
damluar написал(а):
народ столкнулся с необходимостью загрузки данных из файла excel. раньше загружал только из csv. кто-нибудь знает есть ли встроенные средства или надо через ole?

Как вариант открыть рабочую книгу через OLE, сохранить как csv методм SaveAs 1# = путь к временному файлу.
2# = 6. это как раз формат csv
Ну а потом SaveChanges = TRUE
Сейчас нет системы под рукой чтобы точный код воспроизвести но точно работало. Потом временный файл конечно удалить. Ну и перед сохранением проверить наличие файла. Я так выгрузку банков пытался загрузить из dbf но ко времени не успел отработать


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: загрузка данных из excel
СообщениеДобавлено: Чт, ноя 20 2008, 11:59 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Alex80 написал:
damluar написал(а):
народ столкнулся с необходимостью загрузки данных из файла excel. раньше загружал только из csv. кто-нибудь знает есть ли встроенные средства или надо через ole?
ФМ ALSM_EXCEL_TO_INTERNAL_TABLE



Тестирую эту функцию. Работает. Но почему Value 50 символов. А если строка больше?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: загрузка данных из excel
СообщениеДобавлено: Чт, ноя 20 2008, 13:13 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
apetrenko написал:
Alex80 написал:
damluar написал(а):
народ столкнулся с необходимостью загрузки данных из файла excel. раньше загружал только из csv. кто-нибудь знает есть ли встроенные средства или надо через ole?
ФМ ALSM_EXCEL_TO_INTERNAL_TABLE



Тестирую эту функцию. Работает. Но почему Value 50 символов. А если строка больше?
Загрузка данных их Excel в Z таблицу

_________________
"I have a dream"(c)Martin Luther King, Jr.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 20 2008, 13:28 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
заюзал такой пример


Code:
TYPES : BEGIN OF type_xldata,
string(800),
END OF type_xldata.

data: type_t_xldata TYPE STANDARD TABLE OF type_xldata.

CALL FUNCTION 'FAA_FILE_UPLOAD_EXCEL'
EXPORTING
i_filename = 'D:\2.xls'
I_DELIMITER = ';'
TABLES
et_filecontent = type_t_xldata
EXCEPTIONS
error_accessing_file = 1
OTHERS = 2.

if sy-subrc <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.


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

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


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

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


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

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