如何使用 IronXL 在 C# 中讀取 Excel 文件
在 C# 應用程式中讀取 Excel 文件是商務軟體、資料處理流程和報告系統中反覆出現的需求。 使用 Microsoft Office Interop 的傳統方法需要在每個伺服器或工作站上安裝 Excel,這會導致脆弱的相依性,進而複雜化部署和授權。 IronXL 完全移除了這種相依性——您的應用程式可以在不需安裝 Office 的情況下讀取 XLSX、XLS、CSV 和其他試算表格式。
本教學將帶您學習所有必要的技術:安裝程式庫、載入活頁簿、提取型別化儲存格值、迭代行列、運行集計計算,並建立完整的員工資料讀取程式。 所有範例均使用 C# 並以 .NET 10 為目標。
如何安裝 IronXL 以進行 Excel 處理?
在 Visual Studio 中打開 NuGet 套件管理器控制台,執行以下命令將 IronXL 新增到您的專案。 或者,如果您偏好從終端操作,可以使用第二行所示的 .NET CLI 命令:
Install-Package IronXL.Excel
套件在幾秒內安裝完成,並向您的專案新增一個受管理的程式集參考。 不需 COM 註冊、不需 Office 主要相容程式集,也不需管理特定版本的 Excel 相依性。
安裝後,在所有操作試算表資料的文件頂部新增 using 指令:
using IronXL;
using IronXL;
Imports IronXL
這個單一命名空間可讓您使用 WorkSheet、儲存格範圍、型別化值屬性、集計函式,以及所有其他 IronXL 型別。 IronXL.Excel 的 NuGet Gallery 頁面 列出所有可用版本及其完整的相依樹。
IronXL 支援哪些 Excel 文件格式?
瞭解您的應用程式必須處理的格式會影響您所進行的 API 調用和專案採用的儲存決策。
XLSX——自 Excel 2007 以來的預設格式——是一個 XML 文件的 ZIP 壓縮檔案。 它支持超過一百萬行、豐富的格式化、樞紐分析表和命名範圍。 大多數現代資料管道會輸出 XLSX 格式,因此這是您最常遇到的格式。
XLS 是 Excel 2003 及更早版本使用的舊二進制格式。 一些企業系統仍然輸出 XLS 格式,因此在與舊基礎設施整合時,可靠的支援此格式很重要。 IronXL 無需任何特殊配置即可讀取 XLS 文件。
XLSM 將具宏支援的功能擴展至 XLSX。 IronXL 能夠讀取來自 XLSM 文件的試算表資料,即使它不執行嵌入的 VBA 程式碼,這是伺服器端資料提取的正確行為。
CSV 和 TSV 是廣泛用於系統間資料交換的純文字表格格式。 WorkBook.LoadCSV 處理逗號分隔的文件,IronXL 返回相同的 WorkBook 物件,您的程式碼已知道如何導航,因此無論來源格式為何,您的資料讀取邏輯都保持一致。
當您打開 WorkBook.Load 時,IronXL 會自動從文件副檔名檢測文件格式。 在大多數情況下,您不需要明確指定格式,這簡化了必須處理來自多個來源的輸入的程式碼。
| 格式 | 擴展名 | 載入方法 | 註釋 |
|---|---|---|---|
| 開放 XML 活頁簿 | .xlsx | WorkBook.Load | 預設現代格式 |
| 舊二進制格式 | .xls | WorkBook.Load | Excel 2003 及更早版本 |
| 支持宏 | .xlsm | WorkBook.Load | 資料讀取;不執行宏 |
| 逗號分隔 | .csv | WorkBook.LoadCSV | 優化的 CSV 解析器 |
| 制表符分隔 | .tsv | WorkBook.Load | 制表符分隔變體 |
如何載入和讀取 Excel 活頁簿?
WorkBook.Load 方法是所有基於文件的操作的進入點。 傳遞文件路徑後,IronXL 返回一個完全填充的活頁簿物件,您可以立即查詢:
using IronXL;
// Load the workbook; format is detected automatically
WorkBook workbook = WorkBook.Load("Employees.xlsx");
// Access the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Read a single cell by A1 address
string companyName = sheet["A1"].StringValue;
Console.WriteLine($"Company: {companyName}");
// Access sheets by name or by zero-based index
WorkSheet byName = workbook.GetWorkSheet("Sales");
WorkSheet byIndex = workbook.WorkSheets[1];
// Load a password-protected file
WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd");
using IronXL;
// Load the workbook; format is detected automatically
WorkBook workbook = WorkBook.Load("Employees.xlsx");
// Access the first worksheet
WorkSheet sheet = workbook.DefaultWorkSheet;
// Read a single cell by A1 address
string companyName = sheet["A1"].StringValue;
Console.WriteLine($"Company: {companyName}");
// Access sheets by name or by zero-based index
WorkSheet byName = workbook.GetWorkSheet("Sales");
WorkSheet byIndex = workbook.WorkSheets[1];
// Load a password-protected file
WorkBook secured = WorkBook.Load("Confidential.xlsx", "p@ssw0rd");
Imports IronXL
' Load the workbook; format is detected automatically
Dim workbook As WorkBook = WorkBook.Load("Employees.xlsx")
' Access the first worksheet
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Read a single cell by A1 address
Dim companyName As String = sheet("A1").StringValue
Console.WriteLine($"Company: {companyName}")
' Access sheets by name or by zero-based index
Dim byName As WorkSheet = workbook.GetWorkSheet("Sales")
Dim byIndex As WorkSheet = workbook.WorkSheets(1)
' Load a password-protected file
Dim secured As WorkBook = WorkBook.Load("Confidential.xlsx", "p@ssw0rd")
DefaultWorkSheet 屬性返回第一張工作表,適用於大多數單張工作表文件。 當您的文件包含多張工作表時,GetWorkSheet 可按名稱檢索,WorkSheets[n] 可按零索引檢索。 WorkBook API 參考文件了活頁簿物件上的每個重載和屬性。

輸入

輸出

如何從 Excel 讀取型別化儲存格值?
在 IronXL 中,每個儲存格都公開型別化屬性,返回您所需精確型別的值——無需手動解析或轉型。 型別化屬性會自動處理來自基礎儲存格表示的強制轉型:
using IronXL;
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Extract typed values from row 2
int employeeId = sheet["A2"].IntValue;
string name = sheet["B2"].StringValue;
string department = sheet["C2"].StringValue;
decimal salary = sheet["D2"].DecimalValue;
DateTime hireDate = sheet["E2"].DateTimeValue;
Console.WriteLine($"ID: {employeeId}");
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Department: {department}");
Console.WriteLine($"Salary: {salary:C}");
Console.WriteLine($"Hired: {hireDate:d}");
// Use the Text property for the formatted display value
string formattedSalary = sheet["D2"].Text; // "$75,000.00"
string formattedDate = sheet["E2"].Text; // "28/02/2026"
// Guard against empty cells before reading
if (!sheet["B3"].IsEmpty)
{
string value = sheet["B3"].StringValue;
}
using IronXL;
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Extract typed values from row 2
int employeeId = sheet["A2"].IntValue;
string name = sheet["B2"].StringValue;
string department = sheet["C2"].StringValue;
decimal salary = sheet["D2"].DecimalValue;
DateTime hireDate = sheet["E2"].DateTimeValue;
Console.WriteLine($"ID: {employeeId}");
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Department: {department}");
Console.WriteLine($"Salary: {salary:C}");
Console.WriteLine($"Hired: {hireDate:d}");
// Use the Text property for the formatted display value
string formattedSalary = sheet["D2"].Text; // "$75,000.00"
string formattedDate = sheet["E2"].Text; // "28/02/2026"
// Guard against empty cells before reading
if (!sheet["B3"].IsEmpty)
{
string value = sheet["B3"].StringValue;
}
Imports IronXL
Dim workbook As WorkBook = WorkBook.Load("Employees.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Extract typed values from row 2
Dim employeeId As Integer = sheet("A2").IntValue
Dim name As String = sheet("B2").StringValue
Dim department As String = sheet("C2").StringValue
Dim salary As Decimal = sheet("D2").DecimalValue
Dim hireDate As DateTime = sheet("E2").DateTimeValue
Console.WriteLine($"ID: {employeeId}")
Console.WriteLine($"Name: {name}")
Console.WriteLine($"Department: {department}")
Console.WriteLine($"Salary: {salary:C}")
Console.WriteLine($"Hired: {hireDate:d}")
' Use the Text property for the formatted display value
Dim formattedSalary As String = sheet("D2").Text ' "$75,000.00"
Dim formattedDate As String = sheet("E2").Text ' "28/02/2026"
' Guard against empty cells before reading
If Not sheet("B3").IsEmpty Then
Dim value As String = sheet("B3").StringValue
End If
Text 屬性返回與 Excel 中格式化一樣的顯示值——當您需要格式化數字字串而不是原始數字時特別有用。 對於包含 Excel 公式 的儲存格,IronXL 評估表達式並通過相同的型別化屬性返回計算結果。 附加值屬性——FloatValue——出現在 儲存格值參考中。
如何迭代 Excel 的行和列?
處理資料集中每條記錄需要逐行逐列迭代。 IronXL 的範圍語法直接映射到 Excel 的 A1 標記法,因此選擇儲存格區塊對於任何曾編寫試算表公式的人來說都很熟悉:
using IronXL;
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Iterate a single column range
Console.WriteLine("Employee List:");
foreach (var cell in sheet["B2:B100"])
{
if (!string.IsNullOrEmpty(cell.Text))
Console.WriteLine($" - {cell.Text}");
}
// Iterate all rows and all columns using the Rows property
foreach (var row in sheet.Rows)
{
foreach (var cell in row)
Console.Write(cell.Text.PadRight(15));
Console.WriteLine();
}
using IronXL;
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Iterate a single column range
Console.WriteLine("Employee List:");
foreach (var cell in sheet["B2:B100"])
{
if (!string.IsNullOrEmpty(cell.Text))
Console.WriteLine($" - {cell.Text}");
}
// Iterate all rows and all columns using the Rows property
foreach (var row in sheet.Rows)
{
foreach (var cell in row)
Console.Write(cell.Text.PadRight(15));
Console.WriteLine();
}
Imports IronXL
Dim workbook As WorkBook = WorkBook.Load("Employees.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Iterate a single column range
Console.WriteLine("Employee List:")
For Each cell In sheet("B2:B100")
If Not String.IsNullOrEmpty(cell.Text) Then
Console.WriteLine($" - {cell.Text}")
End If
Next
' Iterate all rows and all columns using the Rows property
For Each row In sheet.Rows
For Each cell In row
Console.Write(cell.Text.PadRight(15))
Next
Console.WriteLine()
Next
範圍 sheet["B2:B100"] 返回可列舉的儲存格物件集合。 檢查 string.IsNullOrEmpty 能夠優雅地跳過空行。 Rows 屬性——在 工作表資料範圍指南中有文件記錄——一次走訪工作表一行,公開每行的儲存格,而無需您事先知道欄數。
輸出

如何在 Excel 資料上運行集計計算?
IronXL 包含內建的 集計函式,直接在儲存格範圍內計算結果——無需手動累加迴圈:
using IronXL;
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Built-in aggregate methods work on any named range
decimal total = sheet["D2:D200"].Sum();
decimal highest = sheet["D2:D200"].Max();
decimal lowest = sheet["D2:D200"].Min();
decimal average = sheet["D2:D200"].Avg();
Console.WriteLine($"Total Payroll: {total:C}");
Console.WriteLine($"Highest Salary: {highest:C}");
Console.WriteLine($"Lowest Salary: {lowest:C}");
Console.WriteLine($"Average Salary: {average:C}");
// Combine with LINQ for filtered aggregation
decimal itTotal = sheet["D2:D200"]
.Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT")
.Sum(c => c.DecimalValue);
Console.WriteLine($"IT Department Total: {itTotal:C}");
using IronXL;
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
// Built-in aggregate methods work on any named range
decimal total = sheet["D2:D200"].Sum();
decimal highest = sheet["D2:D200"].Max();
decimal lowest = sheet["D2:D200"].Min();
decimal average = sheet["D2:D200"].Avg();
Console.WriteLine($"Total Payroll: {total:C}");
Console.WriteLine($"Highest Salary: {highest:C}");
Console.WriteLine($"Lowest Salary: {lowest:C}");
Console.WriteLine($"Average Salary: {average:C}");
// Combine with LINQ for filtered aggregation
decimal itTotal = sheet["D2:D200"]
.Where(c => sheet[$"C{c.RowIndex}"].StringValue == "IT")
.Sum(c => c.DecimalValue);
Console.WriteLine($"IT Department Total: {itTotal:C}");
Imports IronXL
Dim workbook As WorkBook = WorkBook.Load("Employees.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
' Built-in aggregate methods work on any named range
Dim total As Decimal = sheet("D2:D200").Sum()
Dim highest As Decimal = sheet("D2:D200").Max()
Dim lowest As Decimal = sheet("D2:D200").Min()
Dim average As Decimal = sheet("D2:D200").Avg()
Console.WriteLine($"Total Payroll: {total:C}")
Console.WriteLine($"Highest Salary: {highest:C}")
Console.WriteLine($"Lowest Salary: {lowest:C}")
Console.WriteLine($"Average Salary: {average:C}")
' Combine with LINQ for filtered aggregation
Dim itTotal As Decimal = sheet("D2:D200") _
.Where(Function(c) sheet($"C{c.RowIndex}").StringValue = "IT") _
.Sum(Function(c) c.DecimalValue)
Console.WriteLine($"IT Department Total: {itTotal:C}")
Max 和 Avg 自動跳過空儲存格並在背後處理數字轉換。 在範圍上連結 LINQ 查詢可為您提供篩選的集計結果——部門小計、日期範圍總和以及條件計數——都無需離開 IronXL API。
如何建立完整的員工資料讀取器?
以下範例將迄今為止覆蓋的所有內容組合成一個生產就緒的主控台應用程式,載入員工試算表、格式化每條記錄、累計工資總額、處理回寫並優雅地捕獲錯誤:
using IronXL;
try
{
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
Console.WriteLine("=== Employee Data Report ===\n");
int rowNumber = 2;
decimal totalSalary = 0m;
int employeeCount = 0;
while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue))
{
int id = sheet[$"A{rowNumber}"].IntValue;
string name = sheet[$"B{rowNumber}"].StringValue;
string department = sheet[$"C{rowNumber}"].StringValue;
decimal salary = sheet[$"D{rowNumber}"].DecimalValue;
Console.WriteLine($"{id,4} {name,-20} {department,-15} {salary,10:C}");
totalSalary += salary;
employeeCount += 1;
rowNumber += 1;
}
Console.WriteLine($"\nTotal Employees: {employeeCount}");
Console.WriteLine($"Total Payroll: {totalSalary:C}");
// Write a new record back to the sheet and save
sheet["A10"].Value = 1010;
sheet["B10"].Value = "Jane Doe";
sheet["C10"].Value = "Finance";
sheet["D10"].Value = 75000;
workbook.SaveAs("Employees-Updated.xlsx");
}
catch (Exception ex)
{
Console.WriteLine($"Error reading Excel file: {ex.Message}");
}
using IronXL;
try
{
WorkBook workbook = WorkBook.Load("Employees.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;
Console.WriteLine("=== Employee Data Report ===\n");
int rowNumber = 2;
decimal totalSalary = 0m;
int employeeCount = 0;
while (!string.IsNullOrEmpty(sheet[$"A{rowNumber}"].StringValue))
{
int id = sheet[$"A{rowNumber}"].IntValue;
string name = sheet[$"B{rowNumber}"].StringValue;
string department = sheet[$"C{rowNumber}"].StringValue;
decimal salary = sheet[$"D{rowNumber}"].DecimalValue;
Console.WriteLine($"{id,4} {name,-20} {department,-15} {salary,10:C}");
totalSalary += salary;
employeeCount += 1;
rowNumber += 1;
}
Console.WriteLine($"\nTotal Employees: {employeeCount}");
Console.WriteLine($"Total Payroll: {totalSalary:C}");
// Write a new record back to the sheet and save
sheet["A10"].Value = 1010;
sheet["B10"].Value = "Jane Doe";
sheet["C10"].Value = "Finance";
sheet["D10"].Value = 75000;
workbook.SaveAs("Employees-Updated.xlsx");
}
catch (Exception ex)
{
Console.WriteLine($"Error reading Excel file: {ex.Message}");
}
Imports IronXL
Try
Dim workbook As WorkBook = WorkBook.Load("Employees.xlsx")
Dim sheet As WorkSheet = workbook.DefaultWorkSheet
Console.WriteLine("=== Employee Data Report ===" & vbCrLf)
Dim rowNumber As Integer = 2
Dim totalSalary As Decimal = 0D
Dim employeeCount As Integer = 0
While Not String.IsNullOrEmpty(sheet($"A{rowNumber}").StringValue)
Dim id As Integer = sheet($"A{rowNumber}").IntValue
Dim name As String = sheet($"B{rowNumber}").StringValue
Dim department As String = sheet($"C{rowNumber}").StringValue
Dim salary As Decimal = sheet($"D{rowNumber}").DecimalValue
Console.WriteLine($"{id,4} {name,-20} {department,-15} {salary,10:C}")
totalSalary += salary
employeeCount += 1
rowNumber += 1
End While
Console.WriteLine(vbCrLf & $"Total Employees: {employeeCount}")
Console.WriteLine($"Total Payroll: {totalSalary:C}")
' Write a new record back to the sheet and save
sheet("A10").Value = 1010
sheet("B10").Value = "Jane Doe"
sheet("C10").Value = "Finance"
sheet("D10").Value = 75000
workbook.SaveAs("Employees-Updated.xlsx")
Catch ex As Exception
Console.WriteLine($"Error reading Excel file: {ex.Message}")
End Try
while 迴圈在 A 欄變為空時終止,這使得讀取器能夠適應任何長度的試算表,而無需硬編碼行數。 寫回值與讀取使用相同的儲存格地址語法,並且 SaveAs 將更改保存到新文件,使原始文件保持不變。 try/catch 塊處理缺失文件、鎖定的活頁簿和損壞的資料——這些都是在生產環境中發生的外部來源到來的輸入文件的所有場景。
輸出

建立試算表的指南和XLSX 轉換為 CSV 的指南展示了如何在端到端工作流中結合讀取和寫入。 儲存格樣式指南涵蓋了當格式化輸出是一種要求時的字體大小、顏色和邊框。

如何處理進階的讀取場景?
在實際專案中會出現一些不常見但重要的場景。 命名範圍、工作表探索和 CSV 載入各自具有專門的 API 支援。
命名範圍使您能按邏輯標籤而不是儲存格地址來引用資料。 如果活頁簿作者定義了一個名為 SalaryTable 的命名範圍,則您可以直接通過 GetRangeByName 存取它:
var range = workbook.GetRangeByName("SalaryTable");
decimal total = range.Sum();
Console.WriteLine($"Named range total: {total:C}");
var range = workbook.GetRangeByName("SalaryTable");
decimal total = range.Sum();
Console.WriteLine($"Named range total: {total:C}");
Dim range = workbook.GetRangeByName("SalaryTable")
Dim total As Decimal = range.Sum()
Console.WriteLine($"Named range total: {total:C}")
工作表探索可枚舉活頁簿中的每個工作表,在處理具有可變數量標籤的文件時非常有用:
foreach (WorkSheet ws in workbook.WorkSheets)
Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}");
foreach (WorkSheet ws in workbook.WorkSheets)
Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}");
For Each ws As WorkSheet In workbook.WorkSheets
Console.WriteLine($"Sheet: {ws.Name}, Rows: {ws.RowCount}")
Next
CSV 載入使用專用方法,優化純文字文件,返回 WorkSheet,您可以使用相同的範圍 API 進行瀏覽:
WorkBook csv = WorkBook.LoadCSV("data.csv");
WorkSheet first = csv.DefaultWorkSheet;
Console.WriteLine(first["A1"].StringValue);
WorkBook csv = WorkBook.LoadCSV("data.csv");
WorkSheet first = csv.DefaultWorkSheet;
Console.WriteLine(first["A1"].StringValue);
Dim csv As WorkBook = WorkBook.LoadCSV("data.csv")
Dim first As WorkSheet = csv.DefaultWorkSheet
Console.WriteLine(first("A1").StringValue)
這些模式涵蓋了出現在資料遷移專案、ETL 流程和自動化報告系統中的進階讀取場景。 有關完整的 API 表面,請參閱 IronXL 物件參考。
其他權威參考:
- IronXL 文件首頁
- 如何編輯 Excel 公式
- 如何使用數學函式
- 如何選擇範圍
- ECMA-376 開放 XML 規範——定義 XLSX 格式的權威標準
- Microsoft 開放 XML SDK 文件——底層文件結構的參考材料
- NuGet Gallery——IronXL.Excel——包含版本歷史和下載統計的套件頁面
您接下來的步驟是什麼?
IronXL 將 Excel 文件讀取從充滿相依的 Interop 挑戰轉化為幾行簡單的 C# 程式碼。 載入活頁簿、提取型別化值、逐行迭代、運行集計計算和處理邊緣案例都遵循相同的一致 API 模式——在您的部署環境中無需安裝 Microsoft Office。
從教學轉移到生產:
- 開始免費試用以解鎖完整的 IronXL 功能集,並在承諾購買授權之前對您的 Excel 文件進行驗證。
- 瀏覽 完整的 IronXL 文件以獲取編寫、格式化、樣式和轉換試算表的指南。
- 探索 物件參考和完整的 API以發現程式庫中可用的每個類、方法和屬性。
- 當您的工作流程需要生成輸出文件以及讀取輸入文件時,查看 建立試算表的指南。
- 查看 IronXL 部落格文章索引以獲取其他教程,涵蓋如報告生成、資料驗證和多表合併等實際場景。
常見問題
什麼是IronXL?
IronXL是一個.NET程式庫,允許開發者讀取、編輯和建立各種格式的Excel文件如XLSX和XLS,無需安裝Microsoft Office。
您如何使用IronXL在C#中讀取Excel文件?
調用WorkBook.Load及文件路徑以打開工作簿,然後使用A1標示法和型別屬性如StringValue、IntValue和DecimalValue存取單元格。
為何選擇IronXL而非Microsoft Office Interop來讀取Excel文件?
IronXL不需要安裝Microsoft Office,消除了COM依賴,簡化了伺服器部署。
IronXL可以讀取哪些Excel文件格式?
IronXL可讀取XLSX、XLS、XLSM、CSV及TSV格式。格式檢測基於文件擴展名自動完成。
IronXL能有效處理大型Excel文件嗎?
是的,IronXL針對性能優化並可處理大量Excel文件,適合資料密集型應用。
IronXL相容.NET 10嗎?
是的,IronXL支持現代.NET版本,包括.NET 10以及.NET Framework專案。
如何使用IronXL運行聚合計算?
在任意單元格範圍上使用內建的Sum、Min、Max和Avg方法,這些方法會自動跳過空單元格。
IronXL能讀取受密碼保護的Excel文件嗎?
可以,將密碼作為第二個參數傳給WorkBook.Load:WorkBook.Load("file.xlsx", "password")。




