Выгрузка в excel sapui5
Часовой пояс: UTC + 3 часа
Правила форума
Вопросы по SAP Query и Quick View - сюда
Выгрузка данных в EXCEL на нескольких листах
Необходимо выгрузить данные сгруппированные по области планирования в Эксель через OLE обекты
на отдельный лист по каждой выбранной области планирования. Необходим пример.
Необходимо выгрузить данные сгруппированные по области планирования в Эксель через OLE обекты
на отдельный лист по каждой выбранной области планирования. Необходим пример.
посмотрите тут Ole2, Excel, WinWord
там были несколько примеров
_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)
Спасиба посмотрел.
А как записать в ABAP'e следующее выражение экселя.
Написал:
.
CALL METHOD OF application 'WORKSHEETS' = sheet.
call method of sheet 'COPY'.
Создает копию новой книги. А надо создать копию выбранного листа и вставить рядом. Не понятно как записать параметры. Какие тут правила интерпретации?
Необходимо выгрузить данные сгруппированные по области планирования в Эксель через OLE обекты
на отдельный лист по каждой выбранной области планирования. Необходим пример.
Весьма простая задача при использовании моего модуля выгрузки в MS Office. Пример вывода на разные листы ZWWW_MANY_SHEETS.
_________________
"For all entries" не в SAP-ах, "for all entries" в головах!
Два варианта действий:
1. Вызвать макрос копирования, написанный в VBA.
2. Сделать так
Весьма простая задача при использовании моего модуля выгрузки в MS Office. Пример вывода на разные листы ZWWW_MANY_SHEETS.
Я решил не создавать отдельную тему, а спросить здесь же. Вопрос тот же, как выгрузить данные в шаблон, при этом копируя листы. Сделал все как описано в примере ZWWW_MANY_SHEETS, но всё равно не выходит.
Мне не совсем понятно зачем нужна область A_CopyList и Z_Protect? (создать, создал по аналогии, но назначения их еще не ясна.) И еще, на что еще можно обрать внимание? Может мелочь какую упустил.
З.Ы. Сразу оговорюсь, просто вывод данных в Excel работает, не удается только размножать листы.
_________________
"For all entries" не в SAP-ах, "for all entries" в головах!
Весьма простая задача при использовании моего модуля выгрузки в MS Office. Пример вывода на разные листы ZWWW_MANY_SHEETS.
Для области A_CopyList применяется макрос копирования листов CopySheets. Т.к. области обрабатываются моим ФМ в алфавитном порядке, то приставка A_ гарантирует, что копирование листов выполняется до их заполнения.
Для области Z_Protect применяется макрос ProtectSheet для защиты листов от изменения. Он соотвественно вызывается после заполнения данных, ибо Z_. Сделал его специально, чтобы защитить от измененй только ячейки, а разворачивание уровней разрешить.
_________________
"For all entries" не в SAP-ах, "for all entries" в головах!
[quote="Parazit
Для области A_CopyList применяется макрос копирования листов CopySheets. Т.к. области обрабатываются моим ФМ в алфавитном порядке, то приставка A_ гарантирует, что копирование листов выполняется до их заполнения.
Для области Z_Protect применяется макрос ProtectSheet для защиты листов от изменения. Он соотвественно вызывается после заполнения данных, ибо Z_. Сделал его специально, чтобы защитить от измененй только ячейки, а разворачивание уровней разрешить.[/quote]
Не, это всё понятно. Я сейчас бьюсь над тем как имя листам подставлять динамически. Напомню, сейчас там стоит 'List_' & I. И в зависимости от счетчика столько листов он и создаст.
А кто нибудь знает VBA? Пытаю переименновать листы, написал макрос. Идея такая:
цикл от 1 до N " где N число листов
поочередно определяю номер активного листа
обращаюсь к ячейке на этом листе (в ячейке бедет лежать "Имя")
присваиваю это "Имя" для активного листа
и делаю активным
конецЦикла.
For I = 1 To N
Set sours = ThisWorkbook.Worksheets("List_" & I)
ActiveSheet.Name = sours.Cells(1, 3).Value
Worksheets("List_" & I).Activate
Next I
А кто нибудь знает VBA? Пытаю переименновать листы, написал макрос. Идея такая:
цикл от 1 до N " где N число листов
поочередно определяю номер активного листа
обращаюсь к ячейке на этом листе (в ячейке бедет лежать "Имя")
присваиваю это "Имя" для активного листа
и делаю активным
конецЦикла.
For I = 1 To N
Set sours = ThisWorkbook.Worksheets("List_" & I)
ActiveSheet.Name = sours.Cells(1, 3).Value
Worksheets("List_" & I).Activate
Next I
Sub CopySheets(R As Range)
Dim N As Long, I As Long
N = R.Value
R.Value = ""
For I = 2 To N
Worksheets("Лист_1").Copy after:=ActiveSheet
ActiveSheet.Name = "Лист_" & I
Next I
End Sub
Below is the approach that I tried and successfully able to upload File to back-end ECC server and upload data to database.
Frontend (UI part)
In XML view
useMultipart = “false” sendXHR = “true” />
In Controller.js
var file = jQuery.sap.domById( “__xmlview2–fileupload-fu” ).files[0];
try
if (file)
this ._bUploading = true ;
var that = this ;
var a = “/Yourservice URL or Metadata URL “ ;
var f =
var oHeaders;
var sUrl= oDataModel .sServiceUrl+ “/Your Entity Set “ ;
var oModel = new sap.ui.model.odata.ODataModel(sUrl, true );
OData.request(f, function (data, oSuccess)
oToken = oSuccess.headers[ ‘x-csrf-token’ ];
var oURL = oDataModel .sServiceUrl+ “/Entity Set” ;
cache: false ,
processData: false ,
success: function (data)
sap.m.MessageToast.show( “File Uploaded Successfully” +rec);
error: function (data)
sap.m.MessageToast.show( “File Uploaded Successfully” );
> catch (oException)
jQuery.sap.log.error( “File upload failed:\n” + oException.message);
Note
For this blog the uploaded file excel file should be saved as .csv comma delimited format. If you upload (.XLSX, .XLS) format this code will not work for you.
In Backend ABAP System
Entity
Your entity should have this fields as mentioned above.
Implement Create_Stream Method
You need to implement /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_STREAM method of DPC_EXT class
DATA : lv_output TYPE string ,
lv_out_tab TYPE TABLE OF string ,
ls_output TYPE string .
DATA : gv_spl TYPE c VALUE cl_abap_char_utilities => cr_lf .
DATA : lv_converter TYPE REF TO cl_abap_conv_in_ce ,
lv_xstring TYPE xstring .
CASE iv_entity_name .
WHEN ‘YourEntity’ .
lv_xstring = is_media_resource – value .
lv_converter = cl_abap_conv_in_ce => create ( input = lv_xstring
encoding = ‘UTF-8’
replacement = ‘?’
ignore_cerr = abap_true ).
TRY .
CALL METHOD lv_converter -> read ( IMPORTING data = lv_output ).
CATCH cx_sy_conversion_codepage .
*– Should ignore errors in code conversions
CATCH cx_sy_codepage_converter_init .
*– Should ignore errors in code conversions
CATCH cx_parameter_invalid_type .
CATCH cx_parameter_invalid_range .
ENDTRY .
REPLACE gv_spl IN lv_output WITH ” .
SPLIT lv_output AT gv_spl INTO TABLE lv_out_tab .
LOOP AT lv_out_tab INTO ls_output .
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities => cr_lf ( 1 ) IN ls_output WITH ” .
SPLIT ls_output AT ‘,’ INTO lv_mar – matnr ls_char lv_mar – ernam ls_char1 lv_mar – aenam lv_mar – vpsta lv_mar – pstat lv_mar – mtart lv_mar – matkl lv_mar – meins .
lv_mar – matnr ( 1 ) = ” .
CONDENSE lv_mar – matnr .
IF ls_char IS NOT INITIAL .
CALL FUNCTION ‘CONVERT_DATE_TO_INTERNAL’
EXPORTING
date_external = ls_char
* ACCEPT_INITIAL_DATE =
IMPORTING
date_internal = lv_mar – ersda
* EXCEPTIONS
* DATE_EXTERNAL_IS_INVALID = 1
* OTHERS = 2
.
IF sy – subrc <> 0 .
* Implement suitable error handling here
ENDIF .
ENDIF .
IF ls_char1 IS NOT INITIAL .
CALL FUNCTION ‘CONVERT_DATE_TO_INTERNAL’
EXPORTING
date_external = ls_char1
* ACCEPT_INITIAL_DATE =
IMPORTING
date_internal = lv_mar – laeda
* EXCEPTIONS
* DATE_EXTERNAL_IS_INVALID = 1
* OTHERS = 2
.
IF sy – subrc <> 0 .
* Implement suitable error handling here
ENDIF .
ENDIF .
IF lv_mar – matnr IS NOT INITIAL .
APPEND lv_mar TO it_mara .
ENDIF .
CLEAR lv_mar .
Hello everyone, in this tutorial we will show you how to download data in excel in SAPUI5 application.
Prerequisites
- You should have SAP Netweaver Gateway Server on Netweaver 7.40 release.
- You should have a SAP Netweaver Gateway service ready with you. Click here.
- You should have a basic understanding of SAPUI5 Application and Netweaver Gateway OData Service.
Step-by-Step Procedure
Export data into excel in SAPUI5 application.
1. Open Eclipse IDE and create a SAPUI5 Application project by clicking on File → New → Project. Choose Application Project under SAPUI5 Application Development.
2. Click on Next and provide the Project Name, choose sap.m library and hit Next to create a initial view.
3. Provide the view name and choose type of the view as Java Script.Here you can choose any of the option as per your preference and hit Next to create project.
4. A new SAPUI5 project is created in Project Explorer.
5. Select index.html file in the project and double click to appear in the workbench window.Copy and paste the below code in the index.html file (or) adjust the code as per the below code.
Index.html
6. Now double click on the demoTable.view.js to create and add Table inside the View. All the UI element controls should be placed in the CreateContent( ) method of the view. Add the below code to create a Table and columns of the table in the view.
demoTable.view.js
7. Now double click on demoTable.controller.js to call the OData service url to get the data from the backed and also the code to download the table data in excel.
demoTable.controller.js
8. We are ready with application. Save the application and deploy it in SAPUI5 ABAP Repository.To know the steps on how to deploy SAPUI5 application to ABAP Repository click here.
9. After deployment of the application its time to test the URL.The URL of the SAPUI5 application will look like below.
10. If every thing is working fine, you should see the below output.
11. Now click on the Download button to download the table data into excel.
12. Open the excel file downloaded.
You have successfully created a SAPUI5 Application to download data in excel.
Please stay tuned to us for more SAPUI5 Tutorials. Please feel free to comment and let us know your feedback. Subscribe for more updates
Это было одно требование, чтобы данные одной из моих таблиц приложения SAPUI5 могли быть экспортированы в Excel / электронную таблицу. sap.ui.core.util.Export не соответствует стандарту экспорта данных, особенно он записывает данные только в 1 столбец.
Пример экспортированных данных:
Затем мне было предложено использовать стороннюю библиотеку JS, которая может экспортировать данные в электронную таблицу, и после исследования я столкнулся с SheetJS. Я нашел эту статью о том, как реализовать и использовать код библиотеки SheetJS в SAPUI5: Экспорт файла Excel (с расширением .xlsx) с включением данных адаптивной таблицы в SAPUI5.
Мой вопрос: как добавить внешние JS-библиотеки в проект SAPUI5 на Eclipse? Обратите внимание, что мы запускаем наши приложения SAPUI5 на сервере NetWeaver. Мне нужно понять, где разместить эти JS в зависимости от среды, которая у меня есть (можно ли поместить их / их в webContent / path?) И как получить к ним доступ, если когда-либо.
2 ответа
Я уже получил ответ, объединив все полученные мной исследования.
Я нашел множество комбинаций внешних библиотек, которые можно использовать для работы Sheetjs, например xlsx.js - jszip.js или xlsx.full.min.js только или есть также комбинация xlsx.full.min.js - FileSaver.js .
Сначала я попробовал использовать комбинацию xlsx.full.min.js и FileSaver , и это сработало! Сначала я загрузил обе библиотеки и скопировал их в свой путь /webContent/controller (да, тот же уровень пути, что и у моих контроллеров).
Следующее, что нужно сделать, это определить их в вашем контроллере с помощью sap.ui.define Определение сторонних библиотек в SAPUI5 Вы также заметите, что я добавил 2 строки кода выше:
С этими двумя строками кода при вызове библиотек будет ошибка. Это глобальные имена JS, если он будет вызываться вне класса js.
Ниже приведен тестовый код, который я использовал для доступа к двум упомянутым выше JS:
Не стесняйтесь оставлять отзывы об этом. Для достижения этой цели может быть другой лучший подход.
Некоторое время назад я создал программу для загрузки данных шаблона EXCEL в SAP и загрузки данных внутренней таблицы в EXCEL. Из-за сетевых причин, когда объем данных относительно велик, при использовании OLE для записи данных одна за другой скорость будет ниже, поэтому сначала скопируйте данные внутренней таблицы в буфер обмена, а затем вставьте их непосредственно в EXCEL, скорость будет выше. , Позвольте мне рассказать о методе ниже:
1. Сначала создайте шаблон данных EXCEL и загрузите его на сервер с SMW0.
Стиль шаблона EXCEL выглядит следующим образом:
2. Определение данных:
DATA : BEGIN OF header,
doc_date LIKE bapi_incinv_create_header - doc_date , «Ваучер Дата
pstng_date LIKE bapi_incinv_create_header - pstng_date , "Дата публикации
gross_amount LIKE invfo - wrbtr , «bapi_incinv_create_header-gross_amount», общая сумма счета в валюте ваучера
item_amount LIKE invfo - wmwst , «bapi_incinv_create_gl_account-item_amount», сумма налога
gl_account LIKE bapi_incinv_create_gl_account - gl_account , «Налоговый учет
payee_payer LIKE bapi_incinv_create_header - payee_payer , "Счет-вечеринка
item_text LIKE bapi_incinv_create_header - item_text , "Текст позиции
header_txt LIKE bapi_incinv_create_header - header_txt , «Текст заголовка
ref_doc_no LIKE bapi_incinv_create_header - ref_doc_no , "номер квитанции
pmnttrms LIKE bapi_incinv_create_header - pmnttrms , "условия оплаты
currency LIKE bapi_incinv_create_header - currency , "Код валюты
del_costs_taxc LIKE bapi_incinv_create_header - del_costs_taxc , "Налоговый кодекс
db_cr_ind LIKE bapi_incinv_create_gl_account - db_cr_ind , "Налоговый кредит логотип
blance TYPE rm08m - differenz , "Баланс
name12 TYPE zname12 , Описание поставщика
END OF header.
DATA : BEGIN OF item OCCURS 0 ,
ebeln LIKE ekpo - ebeln ,
ebelp LIKE ekpo - ebelp ,
matnr LIKE ekpo - matnr ,
maktx LIKE makt - maktx ,
meins LIKE ekpo - meins ,
menge LIKE ekbe - menge ,
wrbtr LIKE ekbe - wrbtr , "Количество
mwskz LIKE ekpo - mwskz , "Налоговый кодекс
selct ( 1 ) TYPE c ,
END OF item .
TYPE-POOLS : ole2 .
DATA : gv_excel_obj TYPE ole2_object ,
gv_workbook_obj TYPE ole2_object ,
gv_sheet_obj TYPE ole2_object .
DATA : gv_fname LIKE rlgrap - filename ,
gv_filename TYPE string ,
gv_icount TYPE i ,
gv_irow TYPE i .
DATA : gv_separator TYPE c .
FIELD-SYMBOLS : LIKE LINE OF item ,
TYPE ANY .
DATA : gt_excel ( 4096 ) OCCURS 0 WITH HEADER LINE .
TYPE-POOLS truxs .
DATA xltab TYPE truxs_t_text_data .
DATA : BEGIN OF gt_upload OCCURS 0 ,
cola ( 20 ) ,
colb ( 40 ) ,
colc ( 20 ) ,
cold ( 40 ) ,
cole ( 20 ) ,
colf ( 20 ) ,
colg ( 20 ) ,
colh ( 10 ) .
DATA : END OF gt_upload .
DATA : gv_file LIKE rlgrap - filename .
3. Подпрограмма DOWNLOAD_EXCEL
**** Получить файл шаблона и путь
PERFORM temp_excel_get CHANGING gv_fname .
**** Генерация файлов с шаблонами
PERFORM open_excel_file USING gv_excel_obj
gv_workbook_obj
gv_sheet_obj
gv_fname
'0' .
**** Заполнить шаблон
PERFORM write_header .
PERFORM write_item USING gv_excel_obj
gv_sheet_obj .
PERFORM save_close_excel USING gv_excel_obj
gv_workbook_obj
gv_sheet_obj .
MESSAGE ‘ Сохранено! TYPE 'I' .
DATA : l_objdata LIKE wwwdatatab ,
l_destination LIKE rlgrap - filename ,
l_rc LIKE sy - subrc ,
l_errtxt TYPE string .
* Если он существует, вызовите функцию DOWNLOAD_WEB_OBJECT, чтобы загрузить шаблон в путь
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = l_objdata
destination = l_destination
IMPORTING
rc = l_rc .
IF l_rc NE 0 .
CONCATENATE 'Файл шаблона:' l_destination 'Ошибка загрузки!' INTO l_errtxt .
MESSAGE l_errtxt TYPE 'I' .
EXIT .
ENDIF .
DATA : lv_index TYPE i .
DATA : lv_str ( 512 ) .
gv_separator = cl_abap_char_utilities => horizontal_tab .
CLEAR gt_excel .
REFRESH gt_excel .
LOOP AT item ASSIGNING .
lv_index = 0 .
DO 8 TIMES .
lv_index = lv_index + 1 .
ASSIGN COMPONENT lv_index OF STRUCTURE TO .
IF sy - subrc <> 0 .
EXIT .
ENDIF .
CLEAR lv_str .
WRITE TO lv_str LEFT-JUSTIFIED .
CONDENSE lv_str .
IF lv_index = 1 .
gt_excel = lv_str .
ELSE .
CONCATENATE gt_excel lv_str INTO gt_excel SEPARATED BY gv_separator .
ENDIF .
ENDDO .
APPEND gt_excel .
CLEAR gt_excel .
ENDLOOP .
* Введите данные в буфер обмена одновременно и скопируйте в EXCEL
*export data to clipboard
DATA : lv_ret TYPE i .
CALL METHOD cl_gui_frontend_services => clipboard_export
IMPORTING
data = gt_excel[]
CHANGING
rc = lv_ret .
* Paste data from clipboard
CALL METHOD OF ls_cell 'Select' .
CALL METHOD OF p_sheet 'Paste' .
*&---------------------------------------------------------------------*
*& Form SAVE_CLOSE_EXCEL
*&---------------------------------------------------------------------*
FORM save_close_excel USING p_excel
p_workbook
p_sheet .
SET PROPERTY OF p_excel 'DisplayAlerts' = 0 .
CALL METHOD OF p_excel 'Save' .
CALL METHOD OF p_workbook 'CLOSE' .
CALL METHOD OF p_excel 'QUIT' .
ENDFORM . " SAVE_CLOSE_EXCEL
4. Подпрограмма UPDATE_EXCEL
PERFORM get_pc_fieldname .
PERFORM update_excel .
PERFORM excel_check .
*&---------------------------------------------------------------------*
*& Form GET_PC_FIELDNAME
*&---------------------------------------------------------------------*
FORM get_pc_fieldname .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* mask = ',*.XLS ,*.XLS.'
mode = '0'
title = 'Get the file name'
IMPORTING
filename = gv_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5 .
ENDFORM . " GET_PC_FIELDNAME
*&---------------------------------------------------------------------*
*& Form UPDATE_EXCEL
*&---------------------------------------------------------------------*
FORM update_excel .
REFRESH gt_upload .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* i_line_header = 'X'
i_tab_raw_data = xltab
i_filename = gv_file
TABLES
i_tab_converted_data = gt_upload
EXCEPTIONS
conversion_failed = 1
OTHERS = 2 .
IF gt_upload[] IS INITIAL .
MESSAGE «Нет данных, загруженных в таблицу EXCEL» TYPE 'I' .
EXIT .
ENDIF .
ENDFORM . " UPDATE_EXCEL
Читайте также: