• 将 SAP 表格数据转换为 Excel 文件


    如何在 SAP 屏幕上创建一个按钮,以调用一个包含 ActiveXObject 的函数,该函数用于调用本地文件系统以检索和重命名文件。我们将指导您完成以下步骤。

    1. 删除 SAP 屏幕上不必要的元素
    2. 添加一个输入框,用于输入订单号
    3. 添加一个按钮,点击后将数值导入 excel
    4. 添加一个 Liquid UI 表格
    5. 创建一个函数,将 SAP 表的值分配给 Liquid UI 表
    6. 创建一个函数,将 Liquid UI 表的值提取到 excel 文件中
    7. 展示自定义流程的场景

    用户界面

    //在脚本文件夹中创建此文件,用于自定义 SAP Easy Access 屏幕SAPLSMTR_NAVIGATION.E0100.sjs

    //现在,让我们开始在上述文件中添加 Liquid UI 脚本并保存它

    1.使用 del() 删除屏幕上多余的元素

    1. //删除 SAP Easy Access 屏幕上不必要的屏幕元素.
    2. del('X[IMAGE_CONTAINER]');
    3. del('P[Documentation]');
    4. del('P[Assign Users]');
    5. del('P[Other roles]');

    2.添加一个输入框,输入销售订单的订单号和搜索帮助值,如下所示

    1. // 创建一个输入框,标签为订单,搜索帮助值为 VMVA,搜索帮助参数值为 VBELN
    2. inputfield( [1,2], "Order", [1,22],{"name":"z_message_info","shname":"VBELN",
    3. "size":16, "searchhelp":"VMVA"});

    3.添加一个标签为 "获取数据到 Excel "的按钮,点击后执行名为 z_AssigntoSAPTable 的进程。

    1. // 创建一个标签为 "获取数据到 Excel "的按钮,
    2. // 并在点击或刷新屏幕时使用 z_messae_info 参数执行 z_AssigntoSAPTable 进程
    3. pushbutton([1,45], "Get Data to Excel","?",
    4. {"process":z_AssigntoSAPTable,"size":[1,15],"using":{"z_message_info":z_message_info}});

    4.在 SAP Easy Access 屏幕上添加一个表 "所有项目 "作为标题,并添加名为 "项 目"、"材料 "和 "数量 "的三列,以输入更改销售订单概览的 SAP 表数据。

    1. // 创建一个表格,标题为 "所有项目",3 列 10 行
    2. table([5,5],[15,45],{"name":"va01_AllItems","title":"All items", "rows":10, "rowselection":true,"columnselection":true});
    3. column('Item',{"table":"va01_AllItems","size":4,"name":"z_va01_item","position":1});
    4. column('Material',{"table":"va01_AllItems","size":15,"name":"z_va01_material","position":2});
    5. column('Order Quantity',{"table":"va01_AllItems","size":15,"name":"z_va01_Orderquantity","position":3});

    5.添加一个函数,用于在 Liquid UI 表中检索 SAP 表所需的列值。在下面的函数中,我们创建了一个名为 "fso "的新 ActiveXObject,它允许我们通过 wsoffice.dll 调用文件系统。当使用按钮调用下面的函数时,我们将利用这个新对象的方法来获取文本文件并对其进行重命名。

    1. //创建一个函数,将 SAP 表中所需的列值检索到 Liquid UI 表中
    2. function z_AssigntoSAPTable(param){
    3. println(param.z_message_info);
    4. temp_items=[];
    5. temp_material=[];
    6. temp_quantity=[];
    7. enter('/nva02');
    8. onscreen 'SAPMV45A.0102'
    9. set('F[Order]', "&V[z_message_info]");
    10. enter();
    11. onscreen 'SAPMSDYP.0010'
    12. enter();
    13. onscreen 'SAPMSDYP.0010'
    14. enter();
    15. onscreen 'SAPMV45A.4001'
    16. absrow = 1;
    17. relrow = 1;
    18. gettableattribute("T[All items]", {"firstvisiblerow":"FVisRow", "lastvisiblerow":"LVisRow", "lastrow":"LastRow"});
    19. if(FVisRow==1) {
    20. goto new_row;
    21. }
    22. enter("/ScrollToLine=&V[absrow]", {"table":"T[All items]"});
    23. new_screen:;
    24. onscreen 'SAPMV45A.4001'
    25. gettableattribute("T[All items]", {"firstvisiblerow":"FVisRow", "lastvisiblerow":"LVisRow", "lastrow":"LastRow"}); relrow = 1;
    26. new_row:;
    27. if(absrow>LVisRow){
    28. enter("/ScrollToLine=&V[absrow]", {"table":"T[All items]"});
    29. goto new_screen;
    30. }
    31. if(absrow>LastRow){
    32. goto end_of_table;
    33. }
    34. set("V[z_va01_item]","&cell[All items,Item,&V[relrow]]");
    35. set("V[z_va01_mat]","&cell[All items,Material,&V[relrow]]");
    36. set("V[z_va01_OQ]","&cell[All items,Order Quantity,&V[relrow]]");
    37. println('The item Data is '+z_va01_item+':');
    38. println('The Material Data is '+z_va01_mat+':');
    39. println('The Order Quantity Data is '+z_va01_OQ+':');
    40. temp_items.push(z_va01_item);
    41. temp_material.push(z_va01_mat);
    42. temp_quantity.push(z_va01_OQ);
    43. absrow++;
    44. relrow++;
    45. goto new_row;
    46. end_of_table:;
    47. enter("/ScrollToLine=1", {"table":"T[All items]"});
    48. enter("/n");
    49. onscreen 'SAPLSMTR_NAVIGATION.0100'
    50. gettableattribute("T[va01_AllItems]", {"firstvisiblerow":"FisRow", "lastvisiblerow":"LisRow", "lastrow":"LatRow"});
    51. var z=1;
    52. for(var i=0;i<=temp_items.length;i++)
    53. {
    54. va01_AllItems.z_va01_item[i] = temp_items[i];
    55. va01_AllItems.z_va01_material[i] = temp_material[i];
    56. va01_AllItems.z_va01_Orderquantity[i] = temp_quantity[i];
    57. z=z+1;
    58. }
    59. copy_To_Excel(temp_items,temp_material,temp_quantity)
    60. enter("?");
    61. }

    6.添加一个将 SAP 表格数据复制到 Excel 文件的函数。在下面的函数中,我们创建了名为 "ExcelApp "和 "ExcelSheet "的新 ActiveXObjects,它们允许我们通过 wsoffice.dll 调用文件系统。当使用按钮调用下面的函数时,新对象的一个方法将用于获取 excel 文件并保存其中的表格数据。保存对脚本文件所做的更改。

    1. //创建一个函数,将 SAP 表格数据复制到Excel文件中
    2. function copy_To_Excel(temp_items,temp_material,temp_quantity)
    3. {
    4. var ExcelApp = new ActiveXObject("Excel.Application");
    5. var ExcelSheet = new ActiveXObject("Excel.Sheet");
    6. ExcelSheet.ActiveSheet.Cells(1,1).Value = "Items";
    7. ExcelSheet.ActiveSheet.Cells(1,2).Value = "Materials";
    8. ExcelSheet.ActiveSheet.Cells(1,3).Value = "Quantity";
    9. var k=0;
    10. for(p=2;plength;p++) {
    11. ExcelSheet.ActiveSheet.Cells(p,1).Value = temp_items[k];
    12. ExcelSheet.ActiveSheet.Cells(p,2).Value = temp_material[k];
    13. ExcelSheet.ActiveSheet.Cells(p,3).Value = temp_quantity[k];
    14. k=k+1;
    15. }
    16. var str = "C:\\LiquidUI\\scripts\\SAPAllitems_Info.XLS";
    17. var fso = new ActiveXObject("Scripting.FileSystemObject");
    18. if(fso.FileExists(str)){
    19. // Displays messae in the status bar
    20. message("E:FILE ALREADY EXISTS PLEASE REMOVE OLD FILE");
    21. }
    22. else{
    23. ExcelSheet.SaveAs(str);
    24. //ExcelApp.Workbooks.Open(str);
    25. ExcelSheet.Application.Quit();
    26. }
    27. }

    注意:您需要将 wsoffice.dll 文件放到脚本文件夹中

    SAP 流程

    1.刷新 SAP 屏幕,然后在订单输入框中输入销售订单号。单击 "获取数据到 Excel "按钮启动该功能,然后就会看到销售订单的 SAP 表数据被复制到同一屏幕上的 Liquid UI 表 "所有项目 "中。

    2.现在,请验证脚本文件夹中的 excel 文件,该文件是用脚本文件夹中创建的 SAP 表数据创建的,如下图所示。

  • 相关阅读:
    网络安全大厂面试题汇总
    InnoDB之redo log写入和恢复
    Nodejs+vue高校机房设备管理系统jt07u
    LLM_入门指南(零基础搭建大模型)
    如何养成一个良好的代码习惯!
    Java使用UDP Socket实现回显服务
    如何在windows系统环境下使用tail命令查看日志
    Python 网络爬虫
    leetcode刷题--栈与递归
    JVM中的GC如何判断对象可以被回收
  • 原文地址:https://blog.csdn.net/Kevin_Qinkl/article/details/132902055