|
@@ -1,50 +1,41 @@
|
|
|
import * as XLSX from "xlsx";
|
|
|
|
|
|
-/**
|
|
|
- *
|
|
|
- * @param json 数据源
|
|
|
- * @param name 表名
|
|
|
- * @param titleArr 列名集合
|
|
|
- * @param sheetName 分页名
|
|
|
- */
|
|
|
-export const exportExcel = (json, name, titleArr, sheetName = "") => {
|
|
|
- /* convert state to workbook */
|
|
|
- let data = new Array();
|
|
|
- let keyArray = new Array();
|
|
|
- const getLength = function(obj) {
|
|
|
- let count = 0;
|
|
|
- for (let i in obj) {
|
|
|
- if (obj.hasOwnProperty(i)) {
|
|
|
- count++;
|
|
|
- }
|
|
|
+
|
|
|
+export const exportExcel = (dataSource, columns, fileName = "excel", sheetName = "") => {
|
|
|
+
|
|
|
+ let excelTitle = [];
|
|
|
+ let dataTitle = [];
|
|
|
+ let data = [];
|
|
|
+ if (columns.length == 0) {
|
|
|
+ throw "输出列为空";
|
|
|
+ } else if (dataSource.length == 0) {
|
|
|
+ throw "数据源为空";
|
|
|
+ } else {
|
|
|
+ for (let i in columns) {
|
|
|
+ excelTitle.push(columns[i].label);
|
|
|
+ dataTitle.push(columns[i].name);
|
|
|
}
|
|
|
- return count;
|
|
|
- };
|
|
|
- for (const key1 in json) {
|
|
|
- if (json.hasOwnProperty(key1)) {
|
|
|
- const element = json[key1];
|
|
|
- let rowDataArray = new Array();
|
|
|
- for (const key2 in element) {
|
|
|
- if (element.hasOwnProperty(key2)) {
|
|
|
- const element2 = element[key2];
|
|
|
- rowDataArray.push(element2);
|
|
|
- if (keyArray.length < getLength(element)) {
|
|
|
- keyArray.push(key2);
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ let keys = Object.keys(dataSource[0]);
|
|
|
+ for (let k of dataTitle) {
|
|
|
+ if (keys.indexOf("k") == -1) {
|
|
|
+ throw "数据源中不存在列:" + k;
|
|
|
}
|
|
|
- data.push(rowDataArray);
|
|
|
}
|
|
|
}
|
|
|
- // keyArray为英文字段表头
|
|
|
- data.splice(0, 0, keyArray, titleArr);
|
|
|
+
|
|
|
+ data.push(excelTitle);//第一行为列名
|
|
|
+
|
|
|
+ for (let row of dataSource) {
|
|
|
+ let newRow = [];
|
|
|
+ for (let i in dataTitle) {
|
|
|
+ newRow.push(row[dataTitle[i]] ? row[dataTitle[i]] : "");
|
|
|
+ }
|
|
|
+ data.push(newRow);
|
|
|
+ }
|
|
|
|
|
|
const ws = XLSX.utils.aoa_to_sheet(data);
|
|
|
const wb = XLSX.utils.book_new();
|
|
|
- // 此处隐藏英文字段表头
|
|
|
- let wsrows = [{ hidden: true }];
|
|
|
- ws["!rows"] = wsrows; // ws - worksheet
|
|
|
XLSX.utils.book_append_sheet(wb, ws, sheetName);
|
|
|
- // generate file and send to client
|
|
|
- XLSX.writeFile(wb, name + ".xlsx");
|
|
|
+ XLSX.writeFile(wb, fileName + ".xlsx");
|
|
|
};
|