美文网首页
前端生成Excel解决方案

前端生成Excel解决方案

作者: Mr无愧于心 | 来源:发表于2023-06-12 11:10 被阅读0次
    // 代码示例
    const xlsx = require('node-xlsx')
     async createExcel(ctx) {
        const postData = ctx.request.body;
        const { data, fileName, start_day, end_day, screenName } = postData;
        const sheetTitMap = {
          'status_type': ['来源', 15],
          'title': ['帖子标题', 50],
          'text': ['帖子正文', 50],
          'created_at': ['帖子日期', 20],
          'user': ['发帖账号', 20],
          'retweet_count': ['转发', 10],
          'reply_count': ['评论', 10],
          'like_count': ['点赞', 15],
          'fav_count': ['收藏', 10],
        }
        const sheetTit = exportField.map(item => {
          return sheetTitMap[item]
        })
    
        let temp = JSON.parse(JSON.stringify(data));
    
        const worksheets = [
          {
            name: '表格1', //表哥标题
            data: [
              [`${screenName}简报 ${start_day}-${end_day})`],   //第一行数据
              [`报告生成时间 ${moment().format('YYYY年MM月DD日 HH:mm:ss')}`],  //第二行数据
              ['简介'], // //第三行数据
              sheetTit.map(item => item[0]), ...temp],// 以后的数据包括字段标题及真实数据
            options: { // 表格配置项
              "!cols": sheetTit.map(item => ({ wch: item[1] })), // 设置表格宽度
              '!merges': [ // 合并前三行单元格
                { s: { c: 0, r: 0 }, e: { c: temp.length - 1, r: 0 } }, 
                { s: { c: 0, r: 1 }, e: { c: temp.length - 1, r: 1 } }, 
                { s: { c: 0, r: 2 }, e: { c: temp.length - 1, r: 2 } }
              ],
            }
          }
        ];
        const res = xlsx.build(worksheets); // 生成表格数据
    
        const upStream = fs.createWriteStream(fileName + '.xlsx'); // 写入表格数据
        upStream.write(res);
        upStream.end();
        upStream.on('close', () => {
          console.log('写入的文件路径是' + upStream.path)
        })
        ctx.body = { // 返回
          result_code: 0,
          url: upStream.path,
          state: 'success',
        };
      }
    async downloadFild(ctx) { // 下载并删除原文件
        const fileName = ctx.query.path;
        console.log(fileName)
        ctx.attachment(fileName);
        await send(ctx, fileName);
        setTimeout(() => {
          // 删除文件
          fs.unlink(fileName, (err) => {
            console.log('文件已被删除');
          });
        }, 15000);
      }
    

    附上文档: https://www.npmjs.com/package/node-xlsx

    相关文章

      网友评论

          本文标题:前端生成Excel解决方案

          本文链接:https://www.haomeiwen.com/subject/cyobedtx.html