简体   繁体   English

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

[英]Format data using pivot table in MS Excel 2010 using c#.net

I have a Excel sheet containing too much raw data.我有一个包含太多原始数据的 Excel 工作表。 Now I want to change the representation of the data in specific format in another Excel sheet in same workbook using Pivot Table facility.现在我想使用数据透视表工具更改同一工作簿中另一个 Excel 工作表中特定格式的数据表示。

As of now to represent the data in required format I am doing few manual steps in Excel, which are mentioned below as such steps provide me resultant Format required by Client:截至目前,为了以所需格式表示数据,我在 Excel 中执行了一些手动步骤,如下所述,因为这些步骤为我提供了客户所需的结果格式:

  1. Select the sheet选择工作表
  2. Insert Tab --> Pivot Table插入选项卡 --> 数据透视表
  3. Create Pivot Table Dialog Appear:Select a Table from the source sheet (Choose the data you want to analyze = Sheet1!$A:$I)出现创建数据透视表对话框:从源表中选择一个表(选择要分析的数据= Sheet1!$A:$I)
  4. Select New Sheet where we want the pivot table report to be placed.选择我们想要放置数据透视表报告的新工作表。
  5. Select fields to add to reports- Field 1,Field 2,Field 3,Field 4,Field 5,Field 6,Field 7,Field 8,Field 9- As Row Labels选择要添加到报告的字段 - 字段 1、字段 2、字段 3、字段 4、字段 5、字段 6、字段 7、字段 8、字段 9- 作为行标签
  6. Pivot Table tools in Ribbon--> Options--> Deselect '+/- Buttons'功能区中的数据透视表工具--> 选项--> 取消选择“+/- 按钮”
  7. Pivot Table tools in ribbon--> Design --> Report Layout --> Show in tabular form功能区中的数据透视表工具--> 设计--> 报表布局--> 以表格形式显示
  8. Pivot table tools in ribbon--> Design -->SubTotatls--> Do not show Subtotals功能区中的数据透视表工具--> 设计--> SubTotatls--> 不显示小计
  9. Pivot table tools in ribbon--> Design --> Grand Totals--> Off for Rows and Columns功能区中的数据透视表工具--> 设计--> 总计--> 行和列关闭

the Source Format of excel sheet is mentioned below下面提到了excel表的源格式

Raw Data原始数据

Now I want to do all these manual steps programmatically using C#.net.现在我想使用 C#.net 以编程方式完成所有这些手动步骤。 the end result should be in Following format:最终结果应采用以下格式:

Resultant Format- Pivot Table结果格式 - 数据透视表

Please mention source code to do the same.请提及源代码来做同样的事情。

            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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM