
可视化项目时间线对于有效规划和跟踪至关重要。在这篇博客中,您将学习如何使用 C# 在 Excel 中创建甘特图。只需几行代码,您就可以自动生成动态且视觉上吸引人的甘特图。无论您是在构建项目管理工具还是进行内部报告,本指南将向您展示如何将任务数据转换为清晰且专业的时间线——完全可自定义,并准备导出到 Excel、PDF 或图像格式。让我们开始吧!
本文涵盖以下主题:
C# Excel 库用于创建甘特图
Aspose.Cells for .NET 是一个强大的 Excel 库,简化了在 Excel 中创建甘特图的过程。它提供了强大的功能来以编程方式操作 Excel 文件。使用 Aspose.Cells,开发人员可以轻松创建、修改和自定义图表和图形。该库支持多种 Excel 格式,并提供高级功能,使其成为项目经理和开发人员的理想选择。
Aspose.Cells for .NET 的突出之处在于其易于集成和灵活性。以下是一些关键特性:
- 全面的 API:访问各种 Excel 功能。
- 高级自定义:根据特定需求定制图表和图形。
- 高性能:高效处理大型数据集而不影响速度。
- 多种格式支持:支持多种Excel格式,包括XLSX、XLS和CSV。
遵循以下简单步骤开始使用 Aspose.Cells for .NET:
- 从 releases 下载库。
- 通过 NuGet 包管理器使用以下命令安装它:
PM> Install-Package Aspose.Cells
如何使用堆叠条形图构建甘特图
Aspose.Cells 没有内置的甘特图类型,因为 Excel 本身也不提供原生的甘特图类型。然而,Excel 中的甘特图通常是通过堆叠条形图结合自定义格式创建的 — 而 Aspose.Cells 以编程方式支持这种方法。
您可以使用 Aspose.Cells 做的事情:
您可以通过以下方式自动创建 Excel 中的甘特图:
- 设置任务数据(任务名称、开始日期、持续时间)。
- 添加堆叠条形图。
- 使用一个系列作为
开始偏移量”(隐藏)和另一个系列作为持续时间”(可见)。 - 将图表格式化为甘特图。
样本甘特图数据
| Task | Start Date | Duration | Start Offset |
|--------|-------------|----------|--------------|
| Task 1 | 2025-04-01 | 3 | 0 |
| Task 2 | 2025-04-03 | 6 | 2 |
| Task 3 | 2025-04-08 | 10 | 7 |
| Task 4 | 2025-04-18 | 3 | 17 |
| Task 5 | 2025-04-21 | 5 | 20 |
在 Excel 中使用 C# 创建甘特图
按照以下步骤使用 C# 和 Aspose.Cells for .NET 在 Excel 中创建甘特图:
- 使用
Workbook类加载现有的 Excel 文件。 - 使用
workbook.Worksheets[0]访问第一个工作表。 - 添加一个使用
ChartType.BarStacked的图表,以模拟甘特图布局。 - 添加偏移量和持续时间作为序列。
- 使用
CategoryData属性设置类别标签。 - 设置样式和轴设置。
- 使用
workbook.Save()保存工作簿。
以下是一个实现上述步骤的C#代码片段:
using Aspose.Cells;
using Aspose.Cells.Charts;
// 加载 Excel 文件
Workbook workbook = new Workbook("sample-data.xlsx");
Worksheet sheet = workbook.Worksheets[0];
// 添加甘特图
int chartIndex = sheet.Charts.Add(ChartType.BarStacked, 7, 0, 30, 10);
Chart chart = sheet.Charts[chartIndex];
chart.Title.Text = "Gantt Chart";
// 添加偏移量和持续时间作为系列
chart.NSeries.Add("D2:D6", true); // Start Offset
chart.NSeries.Add("C2:C6", true); // Duration
// 将任务名称设置为类别
chart.NSeries.CategoryData = "A2:A6";
// 使偏移条不可见
chart.NSeries[0].Area.Formatting = FormattingType.None;
// 样式持续时间条
chart.NSeries[1].Area.Formatting = FormattingType.Custom;
chart.NSeries[1].Area.ForegroundColor = Color.SteelBlue;
chart.NSeries[1].DataLabels.ShowValue = true;
// 轴设置
chart.CategoryAxis.IsPlotOrderReversed = true;
chart.CategoryAxis.Title.Text = "Tasks";
chart.ValueAxis.Title.Text = "Days from Start";
chart.ValueAxis.MajorGridLines.IsVisible = true;
// 隐藏图例
chart.ShowLegend = false;
// 调整图表大小(可选)
chart.ChartObject.Width = 700;
chart.ChartObject.Height = 400;
// Save the result
workbook.Save("GanttChartResult.xlsx", SaveFormat.Xlsx);

在 Excel 中使用 C# 创建甘特图
在Excel中使用C#自定义甘特图
您可以使用 Aspose.Cells for .NET 中以下自定义功能增强您的甘特图:
条形颜色 设置持续时间条的纯色:
chart.NSeries[1].Area.ForegroundColor = Color.SteelBlue;透明偏移量 将偏移(不可见)条完全透明。
chart.NSeries[0].Area.Formatting = FormattingType.None;任务订单 反转Y轴以从上到下显示任务:
chart.CategoryAxis.IsPlotOrderReversed = true;数据标签 在每个任务栏上直接显示持续时间:
chart.NSeries[1].DataLabels.ShowValue = true;图例控制 移除或重新定位图表图例。
chart.ShowLegend = false; // Or reposition: chart.Legend.Position = LegendPositionType.Bottom;单独条形样式 为每个任务设置自定义颜色。
var series = chart.NSeries[1]; series.Points[0].Area.ForegroundColor = Color.Green; series.Points[1].Area.ForegroundColor = Color.Red;图表尺寸 调整大小和重新定位图表:
chart.ChartObject.Width = 700; chart.ChartObject.Height = 400;导出选项 将图表保存为 Excel、PDF 或图像。
workbook.Save("GanttChart.xlsx"); workbook.Save("GanttChart.pdf", SaveFormat.Pdf); chart.ToImage("chart.png", ImageFormat.Png);
这里有一个 C# 代码片段,实现了一些上述自定义功能:
using Aspose.Cells;
using Aspose.Cells.Charts;
// 初始化工作簿和工作表
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "Gantt Data";
// 示例任务数据与日期
DateTime projectStart = new DateTime(2025, 4, 1);
// Headers
sheet.Cells["A1"].PutValue("Task");
sheet.Cells["B1"].PutValue("Start Date");
sheet.Cells["C1"].PutValue("Duration (Days)");
sheet.Cells["D1"].PutValue("Start Offset");
sheet.Cells["E1"].PutValue("End Date");
// Data
string[,] tasks = {
{ "Task 1", "2025-04-01", "3" },
{ "Task 2", "2025-04-03", "6" },
{ "Task 3", "2025-04-08", "10" },
{ "Task 4", "2025-04-18", "3" },
{ "Task 5", "2025-04-21", "5" }
};
for (int i = 0; i < tasks.GetLength(0); i++)
{
int row = i + 1 + 1; // Start from row 2
sheet.Cells[row, 0].PutValue(tasks[i, 0]); // Task Name
sheet.Cells[row, 1].PutValue(DateTime.Parse(tasks[i, 1])); // Start Date
sheet.Cells[row, 2].PutValue(int.Parse(tasks[i, 2])); // Duration
// 偏移量: = 开始日期 - 项目开始日期
sheet.Cells[row, 3].Formula = $"=B{row + 1} - DATE(2025,4,1)";
sheet.Cells[row, 4].Formula = $"=B{row + 1} + C{row + 1}";
}
// Autofit
sheet.AutoFitColumns();
// 添加图表
int chartIndex = sheet.Charts.Add(ChartType.BarStacked, 10, 0, 30, 10);
Chart chart = sheet.Charts[chartIndex];
chart.Title.Text = "Project Gantt Chart";
// 添加系列:偏移(隐形),持续时间(可见)
chart.NSeries.Add("D2:D6", true); // Offset
chart.NSeries.Add("C2:C6", true); // Duration
// 设置类别标签
chart.NSeries.CategoryData = "A2:A6";
// 使偏移系列透明
chart.NSeries[0].Area.Formatting = FormattingType.None;
// 为每个任务栏着色不同的颜色
Series durationSeries = chart.NSeries[1];
for (int i = 0; i < durationSeries.Points.Count; i++)
{
durationSeries.Points[i].Area.ForegroundColor = Color.FromArgb(255, 100 + i * 30, 150); // Gradient color variation
}
// 显示数据标签
chart.NSeries[1].DataLabels.ShowValue = true;
// 轴设置
chart.CategoryAxis.Title.Text = "Tasks";
chart.CategoryAxis.IsPlotOrderReversed = true;
chart.ValueAxis.Title.Text = "Days from Project Start";
chart.ValueAxis.MajorGridLines.IsVisible = true;
chart.ValueAxis.MinValue = 0;
chart.ValueAxis.MajorUnit = 5;
// 移除图例
chart.ShowLegend = false;
// 调整图表大小
chart.ChartObject.Width = 700;
chart.ChartObject.Height = 400;
// 导出到 Excel
workbook.Save("CustomizedGanttChart.xlsx", SaveFormat.Xlsx);

在 Excel 中使用 C# 自定义甘特图
获取免费许可证
想要探索 Aspose 产品吗?访问 license page 获取免费的临时许可证。开始使用并充分发挥 Aspose.Cells 在您的项目中的潜力是很简单的!
甘特图 Excel:免费资源
不要在这里停下!探索更多资源,以进一步增强对 Aspose.Cells 的理解。这些资源将帮助您掌握 Excel 自动化并加强您的技能。
结论
在这篇博客文章中,我们探讨了如何使用 C# 在 Excel 中创建甘特图。 Aspose.Cells for .NET 通过其强大的功能和灵活性简化了这一过程。 我们鼓励您进一步了解 Aspose.Cells for .NET,以增强您的项目管理能力。
如果您有任何问题或需要进一步的帮助,请随时通过我们的 免费支持论坛 联系我们。