【问题标题】:Sheetjs for SAPUI5; exporting of table data to spreadsheetSAPUI5 的 Sheetjs;将表格数据导出到电子表格
【发布时间】:2018-10-26 05:29:48
【问题描述】:

我的 SAPUI5 应用表数据之一需要能够导出到 Excel/电子表格。 sap.ui.core.util.Export不符合导出数据的标准,尤其是只写1列数据。

导出数据示例:

从 SAPUI5 1.50 开始,SAP 制作了 sap.ui.export.Spreadsheet,但根据他们的一位专家的说法,该库不适用于 Eclipse 开发工具 (https://answers.sap.com/questions/474315/sapuiexport-missing-in-sap-ui5-version-152.html)

然后有人建议我使用可以将数据导出到电子表格的 3rd 方 JS 库,经过研究,我遇到了 SheetJS。我找到了这篇关于如何在 SAPUI5 中实现和使用 SheetJS 库的代码的文章:Export Excel (.xlsx extension) file with includes responsive table data in SAPUI5

我的问题: 如何在 Eclipse 上的 SAPUI5 项目中添加外部 JS 库?请注意,我们正在 NetWeaver 服务器上运行我们的 SAPUI5 应用程序。我需要根据我所拥有的环境了解将这些 JS 放在哪里(可以将它/它们放在 webContent/ 路径中吗?)以及如果有的话如何访问它们。

【问题讨论】:

    标签: excel sapui5 sheetjs


    【解决方案1】:

    通过结合我得到的所有研究已经得到了答案。

    我发现了很多外部库的组合,用于 sheetjs 的工作,例如 xlsx.js - jszip.jsxlsx.full.min.js,或者还有 xlsx.full.min.js - FileSaver.js 组合。

    我第一次尝试使用xlsx.full.min.jsFileSaver 组合,它成功了!我首先下载了两个库并将它们复制到我的/webContent/controller 路径(是的,我的控制器的路径级别相同)。

    接下来是使用sap.ui.define 在控制器中定义它们 Defining 3rd party libraries in SAPUI5 您还会注意到我在上面添加了两行代码:

    /* global XLSX:true */
    /* global saveAs:true */
    

    使用这 2 行代码,调用库时会出错。如果要在 js 类之外调用,这些是 JS 的全局名称。

    下面是我用来访问上面提到的2个JS的测试代码:

    onExportToExcel: function() {
        console.log(XLSX);
        var wb = XLSX.utils.book_new();
        wb.Props = {
            Title: "Sample SheetJS",
            Subject: "Test",
            Author: "HPC",
            CreatedDate: new Date(2018, 5, 19)
        };
        wb.SheetNames.push("Test Sheet");
        var ws_data = [
            ['HPC', 'TEST', 'call']
        ]; //a row with 2 columns       
        var ws = XLSX.utils.aoa_to_sheet(ws_data);
        wb.Sheets["Test Sheet"] = ws;
    
        var wbout = XLSX.write(wb, {
            bookType: 'xlsx',
            type: 'binary'
        });
    
        function s2ab(s) {
            var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
            var view = new Uint8Array(buf); //create uint8array as viewer
            for (var i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
            return buf;
        }
        saveAs(new Blob([s2ab(wbout)], {
            type: "application/octet-stream"
        }), 'test.xlsx');
    }
    

    输出: Output export file

    请随时就此提供反馈。 可能还有其他更好的方法来实现这一目标。

    【讨论】:

      【解决方案2】:

      sap.ui.export.Spreadsheet控件

      我不久前构建了一个示例here

      【讨论】:

      • 我已经尝试过上面提到的电子表格控件。我的第一个难题是,我需要在本地与您所做的相矛盾的库,即 sap-ui-core.js 链接到在线(不建议用于某些应用程序,因为如果您已经下载它,它会呈现更长的时间)。 2、电子表格控件不适用于Elipse IDE的SAPUI5开发工具,我上面也提到过。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多