word和excel合并为压缩为.zip文件导出

218 阅读1分钟

1.使用docxtemplater实现word文件

juejin.cn/post/729935…

2.使用xlsx实现excel文件

juejin.cn/post/729593…

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');
    });
}