在日常業務中,Excel 常用於保存產品清單、客户信息、銷售記錄等結構化數據。當表格數據量較大時,手動查找與替換內容不僅效率低,還容易出錯。此時藉助 C# 程序自動化處理 可以快速完成數據的批量查找和更新,從而顯著提升工作效率。
本文將介紹如何使用 C# 在 Excel 中高效完成查找與替換操作,並結合一個實際業務場景表格數據進行演示。示例涵蓋從加載文件、查找目標數據到替換與保存完整流程。
本文所使用的方法需要用到 Free Spire.XLS for .NET,可通過 NuGet 安裝:
Install-Package FreeSpire.XLS
加載 Excel 工作簿
在操作前,需要先將目標 Excel 文件加載到內存中。下面的示例展示瞭如何加載現有文件並獲取第一個工作表:
using Spire.Xls;
using System.Drawing; // 用於設置單元格顏色
// 創建 Workbook 實例
Workbook workbook = new Workbook();
// 從文件加載 Excel
workbook.LoadFromFile("Sample.xlsx");
// 獲取第一個工作表
Worksheet worksheet = workbook.Worksheets[0];
Console.WriteLine("Excel 文件加載成功!");
查找數據並定位
Spire.XLS 提供了多種查找模式:精確匹配、模糊匹配、全字匹配以及正則表達式查找。通過 FindAllString() 方法,我們可以一次性獲取所有匹配單元格。
以下代碼示例查找所有包含“ProductA”的單元格,並將結果高亮顯示:
// 查找所有包含“ProductA”的單元格
CellRange[] ranges = worksheet.FindAllString("ProductA", false, false);
if (ranges.Length > 0)
{
Console.WriteLine($"找到 {ranges.Length} 處匹配項:");
foreach (CellRange range in ranges)
{
Console.WriteLine($" - 單元格: {range.RangeAddressLocal}, 內容: {range.Text}");
// 高亮結果
range.Style.Color = Color.Yellow;
}
}
else
{
Console.WriteLine("未找到匹配項。");
}
常見查找模式參數説明如下:
| 查找模式 | caseSensitive |
wholeWord |
regex |
示例 |
|---|---|---|---|---|
| 精確匹配 | true |
true |
false |
查找“Apple”,不會匹配“apple” |
| 模糊匹配 | false |
false |
false |
查找“apple”,會匹配“Apple Pie” |
| 全字匹配 | false |
true |
false |
查找“apple”,不會匹配“Apple Pie” |
| 正則表達式 | false |
false |
true |
查找 ^P.*tA$ (以 P 開頭,以 tA 結尾) |
替換與更新數據
在定位到數據後,可以直接修改單元格內容實現替換。以下示例演示將“舊產品代碼”替換為“新產品代碼”,並用綠色高亮替換過的單元格:
string searchText = "舊產品代碼";
string replaceText = "新產品代碼";
// 查找目標文本
CellRange[] foundRanges = worksheet.FindAllString(searchText, false, false);
if (foundRanges.Length > 0)
{
Console.WriteLine($"正在替換 {foundRanges.Length} 處 '{searchText}'...");
foreach (CellRange range in foundRanges)
{
range.Text = replaceText;
range.Style.Color = Color.LightGreen;
Console.WriteLine($" - 已將 {range.RangeAddressLocal} 替換為 '{replaceText}'。");
}
}
else
{
Console.WriteLine($"未找到 '{searchText}'。");
}
如果只想替換單元格中的部分文本,可以使用 TextPartReplace() 方法:
// 假設 A1 的內容為 "Hello World"
worksheet.Range["A1"].TextPartReplace("World", "Spire");
Console.WriteLine($"A1 新內容: {worksheet.Range["A1"].Text}"); // 輸出:Hello Spire
保存修改結果
完成查找與替換後,需要保存 Excel 文件。可以保存為新文件,也可以覆蓋原文件:
// 保存為新文件
workbook.SaveToFile("Modified_SampleData.xlsx", ExcelVersion.Version2016);
Console.WriteLine("文件已保存為 Modified_SampleData.xlsx");
// 釋放資源
workbook.Dispose();
替換結果演示
運行上述代碼後,將生成一個名為 Modified_SampleData.xlsx 的文件,替換前後內容如下:
關鍵類與方法總結
為了更直觀地理解本文示例所用的核心 API,以下整理了常見類、方法與屬性,供快速參考:
| 類 / 屬性 / 方法 | 説明 |
|---|---|
Workbook |
Excel 工作簿對象,用於加載、保存和管理多個工作表。 |
Worksheet |
工作表對象,代表 Excel 中的單個工作表。 |
CellRange |
單元格範圍對象,用於表示單個單元格或一組單元格。 |
Workbook.LoadFromFile() |
從指定路徑加載 Excel 文件。 |
Workbook.SaveToFile() |
將工作簿保存為指定文件,可指定 Excel 版本。 |
Worksheet.FindAllString() |
在工作表中查找指定文本,支持大小寫、全字匹配和正則表達式。 |
CellRange.Text |
獲取或設置單元格文本內容。 |
CellRange.Style.Color |
設置單元格的背景顏色,用於高亮顯示查找或替換結果。 |
CellRange.TextPartReplace() |
替換單元格中部分字符串,而不是整個內容。 |
總結
本文介紹瞭如何使用 C# 與 Spire.XLS for .NET 在 Excel 中實現高效的查找與替換操作。通過 FindAllString() 可以靈活查找單元格內容,TextPartReplace() 則支持局部替換。結合實際業務表格數據,開發者可以輕鬆擴展此功能,例如批量替換產品編碼、更新庫存信息或生成規範化報表。藉助自動化方式處理 Excel,不僅節省時間,還能有效減少人工錯誤,提升整體數據處理質量。