微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果使用“ ExcelJS”导出数据,为什么会删除Excel中的图表?

如何解决如果使用“ ExcelJS”导出数据,为什么会删除Excel中的图表?

我成功读取了现有的Excel文件并将数据放在所需的单元格位置。但是,将数据放入后,现有Excel文件中的所有ExcelCharts都消失了。我仍在寻找解决方案,但无法解决

workbook.xlsx.readFile(__dirname + "/../assets/ExcelFile/testFile.xlsx")
 .then(function() {
    var worksheet = workbook.getWorksheet(8); 
      for(var i=1; i<data.length+1; i++)
     {
       for(var j=1; j<data[i-1].length+1; j++)
       {
         if(data[i-1][0] == "Slaes rate of electricity")
         {
           Price = data[i-1][2].replace(/,/gi,"");
           worksheet.getRow(12).getCell(7).value = Number(Price);
         }
         else if (data[i-1][0] == "Average coal HHV")
         {
           Price = data[i-1][2].replace(/,"");
           worksheet.getRow(15).getCell(7).value = Number(Price);
         }
        else if (data[i-1][0] == "Average price of coal")
         {
           Price = data[i-1][2].replace(/,"");
           worksheet.getRow(16).getCell(7).value = Number(Price);
         }
      }
    }
    return workbook.xlsx.writeFile(__dirname + "/../assets/ExcelFile/Test_"+getTimeStamp()+".xlsx");

 })
 .then(function() {
   res.send("true");
 })
 .catch(function(error) {
   console.dir(error);
   res.send(error);
 })

解决方法

不确定这是否仍然是一个问题。对于那些因为面临同样问题而最终来到这里的人,有一个解决方案。

Excel 文件只是一个压缩容器。 ExcelJS 不会读取此容器中的所有数据。为了保留您的图表,您需要将与图表相关的元素从原始容器复制到通过使用 ExcelJS 编写文件而创建的容器中:

  • 文件夹 /xl/charts/ 及其所有底层内容
  • 文件夹 /xl/drawings/ 及其所有底层内容(图表来自绘图)
  • [Content_Types].xml 中的相应条目(对于每个图表有三个文件,所有这些文件都需要从内容类型文件中引用,例如 <Override PartName="/xl/charts/chart1.xml" ContentType="application/vnd.openxmlformats-officedocument.drawingml.chart+xml" />
  • 确保 xl/worksheets/_rels/sheet[x].xml.rels 包含与感兴趣的绘图的关系,例如 <Relationship Id="rId999" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" Target="../drawings/drawing1.xml"/>
  • 确保 xl/worksheets/sheet[x].xml 具有对相关项的引用:<drawing r:id="rId999" />(您可以将其作为 <worksheet> 标记中的最后一个元素)

(这里的 [x] 指的是感兴趣的工作表)

请注意,以上假设您有一个包含图表的源文件。如果不是这种情况,我建议创建一个一次性模板来获取 xl/chartsxl/drawings 的实际 XML(文件),并使用它们在 Excel 文件中动态创建相应的条目。

我已经成功地在一个项目中应用了它,使用 ADM-ZIP for NodeJS 来(解)压缩 Excel 文件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。