我有带有数据透视表的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 - 这主要是有效的,但由于我们想在服务器端使用此功能,因此不建议使用此解决方案
我做错了什么?