使用c#.net在MS Excel 2010中使用数据透视表格式数据

我有一个包含太多原始数据的Excel工作表。 现在我想要使用透视表工具在同一工作簿中的另一个Excel工作表中更改特定格式的数据表示forms。

到目前为止,以所需的格式来表示数据,我在Excel中做了几个手动步骤,这些步骤在下面提到,因为这样的步骤为我提供了客户端所需的格式:

  1. select表格
  2. 插入标签 – >数据透视表
  3. 创build数据透视表对话框出现:从源表中select一个表(select要分析的数据= Sheet1!$ A:$ I)
  4. select我们希望放置数据透视表报表的新工作表。
  5. select要添加到报告的字段 – 字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8,字段9 – 作为行标签
  6. function区中的枢轴表工具 – >选项 – >取消select“+/-button”
  7. function区中的数据透视表工具 – >devise – >报告布局 – >以表格forms显示
  8. 在function区中的数据透视表工具 – >devise – > SubTotatls – >不显示小计
  9. 在function区中的数据透视表工具 – >devise – >总计 – >closures行和列

Excel表格的源格式如下所述

原始数据

现在我想用C#.net编程地完成所有这些手动步骤。 最终的结果应该是以下格式:

结果格式 – 数据透视表

请提及源代码来做同样的事情。

Excel.Application excelApp = new Excel.Application(); Excel.Workbook excelWorkBook = excelApp.Workbooks.Open("c:\\Users\\username\\Desktop\\Test.xlsx"); Excel.Worksheet excelworksheet = excelWorkBook.ActiveSheet; Excel.Worksheet sheet2 = excelWorkBook.Sheets.Add(); // Added new sheet to create Pivot Table sheet2.Name = "Pivot Table"; // Assigned sheet Name excelworksheet.Activate(); Excel.Range oRange = excelworksheet.UsedRange; Excel.PivotCache oPivotCache = (Excel.PivotCache)excelWorkBook.PivotCaches().Add(Excel.XlPivotTableSourceType.xlDatabase, oRange); // Set the Source data range from First sheet Excel.Range oRange2 = sheet2.Cells[1, 1]; Excel.PivotCaches pch = excelWorkBook.PivotCaches(); pch.Add(Microsoft.Office.Interop.Excel.XlPivotTableSourceType.xlDatabase, oRange).CreatePivotTable(sheet2.Cells[1, 1], "PivTbl_1", Type.Missing, Type.Missing);// Create Pivot table Excel.PivotTable pvt = sheet2.PivotTables("PivTbl_1") as Excel.PivotTable; pvt.ShowDrillIndicators = false; // Used to remove the Expand/ Collapse Button from each cell Excel.PivotField fld = ((Excel.PivotField)pvt.PivotFields("ColumnA")); // Create a Pivot Field in Pivot table fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; // Add the pivot field as Row Field fld.set_Subtotals(1, false); //Remove Subtotals for each row and column fld = ((Excel.PivotField)pvt.PivotFields("ColumnB")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnC")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnD")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnE")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnF")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnG")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnH")); fld.Orientation = Excel.XlPivotFieldOrientation.xlRowField; fld.set_Subtotals(1, false); fld = ((Excel.PivotField)pvt.PivotFields("ColumnI")); fld.Orientation = Excel.XlPivotFieldOrientation.xlDataField; // Sort column set as datafield to show the Pivot table as per requirement- It will show the total count of data and not needed so later on we will hide this Column sheet2.UsedRange.Columns.AutoFit(); // Used to Autoset the column width according to data //Set Conditional Formating for "Access" Column if Cell of the Access Column Contain W then Set Background color Light Green/ If R then Set Misty Rose Cell's Back Ground Color Excel.FormatCondition SetBgColorForAccessW = sheet2.get_Range("H:H", Type.Missing).FormatConditions.Add(Excel.XlFormatConditionType.xlTextString, Type.Missing, Type.Missing, Type.Missing, "w", Excel.XlContainsOperator.xlContains, Type.Missing, Type.Missing); SetBgColorForAccessW.Interior.Color = Color.LightGreen; Excel.FormatCondition SetBgColorForAccessR = sheet2.get_Range("H:H", Type.Missing).FormatConditions.Add(Excel.XlFormatConditionType.xlTextString, Type.Missing, Type.Missing, Type.Missing, "r", Excel.XlContainsOperator.xlContains, Type.Missing, Type.Missing); SetBgColorForAccessR.Interior.Color = Color.MistyRose; sheet2.get_Range("I:I").EntireColumn.Hidden = true; // Used to hide Sort Column as not needed and not have relavent data pvt.ColumnGrand = false; // Used to hide Grand total for columns pvt.RowGrand = false; // Used to hide Grand total for Rows excelApp.DisplayAlerts = false; // Used to hide unappropriate message prompt from Excel excelworksheet.Delete(); // Delete the Sheet with Raw data because not needed and we created new sheet which represent data in pivot table format sheet2.Activate(); // Set focus on Sheet Containing data in Pivot table format sheet2.get_Range("J1", "J1").Select(); // Set focus of column J to hide Pivot Table Field List (Left pane) when we open the file excelWorkBook.SaveAs(OutputPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);// Used to Save as and overwrite the Excel file if already exist excelApp.DisplayAlerts = true; // Reset the property of Excel excelWorkBook.Close(); // Close the workbook excelApp.Quit(); // Quit the Excel application;