由于工作中需要使用到,因此做记录。
- 创建工作簿
var wb = new ExcelJS.Workbook();
- 添加工作表
var ws = workbook.addWorksheet('sheet1');
- 构建表头
根据中文文档的参考结构,表头数据为Json数组,如下
[
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 }
]
因此再为sheet添加表头之前,要先构造好表头数据。我的做法是循环创建一个Json对象并塞进Array数组之中。
var columns = new Array()
/**
*这里expParameters为表头数据
*/
for(i=0;i<expParameters.length;i++){
if(expParameters[i].value){
var jsonObj={
'header':expParameters[i].value,
'key' :expParameters[i].key,
'width':10
}
columns[i]=jsonObj
}
}
ws.columns = columns
- 构建行数据
这里我使用到的方法是addRow方法,这个方法要求我每一行都要根据列名构建好我的数据。
/**
*这里expDatas为行数据,其key值与expParameters的property值相对应
*/
for(var i = 0;i<expDatas.length;i++){
var jsonObj={}
jsonObj[expDatas[i].key]=expDatas[i].value
ws.addRow(jsonObj)
}
- 保存工作簿并导出
这里我实现了一个通用的导出函数,在上面的工作簿创建好后调用即可
/**
* 保存工作簿
* @param {ExcelJS.Workbook} wb
* @param {string} fn
*/
function saveFile(wb, fn) {
if (!wb || typeof (wb.xlsx && wb.xlsx.writeBuffer) != 'function') {
return
}
fn = fn || '导出文件'
if (!/\.xlsx$/.test(fn)) {
fn += '.xlsx'
}
wb.xlsx.writeBuffer().then(function(data) {
var blob = new Blob([data], { type: EXCEL_MIME_TYPE })
window.saveAs(blob, fn)
})
}
- 总结
非常简单,实现了我想要的效果。