繁体   English   中英

用'ExcelJS'导出数据,为什么Excel中的图表会被删除?

[英]Why are the charts in Excel deleted if I export the data with' ExcelJS'?

我成功读取了现有的 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(/,/gi,"");
           worksheet.getRow(15).getCell(7).value = Number(Price);
         }
        else if (data[i-1][0] == "Average price of coal")
         {
           Price = data[i-1][2].replace(/,/gi,"");
           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 文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM