平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“C#代码实现方法在Excel中创建瀑布图”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
从实现思路看,Excel 中的瀑布图是一种用来直观展示一系列连续正值或负值如何影响最后结果的图表。它能够帮助用户跟踪企业利润或现金流变化、比较产品收入、分析销售额和库存随时间的变化等。
下面会介绍如何采用 C# 和 VB.NET 在 Excel 中新建瀑布图。
安装相关组件
实际处理时,首先,需将所需的 DLL 文件添加为 .NET 项目中的引用。相关 DLL 文件能够借助官方渠道下载,或借助 NuGet 包管理器进行安装。
PM> Install-Package Spire.XLS
采用 C# 和 VB.NET 在 Excel 中新建瀑布图
从实现思路看,瀑布图(Waterfall Chart),也称为桥接图(Bridge Chart),很适用来财务报表分析。借助该图表,能够直观展示数据在不同阶段的增加、减少以及最后结果之间的关系。
实际处理时,在 Excel 工作表中添加瀑布图时,能够借助相关图表新建方法实现。以下是具体操作步骤:
- 新建一个 Workbook 实例。
- 采用 Workbook.LoadFromFile() 方法加载示例 Excel 文档。
- 借助 Workbook.Worksheets[sheetIndex] 属性,根据索引拿到指定工作表。
- 采用 Worksheet.Charts.Add(ExcelChartType.WaterFall) 方法,在工作表中添加瀑布图。
- 借助 Chart.DataRange 属性设置图表的数据范围。
- 设置图表的位置和标题。
- 拿到图表中的指定数据系列,然后采用 ChartSerie.DataPoints[int index].SetAsTotal 属性,将指定数据点设置为总计或小计。
- 将 ChartSerie.Format.ShowConnectorLines 属性设置为 true,以显示数据点之间的连接线。
- 显示数据点的数据标签,并设置图表图例的位置。
- 采用 Workbook.SaveToFile() 方法保存生成的文档。
完整示例如下所示:
using Spire.Xls;
namespace WaterfallChart
{
class Program
{
static void Main(string[] args)
{
// 创建一个 Workbook 实例
Workbook workbook = new Workbook();
// 加载示例 Excel 文档
workbook.LoadFromFile("Data.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];
// 在工作表中添加瀑布图
Chart chart = sheet.Charts.Add(ExcelChartType.WaterFall);
// 设置图表的数据范围
chart.DataRange = sheet["A2:B11"];
// 设置图表的位置
chart.LeftColumn = 4;
chart.TopRow = 2;
chart.RightColumn = 15;
chart.BottomRow = 23;
// 设置图表标题
chart.ChartTitle = "Income Statement";
// 将图表中的指定数据点设置为总计或小计
chart.Series[0].DataPoints[2].SetAsTotal = true;
chart.Series[0].DataPoints[7].SetAsTotal = true;
chart.Series[0].DataPoints[9].SetAsTotal = true;
// 显示数据点之间的连接线
chart.Series[0].Format.ShowConnectorLines = true;
// 显示数据点的数据标签
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasValue = true;
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.Size = 8;
// 设置图表图例的位置
chart.Legend.Position = LegendPositionType.Top;
// 保存生成的文档
workbook.SaveToFile("WaterfallChart.xlsx");
}
}
}
知识扩展
理解这一步时,在 C# 中新建 Excel 瀑布图,能够借助多种专业的 .NET 库实现。这些库都无需在服务器上安装 Microsoft Office。
方案一:EPPlus(建议,开源免费首选)
在这个场景下,EPPlus 从 5.2 版本开始兼容瀑布图(Waterfall Chart)。
完整示例代码:
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using System.IO;
public static void CreateWaterfallChartWithEPPlus(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 = 10000;
worksheet.Cells["A3"].Value = "收入 A";
worksheet.Cells["B3"].Value = 4500;
worksheet.Cells["A4"].Value = "支出 B";
worksheet.Cells["B4"].Value = -2000;
worksheet.Cells["A5"].Value = "收入 C";
worksheet.Cells["B5"].Value = 3200;
worksheet.Cells["A6"].Value = "支出 D";
worksheet.Cells["B6"].Value = -1200;
worksheet.Cells["A7"].Value = "最终余额";
worksheet.Cells["B7"].Value = 14500;
// 2. 创建瀑布图
var chart = worksheet.Drawings.AddChart("WaterfallChart", eChartType.Waterfall);
chart.SetPosition(0, 0, 3, 0); // 位置:第1行,D列
chart.SetSize(500, 350);
// 3. 设置数据系列
var series = chart.Series.Add(worksheet.Cells["B2:B7"], worksheet.Cells["A2:A7"]);
series.Header = "现金流";
// 4. 显示数据标签
chart.DataLabel.ShowValue = true;
chart.DataLabel.Position = eLabelPosition.OutEnd;
// 5. 设置图表标题
chart.Title.Text = "现金流瀑布图";
// 6. 保存文件
package.SaveAs(new FileInfo(filePath));
}
}
调用方式:
CreateWaterfallChartWithEPPlus(@"C:temp瀑布图_EPPlus.xlsx");
EPPlus 关键类型:ExcelWaterfallChart和 ExcelWaterfallChartSerie是操作瀑布图的核心类。
方案二:Spire.XLS(商业库,API 简洁)
Spire.XLS 借助 ExcelChartType.WaterFall 枚举新建瀑布图。
完整示例代码:
using Spire.Xls;
using Spire.Xls.Charts;
public static void CreateWaterfallChartWithSpire(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 = 10000;
sheet.Range["A3"].Value = "收入 A";
sheet.Range["B3"].Value = 4500;
sheet.Range["A4"].Value = "支出 B";
sheet.Range["B4"].Value = -2000;
sheet.Range["A5"].Value = "收入 C";
sheet.Range["B5"].Value = 3200;
sheet.Range["A6"].Value = "支出 D";
sheet.Range["B6"].Value = -1200;
sheet.Range["A7"].Value = "最终余额";
sheet.Range["B7"].Value = 14500;
// 2. 添加瀑布图
Chart chart = sheet.Charts.Add(ExcelChartType.WaterFall);
chart.DataRange = sheet.Range["A1:B7"]; // 数据范围
chart.LeftColumn = 4;
chart.TopRow = 1;
chart.RightColumn = 12;
chart.BottomRow = 8;
// 3. 设置图表标题
chart.ChartTitle = "现金流瀑布图";
// 4. 设置特定数据点为"总计"(将最终值设为汇总点)
chart.Series[0].DataPoints[0].SetAsTotal = false; // 起始值
chart.Series[0].DataPoints[6].SetAsTotal = true; // 最终值
// 5. 显示连接线
chart.Series[0].Format.ShowConnectorLines = true;
// 6. 显示数据标签
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasValue = true;
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.Size = 10;
// 7. 保存
workbook.SaveToFile(filePath, ExcelVersion.Version2016);
}
Spire.XLS 核心 API:借助 Chart.Series[0].DataPoints[index].SetAsTotal 标记汇总点。ShowConnectorLines 控制数据点间连接线的显示。
方案三:Aspose.Cells(商业库,企业级方案)
实际处理时,Aspose.Cells 兼容 ChartType.Waterfall 枚举新建瀑布图。
完整示例代码:
using Aspose.Cells;
using Aspose.Cells.Charts;
public static void CreateWaterfallChartWithAspose(string filePath)
{
// 实例化 Workbook
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];
// 1. 准备数据
worksheet.Cells["A1"].PutValue("项目");
worksheet.Cells["B1"].PutValue("金额");
worksheet.Cells["A2"].PutValue("初始余额");
worksheet.Cells["B2"].PutValue(10000);
worksheet.Cells["A3"].PutValue("收入 A");
worksheet.Cells["B3"].PutValue(4500);
worksheet.Cells["A4"].PutValue("支出 B");
worksheet.Cells["B4"].PutValue(-2000);
worksheet.Cells["A5"].PutValue("收入 C");
worksheet.Cells["B5"].PutValue(3200);
worksheet.Cells["A6"].PutValue("支出 D");
worksheet.Cells["B6"].PutValue(-1200);
worksheet.Cells["A7"].PutValue("最终余额");
worksheet.Cells["B7"].PutValue(14500);
// 2. 添加瀑布图(位置在数据下方)
int chartIndex = worksheet.Charts.Add(ChartType.Waterfall, 7, 0, 20, 8);
Chart chart = worksheet.Charts[chartIndex];
// 3. 设置数据范围
chart.SetChartDataRange("A1:B7", false);
// 4. 设置图表标题
chart.Title.Text = "现金流瀑布图";
// 5. 设置系列标签
chart.NSeries[0].Name = "金额";
// 6. 保存
workbook.Save(filePath);
}
注意:较旧版本的 Aspose.Cells 无法直接新建某些新式图表类型(如 Waterfall、Treemap 等),请采用较新版本(如 2025 年或更新版本)。
方案四:Syncfusion.XlsIO(商业库,功能完整)
结合项目来看,Syncfusion 的 XlsIO 同样兼容 ExcelChartType.WaterFall。
完整示例代码:
using Syncfusion.XlsIO;
using System.IO;
public static void CreateWaterfallChartWithSyncfusion(string filePath)
{
using (ExcelEngine excelEngine = new ExcelEngine())
{
IApplication application = excelEngine.Excel;
application.DefaultVersion = ExcelVersion.Excel2016;
IWorkbook workbook = application.Workbooks.Create(1);
IWorksheet worksheet = workbook.Worksheets[0];
// 1. 准备数据
worksheet["A1"].Text = "项目";
worksheet["B1"].Text = "金额";
worksheet["A2"].Text = "初始余额";
worksheet["B2"].Number = 10000;
worksheet["A3"].Text = "收入 A";
worksheet["B3"].Number = 4500;
worksheet["A4"].Text = "支出 B";
worksheet["B4"].Number = -2000;
worksheet["A5"].Text = "收入 C";
worksheet["B5"].Number = 3200;
worksheet["A6"].Text = "支出 D";
worksheet["B6"].Number = -1200;
worksheet["A7"].Text = "最终余额";
worksheet["B7"].Number = 14500;
// 2. 创建瀑布图
IChartShape chart = worksheet.Charts.Add();
chart.ChartType = ExcelChartType.WaterFall;
chart.DataRange = worksheet["A2:B7"];
chart.IsSeriesInRows = false;
// 3. 设置图表标题
chart.ChartTitle = "现金流瀑布图";
// 4. 显示图例
chart.HasLegend = true;
chart.Legend.Position = ExcelLegendPosition.Bottom;
// 5. 显示数据标签
IChartSerie serie = chart.Series[0];
serie.DataPoints.DefaultDataPoint.DataLabels.IsValue = true;
// 6. 保存
workbook.SaveAs(filePath);
}
}
落到代码里,Syncfusion 还兼容设置 GapWidth 和 ShowConnectorLines 等瀑布图专用属性。
总结
本文主要讲解了如何采用 C# 和 VB.NET 在 Excel 中新建瀑布图结合项目来看,。借助加载 Excel 文件、拿到工作表、添加瀑布图同时设置数据范围,能够更快生成用来数据分析的可视化图表。此外,还能够借助设置图表标题、调整图表位置、标记总计或小计数据点、显示连接线和数据标签等方式优化图表效果,使数据变化趋势更加直观清晰。借助这些步骤,开发者能够在 .NET 应用程序中实现自动化生成专业化 Excel 瀑布图的功能。