SAPUI5/Fiori 导出到 excel -ExportTypeCSV ,数据格式在单引号前

SAPUI5/Fiori Export to excel -ExportTypeCSV , data formatted prepending a single quote

我能够将 table 数据动态地导出到 excel,但是某些数据(例如长数字和负值)是格式化的

下面是UITable数据 [在此处输入图片描述][1]

已将数据导出到 CSV [在此处输入图片描述][2]

当我 select 长值时,它在 excel 之上显示正确的值,并且 -ve 值附加了 '......

代码:

jQuery.sap.require("sap.ui.core.util.Export");
jQuery.sap.require("sap.ui.core.util.ExportTypeCSV");
sap.ui.define([
'jquery.sap.global',
'sap/ui/core/mvc/Controller',
'sap/ui/model/json/JSONModel'
], function(jQuery, Controller, JSONModel) {
"use strict";
var vSrcMATNR;
var oEvtBus = sap.ui.getCore().getEventBus();
var TableController = Controller.extend("UtilLoad.Util", {
exportToExcel: function(oTable) {
var that = this;
var aColumns = oTable.getColumns();
var aItems = oTable.getItems();
var aTemplate = [];
for (var i = 0; i < aColumns.length; i++) {
var oColumn = {
name: aColumns[i].getHeader().getText(),
template: {
content: {
path: null
}
}
};
if (aItems.length > 0) {
oColumn.template.content.path = aItems[0].getCells()[i].getBinding("text").getPath();
}
aTemplate.push(oColumn);
}
var oExport = new sap.ui.core.util.Export({
// Type that will be used to generate the content. Own ExportType’s can be created to support other formats
exportType: new sap.ui.core.util.ExportTypeCSV({
separatorChar : ",",
                charset : "utf-8"
}),
// Pass in the model created above
models: oTable.getModel(),
// binding information for the rows aggregation
rows: {
path: "/"
},
// column definitions with column name and binding info for the content
columns: aTemplate
});
oExport.saveFile().always(function() {
this.destroy();
});
},
fnDate: function(sDate) {
if (sDate) {
var oDateFormat = sap.ui.core.format.DateFormat.getDateTimeInstance({
pattern: "dd-MM-yyyy"
});
return oDateFormat.format(new Date(sDate));
} else {
return sDate;
}
}
});
return TableController;
});

来自建议使用数据导出功能的 SAP 文档,请问它是什么以及如何使用

https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.core.util.ExportTypeCSV.html

谢谢 拉杰什

请在下面找到屏幕截图 exported excel data

请在 return 语句中用双引号括起 Tab Space 将数字转换成字符串。

            {
                name: "Stock",
                template: {
                    content: {
                        parts: ["StockPosition"],
                        formatter: function(value) {

                            return "    " + value;
                        }
                    }
                }
            }

关于以科学记数法(如 2.85E+12)格式化值的问题:

在 JavaScript 中处理 精确 大数通常不是一个好主意,因为 JavaScript 使用中定义的双精度浮点数IEEE 754 标准。他们很快就会失去精度!

试试

console.log(9999999999999999);

结果会是

10000000000000000

如果你想避免在 JavaScript 中使用科学记数法,你必须通过连接每个数字来编写自己的 toString 函数

function convertToString(fNumber){
 var sResult='';
 do{
   var iDigit = fNumber%10;
   fNumber=Math.trunc(fNumber/10);
   sResult = iDigit+sResult;
 }while(fNumber>0)   
 return sResult;
}

但是你的主要问题是Excel!

如果您的 csv 文件如下所示

Customer;Product;EAN;Price
SAP;Hana;1234567890123;1000
SAP;R/3;1234567890124;-1000
SAP;OpenUI5;1234567890126;9999999999999999

Excel 将再次显示包含科学记数法的 table!

Customer   Product   EAN       Price
SAP        Hana     1,23E+12     1000
SAP        R/3      1,23E+12    -1000
SAP        OpenUI5  1,23E+12   1E+16

vH,

是的,主要问题是在将数据转换为 excel.By 时附加制表符 (\x09) 我可以避免在 excel 中使用科学记数法。

不确定是否是最佳解决方案

谢谢 拉杰什