文档:https://github.com/exceljs/exceljs/blob/master/README_zh.md#boolean-value
1. npm install exceljs
npm install file-saver
2.新增downloadExcel.js文件
import saveAs from 'file-saver';
const Excel = require("exceljs");
import {
VFrame
} from "n8-vframe";
const workbook = new Excel.Workbook();
workbook.created = new Date();
workbook.modified = new Date();
var worksheet = workbook.addWorksheet("sheet1");
function downloadExcel(importTemplate, fileName) {
for (var i = 0; i < importTemplate.length; i++) {
if (importTemplate[i].url != "") {
var columnName = importTemplate[i].column;
var url = importTemplate[i].url;
var index = url.lastIndexOf("\/");
var name = url.substring(index + 1, url.length);
if (name == "GetEnumBaseData") {
getEnumByUrl(url, importTemplate[i].enumName).then(res => {
setColumns(columnName, res);
saveExcel(fileName, importTemplate)
})
} else {
getComboxByUrl(url).then(([res, description]) => {
var tips = JSON.stringify(description);
tips = tips.replace(/\"/g, "");
var reg = /[,,]/g;
var text = tips.replace(reg, '\n').replace(/\[|]/g, '').replace(/\{|}/g, '');
setColumns(columnName, res, text);
saveExcel(fileName, importTemplate)
})
}
} else {
var Tips = importTemplate[i].Tips;
var columnName = importTemplate[i].column;
if (Tips != "") {
setColumnsNote(columnName, Tips);
}
}
}
}
function setColumns(columnName, res, tips) {
for (var i = 2; i < 1000; i++) {
worksheet.getCell(columnName + i).dataValidation = {
type: 'list',
allowBlank: true,
formulae: res
};
worksheet.getCell(columnName + i).note = tips;
}
}
function setColumnsNote(columnName, Tips) {
for (var i = 2; i < 1000; i++) {
worksheet.getCell(columnName + i).note = Tips;
}
}
function saveExcel(fileName, importTemplate) {
worksheet.columns = importTemplate;
workbook.xlsx.writeBuffer().then(function (buffer) {
saveAs(new Blob([buffer], {
type: 'application/octet-stream'
}), fileName + '.' + 'xlsx');
});
}
function getComboxByUrl(url) {
return new Promise((resolve, reject) => {
var data = [];
var description = [];
var curData = [];
VFrame.http.request(url, {}).then(res => {
res.items.forEach(item => {
description.push({
value: item.value,
description: item.displayText
})
data.push(item.value);
var newData = '"' + data.join(',') + '"'
curData[0] = newData;
})
resolve([curData, description])
})
})
}
function getEnumByUrl(url, parameter) {
return new Promise((resolve, reject) => {
var data = [];
var curData = [];
VFrame.http.request(url, {
enumName: parameter
}).then(res => {
res.items.forEach(item => {
data.push(item.key);
var newData = '"' + data.join(',') + '"'
curData[0] = newData;
})
resolve(curData)
})
})
}
export default downloadExcel;
3.使用 import downloadExcel from "@/config/downloadExcel";
importTemplatejson --数据 fileName --文件的名字
downloadExcel(this.importTemplate,this.fileName)