使用C#控制Excel單元格編輯權(quán)限的操作方法
引言
在團(tuán)隊協(xié)作與數(shù)據(jù)流轉(zhuǎn)日益頻繁的今天,保護(hù) Excel 文檔中的關(guān)鍵數(shù)據(jù)(如公式、表頭、基礎(chǔ)參數(shù))免受意外修改或未經(jīng)授權(quán)的編輯,已成為保障數(shù)據(jù)完整性的基礎(chǔ)要求。
本文將系統(tǒng)介紹如何使用 Free Spire.XLS for .NET 庫,在 C# 中精準(zhǔn)鎖定 Excel 工作表的特定單元格、行或列,并提供關(guān)于工作表保護(hù)與權(quán)限設(shè)置的詳細(xì)講解。
1. 庫的選擇與安裝
1.1 安裝免費庫
Free Spire.XLS for .NET 是一個完全免費的 Excel 操作組件,無需安裝 Microsoft Office 即可創(chuàng)建、讀取、修改及保護(hù) Excel 文檔。推薦通過 NuGet 包管理器安裝:
在 Visual Studio 中打開“程序包管理器控制臺”,執(zhí)行:
Install-Package FreeSpire.XLS
或使用 .NET CLI:
dotnet add package FreeSpire.XLS
1.2 與其他 .NET Excel 庫的對比
| 庫 | 授權(quán) | 需安裝 Excel | 單元格格式/樣式 | 工作表保護(hù) & 密碼 | 鎖定特定單元格 |
|---|---|---|---|---|---|
| Free Spire.XLS for .NET | 完全免費 (查看限制) | ? 無需 | ? 全面支持 | ? 完整支持 | ? 精準(zhǔn)鎖定 |
| EPPlus (社區(qū)版) | 免費 (非商業(yè)),商業(yè)需授權(quán) | ? 無需 | ? 豐富 | ? 支持 | ? 支持 |
| NPOI | Apache 2.0 免費 | ? 無需 | ? 基本支持 | ?? 部分支持 | ?? 復(fù)雜 |
| Microsoft.Office.Interop.Excel | 需 Office 授權(quán) | ? 必須 | ? 完整 | ? 支持 | ? 支持 |
各庫各有千秋。若追求 精準(zhǔn)鎖定單元格與完善的保護(hù)能力,F(xiàn)ree Spire.XLS 提供了直觀的 API 且無需安裝 Excel。
2. 鎖定單元格核心原理
Excel 單元格鎖定機(jī)制的工作流程可概括為:
- 1?? 默認(rèn)狀態(tài):所有單元格
Style.Locked = true(但保護(hù)未激活時無效) - 2?? 解除全表鎖定:
sheet.Range.Style.Locked = false - 3?? 鎖定特定區(qū)域:
sheet.Range["A1:C5"].Style.Locked = true - 4?? 激活保護(hù):
sheet.Protect(password, SheetProtectionType.All)
關(guān)鍵認(rèn)知:
- Excel 工作表中所有單元格默認(rèn)
Locked = true,但此屬性僅在工作表保護(hù)生效后才實際限制編輯。 - 因此,正確的鎖定流程是:全表解鎖 → 局部鎖定 → 啟用保護(hù)。
下圖直觀展示了這一邏輯:

3. 基礎(chǔ)示例:鎖定特定單元格
以下代碼演示如何鎖定單個單元格和一個區(qū)域,并設(shè)置密碼保護(hù):
using Spire.Xls;
class Program
{
static void Main(string[] args)
{
// 1. 加載工作簿
Workbook workbook = new Workbook();
workbook.LoadFromFile("示例.xlsx");
// 2. 獲取第一個工作表
Worksheet sheet = workbook.Worksheets[0];
// 3. 解除工作表中所有單元格的鎖定
sheet.Range.Style.Locked = false;
// 4. 鎖定單元格 A2
sheet.Range["A2"].Style.Locked = true;
// 鎖定區(qū)域 C3:E9
sheet.Range["C3:E9"].Style.Locked = true;
// 5. 啟用工作表保護(hù),設(shè)置密碼 “123456”
sheet.Protect("123456", SheetProtectionType.All);
// 6. 保存文件
workbook.SaveToFile("鎖定單元格.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
執(zhí)行后,A2 單元格及 C3:E9 范圍內(nèi)的內(nèi)容將無法編輯,直至解除保護(hù)或輸入密碼。

4. 進(jìn)階:鎖定整行或整列
業(yè)務(wù)場景中常需鎖定標(biāo)題行(如第1行)或公式列(如第C列):
using Spire.Xls;
Workbook workbook = new Workbook();
workbook.LoadFromFile("示例.xlsx");
Worksheet sheet = workbook.Worksheets[0];
// 解鎖所有單元格
sheet.Range.Style.Locked = false;
// 鎖定第 1 行 (行索引從 1 開始)
sheet.Rows[0].Style.Locked = true;
// 鎖定第 3 列 (列索引從 0 開始,C 列為第 2 列)
sheet.Columns[2].Style.Locked = true;
sheet.Protect("password", SheetProtectionType.All);
workbook.SaveToFile("鎖定行列.xlsx", ExcelVersion.Version2013);
workbook.Dispose();
注意:
Rows和Columns集合的索引均為 從 0 開始。因此Rows[0]對應(yīng) Excel 第 1 行,Columns[2]對應(yīng)第 C 列。
5. 高級保護(hù)選項
5.1 使用 SheetProtectionType 精細(xì)控制權(quán)限
SheetProtectionType 枚舉決定了用戶在受保護(hù)工作表中允許執(zhí)行的操作??赏ㄟ^按位組合實現(xiàn)靈活授權(quán):
// 允許排序和篩選,但禁止修改內(nèi)容與結(jié)構(gòu)
sheet.Protect("password",
SheetProtectionType.Sorting | SheetProtectionType.Filtering);
常用枚舉值含義:
| 枚舉值 | 描述 |
|---|---|
SheetProtectionType.Content | 僅保護(hù)單元格內(nèi)容 |
SheetProtectionType.FormattingCells | 允許設(shè)置單元格格式 |
SheetProtectionType.FormattingColumns | 允許設(shè)置列格式 |
SheetProtectionType.FormattingRows | 允許設(shè)置行格式 |
SheetProtectionType.InsertingRows | 允許插入行 |
SheetProtectionType.DeletingRows | 允許刪除行 |
SheetProtectionType.Sorting | 允許排序 |
SheetProtectionType.Filtering | 允許篩選 |
SheetProtectionType.UsingPivotTables | 允許使用數(shù)據(jù)透 視表 |
SheetProtectionType.All | 啟用所有保護(hù)選項(默認(rèn)) |
SheetProtectionType.None | 禁止任何操作 |
5.2 創(chuàng)建允許編輯的區(qū)域(AllowEditRange)
即使啟用了工作表保護(hù),也可為特定用戶預(yù)留可編輯區(qū)域:
// 添加名為 "InputRange" 的可編輯區(qū)域,對應(yīng)單元格 B1
sheet.AddAllowEditRange("InputRange", sheet.Range["B1"]);
// 之后正常保護(hù)工作表
sheet.Protect("password", SheetProtectionType.All);
如此,用戶在受保護(hù)工作表中仍可編輯 B1 單元格,無需輸入密碼。
6. 擴(kuò)展:文件級加密與修改權(quán)限
除了工作表保護(hù),F(xiàn)ree Spire.XLS for .NET 還支持更高層次的文檔安全:
6.1 設(shè)置文檔打開密碼
workbook.Protect("openPassword");
6.2 設(shè)置修改權(quán)限密碼
workbook.SetWriteProtectionPassword("modifyPassword");
6.2 標(biāo)記為最終版本
通過自定義屬性添加標(biāo)記,提醒用戶此文檔為最終版:
workbook.CustomDocumentProperties.Add("_MarkAsFinal", true);
通過本文的詳細(xì)介紹與代碼示例,開發(fā)者應(yīng)當(dāng)能夠在 C# 項目中熟練運(yùn)用 Free Spire.XLS for .NET 實現(xiàn)精細(xì)化的 Excel 單元格保護(hù)。該庫在免費的前提下提供了足夠的日常辦公自動化能力,是處理 Excel 安全需求的一個可靠選擇。
以上就是C#控制Excel單元格編輯權(quán)限的操作方法的詳細(xì)內(nèi)容,更多關(guān)于C#控制Excel單元格編輯權(quán)限的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
WPF開發(fā)之UniformGrid和ItemsControl的應(yīng)用詳解
為了簡化開發(fā),WPF提供了UniformGrid布局和ItemsControl容器,本文以一個簡單的小例子,簡述如何在WPF開發(fā)中應(yīng)用UniformGrid和ItemsControl實現(xiàn)均勻的布局,希望對大家有所幫助2024-01-01

