![](/img/trans.png)
[英]Export charts/data into powerpoint and excel from web application
[英]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/charts
和xl/drawings
的实际 XML(文件),并使用它们在 Excel 文件中动态创建相应的条目。
我已经成功地在一个项目中应用了它,使用ADM-ZIP
for NodeJS 来(解)压缩 Excel 文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.