我正在尝试阅读Excel图表模板(mychart.crtx)中使用的颜色。但是我不知道如何使用Open XML工具箱打开文件。使用SDK工具似乎无法实现。
能做到吗
对于Open XML SDK,这确实是不可能的,因为它仅提供WordprocessingDocument
(用于.docx
等),SpreadsheetDocument
(用于.xlsx
等)和PresentationDocument
(用于.pptx
等)类来打开Word,Excel和PowerPoint文档和模板。
但是,Office文档和Excel图表模板(.crtx
)均基于开放包装约定(OPC)。您可以使用System.IO.Packaging
命名空间中提供的类来处理任何基于OPC的文档,包括那些Excel图表模板。
下图显示了ChartTemplate.crtx
我为测试目的而创建的样本的结构。我使用了适用于Modern Visual Studio的Open XML软件包编辑器来检查该软件包。
使用System.IO.Packaging
类,Package
该类表示整个包(例如ChartTemplate.crtx
)。本PackagePart
类表示XML并包含在一个包中的其他文件。每个PackagePart
具有URI(例如,/chart/chart.xml
,/chart/charts/colors1.xml
),内容类型,和零个或多个关系到其他部分。
下面的代码片段打开示例Package
,获取PackagePart
,从零件中加载根XML元素,并进行某些断言以演示其内容。
[Fact]
public void LoadRootElement_Chart_SuccessfullyLoaded()
{
using Package package = Package.Open("Resources\\ChartTemplate.crtx", FileMode.Open, FileAccess.Read);
PackagePart packagePart = package.GetPart(new Uri("/chart/chart.xml", UriKind.Relative));
XElement rootElement = LoadRootElement(packagePart);
Assert.Equal(C.chartSpace, rootElement.Name);
Assert.NotEmpty(rootElement.Elements(C.chart).Elements(C.title));
Assert.NotEmpty(rootElement.Elements(C.chart).Elements(C.plotArea));
Assert.NotEmpty(rootElement.Elements(C.chart).Elements(C.legend));
}
该LoadRootElement()
方法很简单:
private static XElement LoadRootElement(PackagePart packagePart)
{
using Stream stream = packagePart.GetStream(FileMode.Open, FileAccess.Read);
return XElement.Load(stream);
}
我已经创建了一个辅助类C
,以提供所需的XML命名空间和名称与使用XElement
类,其中,像XNamespace
和XName
,在定义System.Xml.Linq
命名空间。
private static class C
{
public static readonly XNamespace c = "http://schemas.openxmlformats.org/drawingml/2006/chart";
public static readonly XName chart = c + "chart";
public static readonly XName chartSpace = c + "chartSpace";
public static readonly XName lang = c + "lang";
public static readonly XName legend = c + "legend";
public static readonly XName plotArea = c + "plotArea";
public static readonly XName title = c + "title";
public static readonly XName val = "val";
}
与往常一样,完整的源代码可以在我的CodeSnippets GitHub存储库中找到。查找ChartTemplateTests类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句