Excel VSTO + C#.NET +创建数据透视表

时间:2016-10-13 13:54:31

标签: c# .net excel vsto

*使用新代码编辑

我正在尝试通过C#.Net为Excel VSTO创建一个数据透视表,但仍然会抛出一个异常:

Exception from HRESULT: 0x800A03EC

我尝试创建数据透视表的工作表称为oSheet,与具有源数据的工作表相同

我为数据透视表源创建了一个范围:

Excel.Range pivotData = osheet.Range["A1", "B3"];

数据透视表的范围:

Excel.Range pivotDest = osheet.Range["A12", "B14"];

然后尝试用这个创建表:

osheet.PivotTableWizard(
              Excel.XlPivotTableSourceType.xlDatabase, 
              pivotData, 
              pivotDest, 
              "Table", 
              true, 
              true, 
              true, 
              true, 
              true, 
              true, 
              false, 
              false, 
              Excel.XlOrder.xlDownThenOver, 
              0, 
              false, 
              false
);

表向导行中发生错误。

关于导致错误的原因的任何想法或通过C#.Net创建数据透视表的更好方法?

*新代码

        Excel.Application oApp;
        Excel.Worksheet osheet;
        Excel.Workbook oBook;

        oApp = new Excel.Application();
        oBook = oApp.Workbooks.Add();
        osheet = (Excel.Worksheet)oBook.Worksheets.get_Item(1);

        osheet.Cells[1, 1] = "Name";
        osheet.Cells[1, 2] = "Salary";

        osheet.Cells[2, 1] = "Frank";
        osheet.Cells[2, 2] = 1500000;

        osheet.Cells[3, 1] = "Millford";
        osheet.Cells[3, 2] = 2200;

        //Now capture range of first sheet = I will need this to create pivot table
        Excel.Range oRange = osheet.Range["A1", "B3"];


        var pch = oBook.PivotCaches();

        Excel.Range pivotData = osheet.Range["A1", "B3"];

        Excel.PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, pivotData);
        Excel.PivotTable pvt = pc.CreatePivotTable(osheet.Range["A12"], "MyPivotTable");

        pvt.PivotFields("Col1").Orientation = XlPivotFieldOrientation.xlRowField;
        pvt.PivotFields("Col2").Orientation = XlPivotFieldOrientation.xlColumnField;
        pvt.AddDataField(pvt.PivotFields("Col3"), "Sum of Col3", XlConsolidationFunction.xlSum);

1 个答案:

答案 0 :(得分:1)

前几天我刚刚回答了类似的问题......

https://stackoverflow.com/a/39968355/1278553

简而言之,在C#中创建数据透视表的方法是:

Excel.Range pivotData = osheet.Range["A1", "B3"];

Excel.PivotCache pc = pch.Create(XlPivotTableSourceType.xlDatabase, pivotData);
Excel.PivotTable pvt = pc.CreatePivotTable(osheet.Range["A12"], "MyPivotTable");

然后分配您的行/列和数据字段:

pvt.PivotFields("Col1").Orientation = XlPivotFieldOrientation.xlRowField;
pvt.PivotFields("Col2").Orientation = XlPivotFieldOrientation.xlColumnField;
pvt.AddDataField(pvt.PivotFields("Col3"), "Sum of Col3", XlConsolidationFunction.xlSum);

我从之前的回答中抄袭了很多。

- 编辑2016年10月17日 -

根据您更新的代码,现在应该可以创建数据透视表:

var pch = oBook.PivotCaches();

Excel.Range pivotData = osheet.Range["A1", "B3"];

Excel.PivotCache pc = pch.Create(Excel.XlPivotTableSourceType.xlDatabase, pivotData);
Excel.PivotTable pvt = pc.CreatePivotTable(osheet.Range["A12"], "MyPivotTable");

pvt.PivotFields("Name").Orientation = Excel.XlPivotFieldOrientation.xlRowField;
pvt.AddDataField(pvt.PivotFields("Salary"), "Total Salary",
    Excel.XlConsolidationFunction.xlSum);