1.使用docxtemplater实现word文件
https://www.jianshu.com/p/8d4da1bcaa0c
2.使用xlsx实现excel文件
https://www.jianshu.com/p/f01ebe817bd9
3.使用jszip 插件打包为压缩包
import JSZip from 'jszip';
import { saveAs } from 'file-saver';
// 生成Word文档
function generateWordDocument() {
//……
// 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)
const output= doc.getZip().generate({
type: "blob",
mimeType:
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
return output;
}
// 生成Excel文件
function generateExcelFile() {
// 生成Excel文件的代码逻辑
//……
// 生成excel的配置项
const wopts = {
// 要生成的文件类型
bookType: 'xlsx',
// // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
bookSST: false,
type: 'binary'
}
const wbout = XLSX.write(workbook, wopts)
// 将字符串转ArrayBuffer
function s2ab (s) {
const buf = new ArrayBuffer(s.length)
const view = new Uint8Array(buf)
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
return buf
}
const blob = new Blob([s2ab(wbout)], {
type: 'application/octet-stream'
})
return blob
}
// 打包为压缩文件并下载
function downloadReport() {
const zip = new JSZip();
// 生成Word文档并添加到压缩包中
const wordDocument = generateWordDocument();
zip.file('report.docx', wordDocument);
// 生成Excel文件并添加到压缩包中
const excelFile = generateExcelFile();
zip.file('appendix.xlsx', excelFile);
// 生成压缩包并下载
zip.generateAsync({ type: 'blob' })
.then(function(content) {
saveAs(content, 'report.zip');
});
}