在 JavaScript/SAPUI5 中读取 Excel (xlsx) 文件数据时出现问题

Posted

技术标签:

【中文标题】在 JavaScript/SAPUI5 中读取 Excel (xlsx) 文件数据时出现问题【英文标题】:Issue in Reading Excel (xlsx) File Data in JavaScript/SAPUI5 【发布时间】:2020-04-06 21:24:41 【问题描述】:

我正在尝试使用FileReader api 在我的 SAPUI5 应用程序中读取 .xlsx 文件。我用来上传文件的 UI5 控件是sap.ui.unified.FileUploader 我的要求是读取 Excel 工作表的内容并将其数据显示在我的 UI5 应用程序的表格中。

为此,我创建了一个FileReader 实例并调用它的.readAsBinaryString.readAsText 方法并将我的文件传递给它。 读取内容时,在 onload 事件中,文件的内容以不可读的格式显示(请参阅下文)

我错过了什么吗?还是有其他读取 Excel 数据的方法?

【问题讨论】:

看看这个,你可能会有一些想法youtube reference link 【参考方案1】:

感谢mkysoft 和this 的回答。我能够读取 .xlsx 文件内容。

为此,我必须在我的项目中创建两个文件 jszip.jsxlsx.js。我为它们创建了一个单独的文件夹,并在我的控制器的sap.ui.define 部分中提到了这两个文件的位置。

这两个库可在 CDNJS - JSZip3 和 CDNJS - XLSX4 位置。

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    .... //other libraries
    "projectnamespace/foldername/jszip",
    "projectnamespace/foldername/xlsx"
], function (Controller,...., jszip, xlsx)

然后,为了读取.xlsx 文件,我添加了以下代码:

    var oFileUploader = sap.ui.getCore().byId("fileUploader"); // get the sap.ui.unified.FileUploader
    var file = oFileUploader.getFocusDomRef().files[0]; // get the file from the FileUploader control
    if (file && window.FileReader) 
        var reader = new FileReader();
        reader.onload = function (e) 
            var data = e.target.result;
            var excelsheet = XLSX.read(data, 
                type: "binary"
            );
            excelsheet.SheetNames.forEach(function (sheetName) 
                var oExcelRow = XLSX.utils.sheet_to_row_object_array(excelsheet.Sheets[sheetName]); // this is the required data in Object format
                var sJSONData = JSON.stringify(oExcelRow); // this is the required data in String format
            );
        ;
        reader.readAsBinaryString(file);
    

【讨论】:

【参考方案2】:

您需要在客户端或服务器端解析 Excel 文件。 Excel 文件不是纯文本。旧的 excel 文件 (xls) 不能在没有 Excel 的情况下解析,它有自己的二进制格式。但是你可以解析 xlsx 文件,这些是压缩的多个文件,其中包含原始数据、图像和样式文件。

您可以使用现有的 js 库进行客户端解析,例如帖子How to parse Excel file in javascript/html5。 您可以将 abap2xlsx 库用于 ABAP 后端。

【讨论】:

以上是关于在 JavaScript/SAPUI5 中读取 Excel (xlsx) 文件数据时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

从非二次表中读取数组

在 Adob​​e AIR 中读取未知编码的文本文件

java中如何读取json文件,在本地有E:/a.json文件,想读取这个json文件里面的内容,怎样实现

C++ 从文件中读取字符串给出“-9.25596e+61”

如何读取坐标 csv 文件并分解为 E、N、Z 和 Station?

以编程方式读取 Adob​​e 游戏变量/与游戏/游戏机器人交互