在 Excel 中使用 C# 創建甘特圖

可視化專案時間表對於有效的規劃和追蹤至關重要。在這篇博客文章中,您將學習如何使用 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:

  1. releases 下載庫。
  2. 透過 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           |

Create a Gantt Chart in Excel using C#

按照以下步驟使用 C# 和 Aspose.Cells for .NET 在 Excel 中創建甘特圖:

  1. 使用 Workbook 類別加載現有的 Excel 檔案。
  2. 使用 workbook.Worksheets[0] 訪問第一個工作表。
  3. 將一個使用 ChartType.BarStacked 的圖表添加進來,以模擬甘特圖佈局。
  4. 添加偏移量和持續時間作為系列。
  5. 使用 CategoryData 屬性設置類別標籤。
  6. 設定樣式和座標軸設置。
  7. 使用 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# 創建甘特圖

在 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;
    
  • Legend Control 移除或重新定位圖表圖例。

    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

    // Offset: = 開始日期 - 專案開始日期
    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";

// 將 Offset 系列設為透明
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#

在 Excel 中使用 C# 自訂甘特圖

獲取免費許可證

有興趣探索 Aspose 產品嗎?訪問 license page 獲取免費的臨時許可證。這很容易上手,並為您的項目解鎖 Aspose.Cells 的全部潛力!

Gantt Chart Excel: 免費資源

不要在這裡停下來!探索額外的資源,以進一步增強您對 Aspose.Cells 的理解。這些資源將幫助您掌握 Excel 自動化並加強您的技能。

結論

在這篇博客文章中,我們探討了如何使用 C# 在 Excel 中創建甘特圖。Aspose.Cells for .NET 以其強大的功能和靈活性簡化了這個過程。我們鼓勵您深入了解 Aspose.Cells for .NET,以增強您的項目管理能力。

如果您有任何問題或需要進一步的協助,請隨時通過我們的 free support forum 聯繫我們。

See Also