当前位置: 首页 > 知识库问答 >
问题:

前端 - exceljs库生成的exce文件如何自动显示求和值?

潘弘扬
2024-04-18

背景:

前端vue项目中,基于exceljs进行excel文件的导出,发现生成的excel文件公式求和值不能直接显示,需手动点击之后生成。

代码示例

const exportTemplate = () => {    // 创建工作簿    const workbook = new ExcelJS.Workbook();    const worksheet = workbook.addWorksheet('sheet1');      // 定义列    worksheet.columns = [      { header: 'Id11111111111111111111', key: 'id', width: 20 },      { header: 'Name233', key: 'name', width: 20 },      { header: 'D.O.B999', key: 'dob', width: 20 }    ];      // 添加二级表头    worksheet.addRow(['二级表头A', '二级表头B', '二级表头C']);      // 填充数据    const columnData = [      { id: 15, name: 99, dob: '2024-04-16' },      { id: 50, name: 101, dob: '2024-04-17' }    ];    columnData.forEach(item => {      worksheet.addRow(item);    });      // 添加求和公式到A5单元格    worksheet.getCell('A5').value = {      formula: 'SUM(A3:A4)',      result: null // ExcelJS会自动计算结果,无需显式设置result为null    };       // 写入Excel文件    workbook.xlsx.writeBuffer().then((buffer) => {      const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });      saveAs(blob, 'ExcelJS.xlsx');    }).catch((error) => {      console.error('Error exporting Excel file:', error);    });  };

进行统计求和设置时,相关代码如下:

// 添加求和公式到A5单元格    worksheet.getCell('A5').value = {      formula: 'SUM(A3:A4)',      result: null // ExcelJS会自动计算结果,无需显式设置result为null    };  

下载excel

 // 写入Excel文件    workbook.xlsx.writeBuffer().then((buffer) => {      const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });      saveAs(blob, 'ExcelJS.xlsx');    }).catch((error) => {      console.error('Error exporting Excel file:', error);    });  

下载的excel文件A5单元格显示为0,要手动点击A5单元格之后,才显示公式计算值。

共有1个答案

顾鸣
2024-04-18

你没有提供saveAs函数怎么写的,所以我是这样写的导出方法:

workbook.xlsx.writeBuffer().then(buffer => {    const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });    const url = window.URL.createObjectURL(blob);    const a = document.createElement('a');    a.href = url;    a.download = 'result.xlsx';    a.click();    window.URL.revokeObjectURL(url);});

结果是这样的:
image.png
没有出现你说的要点击A5才显示计算值的情况,另外我用的是WPS,使用word的话应该可以在设置里设置计算模式为自动吧

 类似资料:
  • 问题内容: 我有一个带有id(guid)列的sql表。如何强制数据库为每条新记录自动生成新的Guid? 问题答案: 添加。

  • 为了重现我的问题,可以简单地使用这个最小的生成器: 我的项目回购是:(工作区是一个空文件) 生成文件是 声明的输出“My lib/file.cpp”不是由GenRule创建的。这可能是因为genrule实际上没有创建此输出,或者因为输出是一个目录,并且genrule是远程运行的(注意,只有声明的文件输出的内容是从远程运行的genrules复制的) 问题(B),处理cc_library()部分 我不

  • 突然间得到了所有这些错误所有构建错误“在Android Studio中存在多个错误的清单合并失败” 当我没有得到这个建议的时候,我就用android studio提出了替换建议 "清单合并失败:属性application@appComponentFactoryvalue=(android.support.v4.app.CoreComponentFactory)from[com.android.su

  • 我有一个简单的服务描述文件open-api.json: 我在我的Spring webflux项目中使用springdoc openapi webflux ui: 是否可以显示现有文件而不是生成的文件?任何帮助,谢谢!

  • 请教一下这样写为什么浏览器解析不了值 width直接没有了

  • 我使用iTextPDF生成PDF,从一些文本输入中获取数据。 当我运行应用程序并创建第一个PDF时,它会按预期生成。 然后我改变一些值并生成另一个值,这就是问题所在。第一个PDF上显示的最后一个条目被打印在第二个生成的PDF的第一个条目的顶部。 不知道为什么会这样?它是保存到缓冲区还是什么的,不是很确定。 下面是生成PDF的代码: 输出请见附件图像,第一个显示第一个文件生成,第二个显示第二个文件生