我正在为VB.NET网页编写模块,它从数据库中获取值并将它们插入到Office文档中。在Visual Studio中使用 Open XML SDK ,我设法修改了Excel和PowerPoint文件,但我的PowerPoint图表中的颜色有问题:
如何使用Open XML SDK更改PowerPoint图表的颜色,而不使颜色与主题分开?
详情如下。
将我的值添加到图表后面的工作表并更新可视线条/条后,所有系列看起来都使用相同的颜色。因此我还需要在图表中设置系列的颜色。我目前使用以下代码执行此操作:
Dim barChart1 As DocumentFormat.OpenXml.Drawing.Charts.BarChart = chartPart.ChartSpace.Descendants(Of BarChart).First
Dim barChartSeries = barChart1.Descendants(Of BarChartSeries).ToList
barChartSeries(0).ChartShapeProperties.Descendants(Of SolidFill).First.SchemeColor = New SchemeColor() With
{ .Val = DocumentFormat.OpenXml.Drawing.SchemeColorValues.Accent4}
基本上,我在图表中设置了第一个栏,使用Accent4作为颜色。 Accent1,2,3等对应于PowerPoint演示文稿主题颜色调色板中的颜色。运行此代码后,图表的第一个条将使用当前调色板的第四种颜色。
我面临的问题是,在使用代码设置颜色后,颜色值似乎与实际主题颜色分开保存。
如果我打开PowerPoint文件并更改主题,所有颜色都会更改,除了我修改的那些。在此示例中,图表的第一个栏将保留前一主题的第四种颜色,而不是使用新主题的第四种颜色。
这成为一个问题,因为我公司的客户应该能够将主题更改为更适合他们的主题,但如果某些颜色坚持下去,他们就不能轻易做到。
我正在使用Accent颜色,因为替代方案似乎是设置了实际的RGB颜色值,这导致了同样的问题。我已经尝试过Eric White的PowerTools插件,它简化了更新图表的过程,但它似乎没有解决颜色问题。我可能使用它错了,但我一直无法找到有关如何调试颜色问题的具体信息。
提前感谢您的帮助。
答案 0 :(得分:1)
我不确定这对于VB.NET和OpenXML是否属实,但在PPT对象模型中,仍然支持Scheme颜色以保持与2007之前版本的PowerPoint的兼容性。新版本使用颜色主题,而不是方案。 (是的,我知道。欢迎来到PowerPoint的BizarroWorld)。
在VBA中,您可以使用类似的东西在当前颜色主题中将oSh引用的形状的填充颜色设置为重音颜色2。
oSh.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2