Текущее время: Сб, авг 02 2025, 20:15

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


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

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


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

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