Почему эта попытка создать сводную таблицу (Excel Interop) не удалась?

На основе кода, который я нашелВотЯ пытаюсь создать сводную таблицу следующим образом:

var range = _xlSheet.Range[_xlSheet.Cells[6, 1],
                           _xlSheet.Cells[6, _grandTotalsColumn]];
ListObject tbl = WriteToExcelTable(_xlSheet, "tbl", "A6");
var pch = _xlBook.PivotCaches();

pch.Add(XlPivotTableSourceType.xlDatabase, "Produce Usage by Month!A6:F94")
    .CreatePivotTable(tbl, "PivTab1", Type.Missing, Type.Missing);
. . .

public ListObject WriteToExcelTable(Worksheet WSheet, string TableName, string CellStr = "A1", bool ClearSheetContent = false)
{
    Range range;

    if (ClearSheetContent)
        WSheet.Cells.ClearContents();  // clear sheet content

    // get upper left corner of range defined by CellStr
    range = (Range)WSheet.get_Range(CellStr).Cells[1, 1];   

    // Write table to range [ - don't have the helperfunc code commented this out ]
    //HelperFunc.WriteTableToExcelSheet(WSheet, this._tbl, range.Address);

    // derive range for table, +1 row for table header
    // [doesn't compile, so commented out] rang
    //range.get_Resize(this.RowCount + 1, this.ColumnCount);
    range = range.get_Resize(102, 5); // faking it to see what happens

    // add ListObject to sheet
    ListObject tbl = WSheet.ListObjects.AddEx(
        XlListObjectSourceType.xlSrcRange,
        range,
        XlListObjectHasHeaders: XlYesNoGuess.xlYes);

    // set name of excel table
    tbl.Name = TableName;

    // return excel table (ListObject)
    return tbl;
}

... но он падает на этой строке:

pch.Add(XlPivotTableSourceType.xlDatabase, "Produce Usage by Month!A6:F94")
                .CreatePivotTable(tbl, "PivTab1", Type.Missing,   
Type.Missing);

...с:

System.ArgumentException was caught
  HResult=-2147024809
  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.PivotCache.CreatePivotTable(Object TableDestination, Object TableName, Object ReadData, Object DefaultVersion)
       at ReportRunner.ProduceUsage.ProduceUsageRpt.AddPivotTable() in c:\Projects\ReportRunner\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:line 3312
       at ReportRunner.ProduceUsage.ProduceUsageRpt.GenerateProduceUsageRpt() in c:\Projects\ReportRunner\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:line 180
  InnerException:

Что не так с моим подходом? Обратите внимание, что мне пришлось закомментировать две строки из заимствованного метода (WriteToExcelTable ()), потому что они не будут компилироваться для меня.

ОБНОВИТЬ

Я также попробовал эту альтернативу:

private void AddPivotTable()
{
    int rowIdx = 42; // try 42 for now; adjust as/if necessary
    var pch = _xlBook.PivotCaches();
    pch.Add(XlPivotTableSourceType.xlDatabase, "PivotData!A6:D" + rowIdx)
        .CreatePivotTable(_xlSheet.Cells[6, 1], "PivTab1", Type.Missing, Type.Missing);
    . . .

... который потерпел крах в последней строке, показанной с:

System.Runtime.InteropServices.COMException was caught
  HelpLink=C:\Program Files (x86)\Microsoft Office\Office12\1033\XLMAIN11.CHM
  HResult=-2146827284
  Message=Cannot open PivotTable source file 'C:\Users\cshannon\Documents\PivotData'.
  Source=Microsoft Office Excel
  ErrorCode=-2146827284
  StackTrace:
       at System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepInfo& excepInfo, UInt32 argErr, String message)
       at CallSite.Target(Closure , CallSite , ComObject , Object , String , Object , Object )
       at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
       at CallSite.Target(Closure , CallSite , PivotCache , Object , String , Object , Object )
       at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid5[T0,T1,T2,T3,T4](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
       at ReportRunner.ProduceUsage.ProduceUsageRpt.AddPivotTable() in c:\Projects\ReportRunner\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:line 3172
       at ReportRunner.ProduceUsage.ProduceUsageRpt.GenerateProduceUsageRpt() in c:\Projects\ReportRunner\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:line 180
  InnerException:
ОБНОВЛЕНИЕ 2

Даже после удаления «PivotData!», Которое, по-видимому, относится к файлу с именем, из которого следует читать данные, так что строка теперь выглядит так:

pch.Add(XlPivotTableSourceType.xlDatabase, "A6:D" + rowIdx)

... он все еще падает, теперь с:

System.Runtime.InteropServices.COMException was caught
  HelpLink=C:\Program Files (x86)\Microsoft Office\Office12\1033\XLMAIN11.CHM
  HResult=-2146827284
  Message=Cannot change part of a merged cell.
  Source=Microsoft Office Excel
  ErrorCode=-2146827284
  StackTrace:
       at System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepInfo& excepInfo, UInt32 argErr, String message)
       at CallSite.Target(Closure , CallSite , ComObject , Object , String , Object , Object )
       at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
       at CallSite.Target(Closure , CallSite , PivotCache , Object , String , Object , Object )
       at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid5[T0,T1,T2,T3,T4](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
       at ReportRunner.ProduceUsage.ProduceUsageRpt.AddPivotTable() in c:\Projects\ReportRunner\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:line 3174
       at ReportRunner.ProduceUsage.ProduceUsageRpt.GenerateProduceUsageRpt() in c:\Projects\ReportRunner\ReportRunner\ProduceUsage\ProduceUsageRpt.cs:line 180
  InnerException:
ОБНОВЛЕНИЕ 3

Поскольку исключение относится к проблемам с объединенными ячейками, я добавил это:

var pivotData = _xlSheet.Range["A6:D42"];
pivotData.UnMerge();

... но все равно не удается (теперь с "Ошибка метода PivotFields класса PivotTable. Исключение Источник: исключение Microsoft Office Excel StackTrace: at System.RuntimeType.ForwardCallToInvokeMember (флаги String memberName, BindingFlags, цель объекта, Int32 [] aWrapperTypes, MessageData & msgData)«).

НОТА: Я получил "Вы хотите заменить содержимое ячеек назначения в [Book3] Produce Usage по месяцам?(дважды)

Ответы на вопрос(1)

Ваш ответ на вопрос