C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# Excel创建数据透视表

使用C#实现在Excel中创建和配置数据透视表

作者:用户835629078051

在数据分析和业务报告场景中,数据透视表(Pivot Table)是一种强大的数据汇总工具,本文将介绍如何使用 C# 在 Excel 工作表中创建和配置数据透视表,感兴趣的小伙伴可以了解下

在数据分析和业务报告场景中,数据透视表(Pivot Table)是一种强大的数据汇总工具。它能够快速对大量数据进行分类、汇总和分析,帮助用户从不同维度洞察数据规律。

对于 .NET 开发者而言,在某些场景下需要通过代码自动生成包含数据透视表的 Excel 报表。例如:

本文将介绍如何使用 C# 在 Excel 工作表中创建和配置数据透视表,包括数据源设置、字段布局和样式美化等关键步骤。

环境准备

首先需要在项目中添加 Spire.XLS for .NET 库。可以通过 NuGet 包管理器安装:

Install-Package Spire.XLS

核心实现

创建工作簿和基础数据

创建数据透视表之前,需要先准备源数据。以下代码演示如何创建一个包含产品销售数据的工作表:

using Spire.Xls;

// 创建工作簿实例
Workbook workbook = new Workbook();

// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];

// 设置列标题
sheet.Range["A1"].Value = "Product";
sheet.Range["B1"].Value = "Month";
sheet.Range["C1"].Value = "Count";

// 填充产品数据
sheet.Range["A2"].Value = "SpireDoc";
sheet.Range["A3"].Value = "SpireDoc";
sheet.Range["A4"].Value = "SpireXls";
sheet.Range["A5"].Value = "SpireDoc";
sheet.Range["A6"].Value = "SpireXls";
sheet.Range["A7"].Value = "SpireXls";

// 填充月份数据
sheet.Range["B2"].Value = "January";
sheet.Range["B3"].Value = "February";
sheet.Range["B4"].Value = "January";
sheet.Range["B5"].Value = "January";
sheet.Range["B6"].Value = "February";
sheet.Range["B7"].Value = "February";

// 填充数量数据
sheet.Range["C2"].Value = "10";
sheet.Range["C3"].Value = "15";
sheet.Range["C4"].Value = "9";
sheet.Range["C5"].Value = "7";
sheet.Range["C6"].Value = "8";
sheet.Range["C7"].Value = "10";

这段代码创建了一个简单的销售数据表,包含产品名称、月份和销售数量三个字段。在实际应用中,这些数据通常来自数据库或其他数据源。

创建数据透视表缓存

数据透视表需要基于一个数据缓存(PivotCache)来工作。缓存存储了源数据的副本,用于提高性能:

// 定义数据源范围
CellRange dataRange = sheet.Range["A1:C7"];

// 创建数据透视表缓存
PivotCache cache = workbook.PivotCaches.Add(dataRange);

PivotCache 对象负责管理数据透视表的源数据。通过将数据范围传递给缓存,可以在后续的数据透视表操作中引用这份数据。

添加数据透视表到工作表

创建缓存后,就可以在工作表上添加数据透视表了:

// 在工作表的 E10 单元格位置添加数据透视表
PivotTable pt = sheet.PivotTables.Add("Pivot Table", sheet.Range["E10"], cache);

这里指定了三个参数:

配置行字段

行字段决定了数据在垂直方向上的分组方式。可以将多个字段添加到行区域来实现多级分组:

// 将 Product 字段添加到行区域
PivotField pf = pt.PivotFields["Product"] as PivotField;
pf.Axis = AxisTypes.Row;

// 将 Month 字段添加到行区域
PivotField pf2 = pt.PivotFields["Month"] as PivotField;
pf2.Axis = AxisTypes.Row;

通过设置 Axis 属性为 AxisTypes.Row,可以将字段放置在行区域。这样数据会先按产品分组,然后在每个产品下再按月份分组。

配置数据字段

数据字段用于对数值进行汇总计算。常见的汇总方式包括求和、计数、平均值等:

// 将 Count 字段添加到数据区域,使用求和方式
pt.DataFields.Add(pt.PivotFields["Count"], "SUM of Count", SubtotalTypes.Sum);

这行代码的含义是:

除了 Sum 之外,还可以使用 CountAverageMaxMin 等多种汇总类型。

设置样式和自动调整

为了提高可读性,可以为数据透视表应用内置样式,并自动调整列宽:

// 应用内置样式
pt.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium12;

// 计算数据透视表数据
pt.CalculateData();

// 自动调整列宽以适应内容
sheet.AutoFitColumn(5);
sheet.AutoFitColumn(6);

CalculateData() 方法确保数据透视表在保存前完成计算。AutoFitColumn() 方法根据内容自动调整列宽,使输出更加美观。

保存文件

最后,将生成的工作簿保存到文件:

String result = "CreatePivotTable_output.xlsx";

// 以 Excel 2010 格式保存
workbook.SaveToFile(result, ExcelVersion.Version2010);

// 释放资源
workbook.Dispose();

完整示例

以下是完整的代码示例:

using System;
using Spire.Xls;

class Program
{
   static void Main()
    {
        // 创建工作簿
        Workbook workbook = new Workbook();
        
        // 获取第一个工作表
        Worksheet sheet = workbook.Worksheets[0];
        
        // 设置列标题
        sheet.Range["A1"].Value = "Product";
        sheet.Range["B1"].Value = "Month";
        sheet.Range["C1"].Value = "Count";
        
        // 填充示例数据
        sheet.Range["A2"].Value = "SpireDoc";
        sheet.Range["A3"].Value = "SpireDoc";
        sheet.Range["A4"].Value = "SpireXls";
        sheet.Range["A5"].Value = "SpireDoc";
        sheet.Range["A6"].Value = "SpireXls";
        sheet.Range["A7"].Value = "SpireXls";
        
        sheet.Range["B2"].Value = "January";
        sheet.Range["B3"].Value = "February";
        sheet.Range["B4"].Value = "January";
        sheet.Range["B5"].Value = "January";
        sheet.Range["B6"].Value = "February";
        sheet.Range["B7"].Value = "February";
        
        sheet.Range["C2"].Value = "10";
        sheet.Range["C3"].Value = "15";
        sheet.Range["C4"].Value = "9";
        sheet.Range["C5"].Value = "7";
        sheet.Range["C6"].Value = "8";
        sheet.Range["C7"].Value = "10";
        
        // 创建数据透视表缓存
        CellRange dataRange = sheet.Range["A1:C7"];
        PivotCache cache = workbook.PivotCaches.Add(dataRange);
        
        // 添加数据透视表
        PivotTable pt = sheet.PivotTables.Add("Pivot Table", sheet.Range["E10"], cache);
        
        // 配置行字段
        PivotField pf = pt.PivotFields["Product"] as PivotField;
        pf.Axis = AxisTypes.Row;
        
        PivotField pf2 = pt.PivotFields["Month"] as PivotField;
        pf2.Axis = AxisTypes.Row;
        
        // 配置数据字段
        pt.DataFields.Add(pt.PivotFields["Count"], "SUM of Count", SubtotalTypes.Sum);
        
        // 设置样式
        pt.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium12;
        
        // 计算数据并调整列宽
        pt.CalculateData();
        sheet.AutoFitColumn(5);
        sheet.AutoFitColumn(6);
        
        // 保存文件
        workbook.SaveToFile("CreatePivotTable_output.xlsx", ExcelVersion.Version2010);
        workbook.Dispose();
        
        Console.WriteLine("数据透视表创建成功!");
    }
}

生成结果预览

实用技巧

更改字段布局

除了行字段和数据字段,还可以将字段添加到列区域或筛选区域:

// 将字段添加到列区域
PivotField columnField = pt.PivotFields["Month"] as PivotField;
columnField.Axis = AxisTypes.Column;

// 将字段添加到筛选区域
PivotField filterField = pt.PivotFields["Product"] as PivotField;
filterField.Axis = AxisTypes.Page;

使用不同的汇总方式

根据分析需求,可以选择不同的汇总类型:

// 计数
pt.DataFields.Add(pt.PivotFields["Count"], "Count", SubtotalTypes.Count);

// 平均值
pt.DataFields.Add(pt.PivotFields["Count"], "Average", SubtotalTypes.Average);

// 最大值
pt.DataFields.Add(pt.PivotFields["Count"], "Max", SubtotalTypes.Max);

自定义数据透视表选项

可以进一步配置数据透视表的显示选项:

// 显示经典数据透视表布局
pt.ShowClassicPivotTableLayout = true;

// 禁用字段列表
pt.FieldPrintOptions.ShowFieldList = false;

结论

本文介绍了如何使用 C# 在 Excel 中创建数据透视表。通过合理配置数据源、字段布局和样式选项,可以快速生成专业的数据分析报表。

掌握这些技术后,你可以:

数据透视表是 Excel 数据分析的核心功能之一,将其集成到自动化流程中可以大大提高报表生成效率。

到此这篇关于使用C#实现在Excel中创建和配置数据透视表的文章就介绍到这了,更多相关C# Excel创建数据透视表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文