范围:
我正在使用epplus和Excel COM Interop实现自动生成报告。由于EPPlus无法完成任务,我发现自己被迫使用Excel COM来覆盖EPPlus中所有缺失的功能。
基本上我的工作方式是:
1 - 对我的数据库执行查询
2 - 将结果转储到“base_sheet”(带标题)
3 - 使用“base_sheets”创建数据透视表。这总是有效的,因为我一直在使用这种策略。
互操作用法:
除了预先选择数据透视表过滤器之外,只使用EPPlus可以实现整个流程(这不会给我带来任何问题)。 (就像下面的图像显示的那样,我只想要匹配“PG”,而不是显示“全部”元素。)
问题:
调用名为Exception from HRESULT: 0x800A03EC
的错误,调用关于数据透视表的方法(内置于Excel Interop中)。
部分代码示例:
- 样本#1
// Creating Interop Object
_excelApp = new Application();
_workbook = _excelApp.Workbooks.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing,true); // The last "True" arguments avoids "corruption error"
- 样本#2
// Disposing Object
public void Dispose ()
{
_workbook.Save ();
_workbook.Close ();
_excelApp.Quit ();
Marshal.ReleaseComObject (_workbook);
}
- 样本#3
// Iterating over worksheet and their pivot tables
foreach (Worksheet sheet in _workbook.Sheets)
{
switch (sheet.Name)
{
case "ACTDIAXDIA":
foreach (PivotTable pivotTable in sheet.PivotTables ())
{
pivotTable.PivotCache().MissingItemsLimit = XlPivotTableMissingItems.xlMissingItemsNone;
pivotTable.PivotCache().Refresh();
// Settting Pivot Table Outline Layout
pivotTable.RowAxisLayout (XlLayoutRowType.xlOutlineRow);
// Retrieving Filter instance
PivotField pivotField = (PivotField) pivotTable.PageFields ("TIPO_MOVIMENTO");
ToggleFieldVisibility (pivotField, "PG", true);
ToggleFieldVisibility (pivotField, "AC", false);
ToggleFieldVisibility (pivotField, "AJ", false);
ToggleFieldVisibility (pivotField, "RX", false);
pivotField = (PivotField)pivotTable.PageFields ("TIPO_COBRANCA");
ToggleFieldVisibility (pivotField, "ACT", true);
ToggleFieldVisibility (pivotField, "TC", false);
ToggleFieldVisibility (pivotField, "DEMAIS", false);
}
break; // Code goes on, but its not needed for this demonstration
这是引起我错误的一行:
// Retrieving Filter instance
PivotField pivotField = (PivotField) pivotTable.PageFields ("TIPO_MOVIMENTO");
闭合:
经过对网络的一些广泛研究,通过错误信息,我通常发现它是由使用基于零的范围引起的,而不是在创建“范围”实例时以“1”开头,但这不是我的情况,所以我真的不知道怎么去这里。
更新一次:
我的Interop Wrapper类的代码+用法:http://pastebin.com/B59QvZhf
我不能在这里发布样本报告(.xlsx文件),因为它包含敏感数据。
我正在使用:
Microsoft.Office.Core版本2.5.0.0
Microsoft.Office.Interop.Excel版本14.0.0.0
Visual Studio 2012和2013 Ultimate