0

我在 vb.net 中开发了一个应用程序,它在报告中创建了一个 excel 数据透视表

我机器上的 excel 版本从 2003 年升级到 2010 年,数据透视表功能失败

WkbResult.PivotCaches.Add我查看了 2003 和 2010 版本的调用,除了 2003和 2012之外没有发现任何区别WkbResult.PivotCaches.Create

Dim WksPivot As Excel.Worksheet = WkbResult.Worksheets("Summary")
Dim WksResult As Excel.Worksheet = WkbResult.Worksheets("Test_Details")
Dim PC As Excel.PivotCache = Nothing
Dim PTS As Excel.PivotTables = Nothing
Dim PT As Excel.PivotTable = Nothing

' This is where it fails even after i changed Add to Create method

PC = WkbResult.PivotCaches.Create(Excel.XlPivotTableSourceType.xlDatabase, WksResult.Range("A:D"))

我试图查看参考资料,并将参考资料更改为显示在我的机器上的更高版本,但我仍然遇到相同的异常

这是异常的一部分

System.ArgumentException was unhandled
  Message="The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))"
  Source=""
  StackTrace:
       at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
       at Microsoft.Office.Interop.Excel.PivotCaches.Create(XlPivotTableSourceType SourceType, Object SourceData, Object Version)
       at QCLite.PivotTableManager.CreateResultsPivotTable(Workbook& WkbResult, ListView lstResults) in C:\userdata\Framework\src\06 Utilities\QCLite\QCLite\PivotTableManager.vb:line 23
4

1 回答 1

1

似乎对于 Excel 2010,范围规范为 ("A:D") 不起作用

我将呼叫更改为

Dim TotalRows As Integer = WksResult.UsedRange.Rows.Count

PC = WkbResult.PivotCaches.Add(Excel.XlPivotTableSourceType.xlDatabase, WksResult.Range("A1:D" & TotalRows))

它就像魅力一样。

Add 调用也出人意料地工作得很好。

于 2012-09-19T17:33:16.110 回答