毕竟几人真得鹿,不知终日梦为鱼
简单的导出excel并不需要额外的库,但是最近在做数据汇总分析的时候,客户想要导出这样的表:
这是一张调查问卷回收以后,做个简单的频率分析,每一道题是一个table;
还有这样的:
这两张属于交叉分析,是指不同的题目之间进行运算,以上是两种模式,在这里就不细说了.
为了实现上面的需求,我先找了比较流行的SheetJS / js-xlsx;官网是sheetjs.com ;但是很快就发现社区版不支持添加样式,虽然有protobi / js-xlsx 和xSirrioNx / js-xlsx 这样的可添加样式增强版,但是组织数据的格式麻烦的让人发指,还好最后找到了适合我的库:xlsx-populate :
Excel XLSX parser/generator written in JavaScript with Node.js and browser support, jQuery/d3-style method chaining, encryption, and a focus on keeping existing workbook features and styles in tact.
翻看它的文档你可以清楚地发现,这个库提供sheet,单元格(cell),范围(range),行和列等对象,可以方便快捷的组织你的excel;使用方法也很简单, sheet.cell("A1").value().style()
链式调用,可以设置值和样式,sheet.range("A1:C3").merged(true)
可以合并单元格,文档上很清楚了我就不再赘述了,你可以在以下关键词中寻找你所需要的:
-
下面是code:
var Promise = XlsxPopulate.Promise;
var name = "问卷分析";
XlsxPopulate.fromBlankAsync()
.then(function (workbook) {
//处理数据和导出样式
var sheet = workbook.sheet(0);
sheet.column("A").width(35).style({
wrapText: true
});
sheet.column("B").width(18).style({
wrapText: true,
numberFormat: "0.00"
});
sheet.cell("A1").value([1,2,3]).style({leftBorder: "thick", rightBorder: "thick" })
//处理完毕
return workbook.outputAsync({
type: ""
});
}).then(function (blob) {
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, name + ".xlsx");
} else {
var url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.href = url;
a.download = name + ".xlsx";
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
}
}).catch (function (err) {
alert(err.message || err);
throw err;
});
Tips:若想实现这种指定位置换行效果,需要先设置单元格自动换行,再在字符串中添加\n即可:
XlsxPopulate.fromBlankAsync()
.then(workbook => {
// Modify the workbook.
workbook.sheet("Sheet1").column("A").width(100)
workbook.sheet("Sheet1").row(1).height(100)
workbook.sheet("Sheet1").cell("A1").value("AAAAAA\nBBBBBB\nCCCCCC\nDDDDDD")
.style("verticalAlignment", "center")//居中
.style("horizontalAlignment", "center")//居中
.style("wrapText", true)//自动换行
// Write to file.
return workbook.toFileAsync("./gn/xlsx.xlsx");
});
网友评论