平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“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新建饼图适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。