葬空吟 2024-06-17 08:28 采纳率: 61%
浏览 15
已结题

js中使用xlsx包修改excel文件后格式样式都消失

项目中有个需求是使用node.js后端读取数据库数据,经过处理后,将数据生成一个单独的sheet页插入一个excel模板中
我是用的是const XLSX = require('xlsx'); sheet页可以正常插入,但是整个excel文件的所有sheet页的格式样式(字体字号颜色,背景色,行高行宽等)都变成了默认值
这种情况应该如何解决?
具体代码片段如下:

async updata_excel() {
    const { ctx } = this;
    const { checkpoint, dateString, } = ctx.request.body;
    try {
      console.log('in updata_excel_dka');
      const filePath = 'XXX'; // 文件路径设置位置
      const sheetName = XXX'; //sheet页命名

      // 获取数据
      const databaseData =XXX// 数据库获取的数据
      // 将JSON数据转换为二维数组(表头 + 数据行)  
      function convertDataToAoA(data) {
        // 首先,确定表头(即JSON对象的键)  
        const headers = Object.keys(data[0]).map(key => {
          // 可能需要处理某些键名,例如将驼峰命名转换为空格分隔等  
          // 这里简单返回原键名  
          return key;
        });
        // 然后,将数据和表头组合成二维数组  
        const aoa = [headers, ...data.map(item => headers.map(key => item[key] || ''))];
        return aoa;
      }
      // 写入Excel文件  
      function writeToExcel(filePath, sheetName, data) {
        // 转换数据为二维数组  
        const aoa = convertDataToAoA(data);
        // 创建一个新的工作簿或读取现有工作簿(如果需要)  
        let workbook = XLSX.utils.book_new();
        if (fs.existsSync(filePath)) {
          const workbookBuffer = fs.readFileSync(filePath);
          workbook = XLSX.read(workbookBuffer, { type: 'buffer' });
          // 如果sheet已存在,则清空其内容  
          if (workbook.Sheets[sheetName]) {
            XLSX.utils.sheet_add_json(workbook.Sheets[sheetName], [], { header: [], origin: 'A1', skipHeader: true });
          }
        }
        // 将数据写入sheet  
        workbook.Sheets[sheetName] = XLSX.utils.aoa_to_sheet(aoa);
        // 写入文件  
        const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
        fs.writeFileSync(filePath, wbout);
        console.log('Excel file has been updated.');
      }
      // 调用函数以写入数据  
      writeToExcel(filePath, sheetName, databaseData);
    } catch (error) {
      console.log(error)
      ctx.body = {
        errCode: 1,
        errMsg: "发生了错误"
      }
    }
  }

  • 写回答

3条回答 默认 最新

  • 葬空吟 2024-07-03 13:29
    关注

    换了一个包,换成exceljs就好了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月3日
  • 已采纳回答 7月3日
  • 创建了问题 6月17日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表