如何解决如果使用“ 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/charts
和 xl/drawings
的实际 XML(文件),并使用它们在 Excel 文件中动态创建相应的条目。
我已经成功地在一个项目中应用了它,使用 ADM-ZIP
for NodeJS 来(解)压缩 Excel 文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。