C# 透视表中的OpenOfficeXml重复标签

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

我正在使用Epplus,并试图在表格型透视表中“重复所有项目标签”。 我尝试了很多东西,但在EPPlus库中似乎不行。我决定制作数据透视表xml,需要在数据透视表字段上添加fillDownLabels属性,但我不确定如何做到这一点

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
  • 确保此pField的
    outline
    属性的
    compact
    属性已设置或为false(可能是默认值-检查规格)。如果这是
    true
    ,则fillDownLabels属性将被忽略
  • 确保Pfield位于行轴或列轴上,否则
    fillDownLabels
    将被忽略
  • 使用OpenXMLSDK的人的最后一个注意事项是:要设置BooleanValue属性,可以使用约定:

    pField.SetAttribute("fillDownLabels", "true");
    

    fillDownLabels=BooleanValue.FromBoolean(true)
    Construction
    pField.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);
            }
        }