本文示範如何透過 C# 開啟包含預設圖表的 Excel 模板檔(Book11.xls),直接操作圖表物件修改系列數值、柱狀形狀(改為圓柱體),並另存新檔(Book2.xls)。此方式適合「固定版面、動態數據」的報表場景。
Excel.Application app = null;
Excel.Workbook wb = null;
Excel.Chart chart = null;
Excel.ChartGroup chartGroup = null;
Excel.Series series = null;
object missing = Missing.Value;
try
{
app = new Excel.Application();
wb = app.Workbooks.Open(@"Z:\Book11.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
// 取得第一個圖表工作表
chart = (Excel.Chart)app.Charts.get_Item(1);
// 修改圖表樣式:柱狀改為圓柱體
chart.BarShape = Excel.XlBarShape.xlCylinder;
// 取得第一個圖表群組與第一個系列
chartGroup = (Excel.ChartGroup)chart.ChartGroups(1);
series = (Excel.Series)chartGroup.SeriesCollection(1);
// 直接指定新的數值(單一數值將套用至整個系列)
series.Values = 456;
app.DisplayAlerts = false;
wb.SaveAs(@"Z:\Book2.xls", missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
// 標準釋放流程
if (wb != null) { wb.Close(false, missing, missing); Marshal.ReleaseComObject(wb); }
if (app != null) { app.Quit(); Marshal.ReleaseComObject(app); }
wb = null; app = null; chart = null; chartGroup = null; series = null;
GC.Collect();
}
Application.Charts:集合包含所有圖表工作表(非嵌入式圖表)。Chart.ChartGroups:圖表類型群組(如柱狀圖群組、折線圖群組)。ChartGroup.SeriesCollection:該群組下的所有資料系列。Series.Values:設定系列的數值陣列或單一值。Chart.BarShape:xlCylinder(圓柱)、xlCone(圓錐)、xlPyramid(金字塔)、xlBox(長方體)。| 優點 | 缺點 |
|---|---|
| 版面固定,美術設計一次完成 | 圖表結構(系列數、類別數)難以動態增減 |
| 程式碼簡潔,僅需更新數值 | 需維護模板檔,部署時須同步複製 |
| 保留所有複雜格式(漸層、陰影、圖片) | 跨 Excel 版本相容性需測試 |
Series.XValues。Series.HasDataLabels = true 顯示數值標籤。Worksheet.ChartObjects(index).Chart 取得。此模板導向開發模式,能有效分離「報表設計」與「資料邏輯」,提升團隊協作效率。