首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Excel 開發核心:深入掌握物件模型與關鍵類別

     編輯:關於.NET

開發 Excel 增益集或自動化方案,繞不開龐大的 Excel 物件模型。官方統計超過 270 個物件、5000 多個屬性與方法,但實務上只需精通核心四大類別——Application、Workbook、Worksheet、Range——即能應對 90% 的開發場景。本文梳理物件階層結構,並針對高頻屬性、方法、事件給出實戰程式碼片段,助你快速定位所需 API。

物件模型整體架構

Excel 物件模型完整映射 UI 階層:

  • Application:根物件,代表 Excel 應用程式本身,管理全域設定(選單、工具列、計算模式等)。
  • Workbooks 集合:包含多個 Workbook(.xls/.xlsx 檔案),同一時間僅有一個 ActiveWorkbook。
  • Worksheets 集合:每個 Workbook 含多個 Worksheet 或圖表工作表,唯一 ActiveSheet 處於編輯狀態。
  • Range:儲存格或儲存格區域,可為單一儲存格、整列、整行、不連續區域,是資料操作的基本單位。

Excel 物件模型階層圖

Application 物件:全域控制中樞

效能關鍵:ScreenUpdating

批次寫入大量資料時,關閉畫面更新可大幅提升速度:

bool old = Application.ScreenUpdating;
try {
  Application.ScreenUpdating = false;
  // 大量填充儲存格...
} finally {
  Application.ScreenUpdating = old;
}

常用子物件與集合

  • ActiveCell、ActiveSheet、ActiveWindow、Selection
  • Workbooks、Sheets、Charts 集合
  • WorksheetFunction:呼叫 Excel 內建函數(如 Min、VLookup)
  • Names:名稱管理器,便於參考固定區域

檔案操作範例

// 建立新活頁簿
Workbook wb = Application.Workbooks.Add(Type.Missing);

// 開啟現有檔案
Workbook wbOpen = Application.Workbooks.Open(
  @"C:\Path\File.xlsx", Type.Missing, Type.Missing, ...);

// 取得指定活頁簿(注意副檔名)
Workbook wbFind = Application.Workbooks["Book1"];      // 未儲存
Workbook wbFind = Application.Workbooks["Book1.xlsx"]; // 已儲存

事件處理

Application 層級事件對所有活頁簿生效:SheetChange、WorkbookBeforeSave、WorkbookOpen、WindowActivate 等。若僅針對特定活頁簿,請改用 Workbook 物件的對應事件。

Workbook 物件:活頁簿生命週期管理

屬性/方法用途
Name/FullName/Path取得檔案名稱、完整路徑、資料夾
Saved標記是否已儲存,避免關閉時彈出提示
Protect/Unprotect保護結構/視窗,防止使用者移動工作表
SaveAs另存新檔,可指定格式(XlFileFormat)、存取模式
SaveCopyAs備份副本,不影響目前開啟的活頁簿
BuiltInDocumentProperties/CustomDocumentProperties讀寫內建/自訂文件屬性,適合儲存中繼資料
Styles建立/套用命名樣式,統一格式化

Worksheet 物件:工作表操作精要

注意:不存在獨立的 Sheet 類別,Sheets 集合元素可能是 Worksheet 或 Chart。

工作表保護

ws.Protect("pwd", Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing);
// 僅允許排序,其餘操作需解除保護

批註管理

Range rng = ws.get_Range("A1");
if (rng.Comment != null) rng.Comment.Delete();
rng.AddComment("建立時間:" + DateTime.Now);

// 顯示/隱藏所有批註
foreach (Comment c in ws.Comments) c.Visible = true;

工作表複製、移動、列印

ws.Copy(Type.Missing, wb.Sheets[3]); // 複製到第 3 張之後
ws.Move(Type.Missing, wb.Sheets[wb.Sheets.Count]); // 移至最後
ws.PrintOut(1, 1, 2, true); // 列印第 1 頁、2 份、預覽

Range 物件:資料操作核心

Range 可代表單一儲存格、矩形區域、整列/行、不連續區域(Union)或交集(Intersect)。

取得 Range 的多種方式


// 1. A1 參考
Range r = ws.get_Range("A1", "C5");

// 2. Cells 索引(列、行)
Range r = (Range)ws.Cells[1, 1];

// 3. 名稱管理器
Range r = Application.get_Range("MyNamedRange");

// 4. 整列/整行
Range r = (Range)ws.Rows["1:3"];
Range r = (Range)ws.Columns[3];

// 5. 偏移
Range r = baseRange.get_Offset(2, 1); // 向下 2 列、向右 1 行

// 6. 邊界擴展
Range r = baseRange.get_End(XlDirection.xlDown); // 向下延伸至資料區邊緣

高頻操作範例

// 自動填充(日期、數列、格式)
rng.AutoFill(targetRange, XlAutoFillType.xlFillMonths);

// 查找
Range found = rng.Find("關鍵字", Type.Missing, XlFindLookIn.xlValues,
  XlLookAt.xlPart, XlSearchOrder.xlByRows, XlSearchDirection.xlNext, false);

// 排序
rng.Sort(rng.Columns[1], XlSortOrder.xlAscending,
  rng.Columns[2], Type.Missing, XlSortOrder.xlAscending,
  Type.Missing, XlSortOrder.xlAscending, XlYesNoGuess.xlNo,
  Type.Missing, Type.Missing, XlSortOrientation.xlSortColumns,
  XlSortMethod.xlPinYin, XlSortDataOption.xlSortNormal,
  XlSortDataOption.xlSortNormal, XlSortDataOption.xlSortNormal);

// 避免使用 Select/Selection,改直接操作 Range 物件,效能更好且不干擾使用者選取
rng.ClearContents(); // 優於 Selection.ClearContents()

結語

掌握 Application、Workbook、Worksheet、Range 四大核心物件及其高頻成員,即可從容應對 Excel 開發大多數需求。完整物件模型請參考 MSDN 文件,下一篇將介紹 Excel 開發另一大核心——自訂函數 (UDF) 開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved