C# 透视表中的OpenOfficeXml重复标签
我正在使用Epplus,并试图在表格型透视表中“重复所有项目标签”。 我尝试了很多东西,但在EPPlus库中似乎不行。我决定制作数据透视表xml,需要在数据透视表字段上添加fillDownLabels属性,但我不确定如何做到这一点C# 透视表中的OpenOfficeXml重复标签,c#,openxml,epplus,epplus-4,C#,Openxml,Epplus,Epplus 4,我正在使用Epplus,并试图在表格型透视表中“重复所有项目标签”。 我尝试了很多东西,但在EPPlus库中似乎不行。我决定制作数据透视表xml,需要在数据透视表字段上添加fillDownLabels属性,但我不确定如何做到这一点 private void ManuplateXml(OfficeOpenXml.Table.PivotTable.ExcelPivotTable pivotTable) { var xdPivotTable = pivotTable.PivotTableXm
private void ManuplateXml(OfficeOpenXml.Table.PivotTable.ExcelPivotTable pivotTable)
{
var xdPivotTable = pivotTable.PivotTableXml;
var xdPivotFields = xdPivotTable.FirstChild["pivotFields"];
if (xdPivotFields == null)
return;
foreach (XmlElement pField in xdPivotFields)
{
pField.SetAttribute("fillDownLabels", "1");
}
}
我写了这个方法,它添加了属性,但是我的透视表仍然没有重复项目标签。
xml格式应该是什么?如何使用fillDownLabels属性 您需要将
fillDownLabels
设置为true
。这是每本书
要将其设置为true,请使用以下约定:
pField.SetAttribute("fillDownLabels", "true");
另请注意,从规范中可以看出,在某些情况下可以忽略此属性:
当数据透视表([ISO/IEC-29500-1]第18.10节)字段(1)的压缩属性和大纲属性为“真”时,忽略此属性。如果数据透视表([ISO/IEC-29500-1]第18.10节)字段(1)不在数据透视表([ISO/IEC-29500-1]第18.10节)行(2)轴或数据透视表([ISO/IEC-29500-1]第18.10节)列(2)轴上,则忽略此属性
总结-要使您的fillDownLabels
正常工作:
fillDownLabels
设置为true
-默认值为false
outline
属性的compact
属性已设置或为false(可能是默认值-检查规格)。如果这是true
,则fillDownLabels属性将被忽略fillDownLabels
将被忽略pField.SetAttribute("fillDownLabels", "true");
fillDownLabels=BooleanValue.FromBoolean(true)
ConstructionpField.SetAttribute(“fillDownLabels”,“true”)代码>不起作用。
属性fillDownLabels
应用于属于ExtensionList类(
)的扩展(
)。下面是我的解决方案:
private void ManipulateXml(OfficeOpenXml.Table.PivotTable.ExcelPivotTable pivotTable)
{
var pivotTableXml = pivotTable.PivotTableXml;
var nsManager = new XmlNamespaceManager(pivotTableXml.NameTable);
nsManager.AddNamespace("d", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");
nsManager.AddNamespace("x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
var topNode = pivotTableXml.DocumentElement;
var nodes = topNode.SelectNodes("d:pivotFields/d:pivotField[@axis=\"axisRow\"]", nsManager);
if (nodes == null) return;
topNode.SetAttribute("updatedVersion", "6");//this line is important!
foreach (XmlElement node in nodes)
{
var element = pivotTableXml.CreateElement("extLst", nsManager.LookupNamespace("d"));
var ext = pivotTableXml.CreateElement("ext", nsManager.LookupNamespace("d"));
ext.SetAttribute("uri", "{2946ED86-A175-432a-8AC1-64E0C546D7DE}");
ext.SetAttribute("xmlns:x14", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
var fdLabels = pivotTableXml.CreateElement("x14:pivotField", nsManager.LookupNamespace("x14"));
fdLabels.SetAttribute("fillDownLabels", "1");
ext.AppendChild(fdLabels);
element.AppendChild(ext);
node.AppendChild(element);
}
}