OpenXML - 在xlsx编辑后,Excel检测到文件中的错误

时间:2014-09-08 13:31:50

标签: c# openxml pivot-table

我有带有数据透视表的xlsx文件和一些过滤器(pivot字段),我正在尝试使用OpenXML:

  • 打开文件
  • 修改枢轴字段设置
  • 保存文件

我正在使用这个简单(丑陋)的代码来完成这项工作:

OpenSettings settings = new OpenSettings()
{
    MarkupCompatibilityProcessSettings = new MarkupCompatibilityProcessSettings(MarkupCompatibilityProcessMode.ProcessAllParts, FileFormatVersions.Office2010)
};

SpreadsheetDocument spd = SpreadsheetDocument.Open(pathToFile, true, settings);
var pivotTableCacheDefinitionParts = spd.WorkbookPart.PivotTableCacheDefinitionParts;

foreach (PivotTableCacheDefinitionPart item in pivotTableCacheDefinitionParts)
{
    var pivotCacheDefinition = item.PivotCacheDefinition;

    var d = pivotCacheDefinition.CacheFields.Where(x => (x as CacheField).Caption == "Some filter from Excel");

    foreach(var item2 in d)
    {
        if (item2.InnerXml.Contains("Some filter value"))
        {
            var a1 = item2.InnerXml.Replace("><", ">\n<").Split('\n');
            var a2 = a1.Where(x => !x.Contains("Some filter value"));
            string a3 = "";

            foreach (var item3 in a2)
            {
                a3 += item3;
            }
            a3=a3.Replace("count=\"2\"","count=\"1\"");//There are two values to choose from currently

            item2.InnerXml = a3;
        }
    }
}

使用以下方法保存文档后

spd.WorkbookPart.Workbook.Save();
spd.Close();

Excel声明文件已损坏并将尝试修复它...我尝试使用其他库但是:

ClosedXML - 它没有在数据透视表中看到任何数据(可能是因为OLAP被用作数据源?我不知道)

ExcelDataReader - 似乎不支持数据透视表,或仅部分支持它们

EPPlus (测试版 - 稳定版无法使用我的xlsx文件) - 它似乎不支持编辑关键字段(数据透视表过滤器)

MS.Office.Interop.Excel - 这主要是有效的,但由于我们想在服务器端使用此功能,因此不建议使用此解决方案

我做错了什么?

0 个答案:

没有答案