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 中使用科学记数法。
不确定是否是最佳解决方案
谢谢
拉杰什
我能够将 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 中使用科学记数法。
不确定是否是最佳解决方案
谢谢 拉杰什