详情

首页手游攻略 C#实现方式在Excel中创建饼图的完整代码实用指南

C#实现方式在Excel中创建饼图的完整代码实用指南

佚名 2026-10-24 08:10:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#实现方法在Excel中创建饼图的完整代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

落到代码里,饼图(Pie Chart)是一种用来直观展示数据比例关系的圆形图表。它会将数据划分为多个扇区,每个扇区代表整体数据中的一部分比例,常用来展示不同类别在总数据中的占比情况。下面会介绍如何借助编程方式在 Excel 中新建饼图。

准备开发环境

理解这一步时,在开始之前,需准备一个 .NET 开发环境,同时安装用来处理 Excel 文件的相关组件。你能够根据项目需求选择合适的 Excel 操作库,并将其添加到项目中。

落到代码里,完成环境设置后,即可借助代码新建 Excel 工作簿、添加数据,并生成饼图。

PM> Install-Package Spire.XLS

在 Excel 中新建饼图

代码逻辑如下所示:

  • 新建一个 Excel 工作簿对象。
  • 拿到指定的工作表。
  • 在指定单元格中添加数据,并设置单元格样式和边框格式。
  • 在工作表中添加饼图,并选择合适的图表类型。
  • 为图表设置数据源范围。
  • 调整图表的位置,并添加图表标题。
  • 拿到图表中的数据系列,并设置分类标签和数据值。
  • 开启数据标签显示功能,让图表中的数据点展示对应数值。
  • 保存生成后的 Excel 文件。

实际处理时,借助以上步骤,即可采用代码在 Excel 文件中新建一个清晰直观的饼图,用来展示不同数据类别之间的比例关系。

完整示例如下所示:

using Spire.Xls;
using Spire.Xls.Charts;
using System.Drawing;

namespace CreatePieChart
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个 Workbook 实例
            Workbook workbook = new Workbook();

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

            // 设置工作表名称
            sheet.Name = "Chart data";

            // 在指定单元格中添加数据
            sheet.Range["A1"].Value = "Year";
            sheet.Range["A2"].Value = "2002";
            sheet.Range["A3"].Value = "2003";
            sheet.Range["A4"].Value = "2004";
            sheet.Range["A5"].Value = "2005";

            sheet.Range["B1"].Value = "Sales";
            sheet.Range["B2"].NumberValue = 4000;
            sheet.Range["B3"].NumberValue = 6000;
            sheet.Range["B4"].NumberValue = 7000;
            sheet.Range["B5"].NumberValue = 8500;

            // 设置单元格样式
            sheet.Range["A1:B1"].Style.Font.IsBold = true;
            sheet.Range["A1:B1"].Style.KnownColor = ExcelColors.Black;
            sheet.Range["A1:B1"].Style.Font.Color = Color.White;
            sheet.Range["A1:B5"].Style.HorizontalAlignment = HorizontalAlignType.Center;
            sheet.Range["A1:B5"].Style.VerticalAlignment = VerticalAlignType.Center;

            // 设置数字格式
            sheet.Range["B2:C5"].Style.NumberFormat = ""$"#,##0";

            // 设置单元格边框
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeTop].Color = Color.FromArgb(0, 0, 128);
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin;
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeBottom].Color = Color.FromArgb(0, 0, 128);
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeLeft].Color = Color.FromArgb(0, 0, 128);
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeRight].Color = Color.FromArgb(0, 0, 128);
            sheet.Range["A1:B5"].Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin;

            // 在工作表中添加饼图
            Chart chart = sheet.Charts.Add(ExcelChartType.Pie);

            // 设置图表的数据范围
            chart.DataRange = sheet.Range["B2:B5"];
            chart.SeriesDataFromRange = false;

            // 设置图表位置
            chart.LeftColumn = 1;
            chart.TopRow = 7;
            chart.RightColumn = 9;
            chart.BottomRow = 28;

            // 设置并格式化图表标题
            chart.ChartTitle = "Sales by Year";
            chart.ChartTitleArea.IsBold = true;
            chart.ChartTitleArea.Size = 14;

            // 获取图表中的数据系列
            ChartSerie cs = chart.Series[0];

            // 设置数据系列的分类标签
            cs.CategoryLabels = sheet.Range["A2:A5"];

            // 设置数据系列的数值
            cs.Values = sheet.Range["B2:B5"];

            // 显示数据标签
            cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = true;

            // 保存生成的 Excel 文件
            workbook.SaveToFile("PieChart.xlsx", ExcelVersion.Version2016);
        }
    }
}

知识扩展

在 C# 中操作 Excel 新建饼图,最常用的是 EPPlus(开源免费,适合 .NET Core/.NET 5+)和 Spire.XLS(商业库,功能丰富)。下面分别给出完整示例。

准备工作:安装 NuGet 包

EPPlus(建议,开源免费)

Install-Package EPPlus

注意:EPPlus 5+ 版本在商业环境中需付费,非商业或内部采用免费。若需免费商用,可采用 EPPlus 4.5.3.3 或考虑采用 ClosedXML(但 ClosedXML 不兼容直接新建图表,需借助其他方式)。

Spire.XLS(商业库,可申请免费试用)

Install-Package Spire.XLS

理解这一步时,Spire.XLS 提供免费版,但输出文件有水印,可申请 30 天临时许可证去除。

方案一:采用 EPPlus 新建饼图

从实现思路看,EPPlus 从 5.0 版本开始兼容图表。以下示例在内存中新建数据,随后添加饼图。

using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using System.IO;
public static void CreatePieChartWithEPPlus(string filePath)
{
    // 设置 EPPlus 许可证上下文(非商业用途)
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    using (var package = new ExcelPackage())
    {
        // 添加工作表
        var worksheet = package.Workbook.Worksheets.Add("销售数据");
        // 1. 准备数据
        // 标题行
        worksheet.Cells["A1"].Value = "产品";
        worksheet.Cells["B1"].Value = "销售额";
        // 数据行
        worksheet.Cells["A2"].Value = "手机";
        worksheet.Cells["B2"].Value = 4500;
        worksheet.Cells["A3"].Value = "电脑";
        worksheet.Cells["B3"].Value = 3200;
        worksheet.Cells["A4"].Value = "平板";
        worksheet.Cells["B4"].Value = 1800;
        worksheet.Cells["A5"].Value = "配件";
        worksheet.Cells["B5"].Value = 900;
        // 2. 创建饼图
        // 在指定位置添加图表(左上角单元格 D1)
        var chart = worksheet.Drawings.AddChart("PieChart", eChartType.Pie);
        chart.SetPosition(0, 0, 3, 0); // 行偏移0,列偏移3(即D列)
        chart.SetSize(400, 300); // 宽度400像素,高度300像素
        // 3. 设置数据系列
        // 系列名称:使用 B1 单元格内容("销售额")
        // X轴标签:使用 A2:A5 区域
        // 数值:使用 B2:B5 区域
        var series = chart.Series.Add(worksheet.Cells["B2:B5"], worksheet.Cells["A2:A5"]);
        series.Header = worksheet.Cells["B1"]; // 系列标题
        // 4. 显示数据标签(显示百分比)
        chart.DataLabel.ShowPercent = true;
        chart.DataLabel.ShowCategory = true;
        chart.DataLabel.ShowValue = false;
        // 5. 保存文件
        package.SaveAs(new FileInfo(filePath));
    }
}

调用示例:

CreatePieChartWithEPPlus(@"C:temp饼图_EPPlus.xlsx");

方案二:采用 Spire.XLS 新建饼图

落到代码里,Spire.XLS 的 API 更接近 VBA 风格,兼容更多图表定制选项。

using Spire.Xls;
using Spire.Xls.Charts;
using System.Drawing;
public static void CreatePieChartWithSpire(string filePath)
{
    // 创建工作簿
    Workbook workbook = new Workbook();
    Worksheet sheet = workbook.Worksheets[0];
    // 1. 准备数据
    sheet.Range["A1"].Value = "产品";
    sheet.Range["B1"].Value = "销售额";
    sheet.Range["A2"].Value = "手机";
    sheet.Range["B2"].Value = 4500;
    sheet.Range["A3"].Value = "电脑";
    sheet.Range["B3"].Value = 3200;
    sheet.Range["A4"].Value = "平板";
    sheet.Range["B4"].Value = 1800;
    sheet.Range["A5"].Value = "配件";
    sheet.Range["B5"].Value = 900;
    // 2. 添加图表
    Chart chart = sheet.Charts.Add(ExcelChartType.Pie);
    chart.DataRange = sheet.Range["A1:B5"]; // 数据范围
    chart.SeriesDataFromRange = false; // 手动指定系列
    chart.ChartTitle = "产品销售占比";
    // 3. 设置系列(第一列为类别轴,第二列为数值)
    chart.SetSeriesLabels(sheet.Range["A2:A5"]); // 类别标签
    chart.Series[0].Values = sheet.Range["B2:B5"]; // 数值
    // 4. 显示数据标签(显示百分比)
    chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasValue = true;
    chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasPercentage = true;
    chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasCategoryName = true;
    // 5. 调整图表位置和大小
    chart.LeftColumn = 3; // 起始列(D列)
    chart.TopRow = 1;
    chart.RightColumn = 7; // 结束列
    chart.BottomRow = 12;
    // 6. 保存
    workbook.SaveToFile(filePath, ExcelVersion.Version2016);
}

调用示例:

CreatePieChartWithSpire(@"C:temp饼图_Spire.xlsx");

总结

从实现思路看,本文主要讲解了如何借助 C# 代码在 Excel 文件中新建饼图。首先,新建工作簿同时在工作表中添加示例数据,随后对单元格样式、数字格式和边框进行设置,使数据表更加清晰易读。接着,借助添加饼图、设置数据范围、调整图表位置和标题,并设置分类标签、数据值以及数据标签,实现了一个完整的 Excel 饼图。最后,将生成的文件保存为 Excel 格式,便于后续查看和采用。借助这种方式,能够自动化生成 Excel 图表,提高数据可视化处理效率。

在这个场景下,总的来说,C# Excel新建饼图适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

点击查看更多
推荐专题
热门阅读