使用C#控制Excel单元格编辑权限的操作方法

 更新时间:2026年05月11日 08:40:22   作者:Eiceblue  
在团队协作与数据流转日益频繁的今天,保护 Excel 文档中的关键数据免受意外修改或未经授权的编辑,已成为保障数据完整性的基础要求,本文将系统介绍如何使用 Free Spire.XLS for .NET 库,在 C# 中精准锁定 Excel 工作表的特定单元格、行或列

引言

在团队协作与数据流转日益频繁的今天,保护 Excel 文档中的关键数据(如公式、表头、基础参数)免受意外修改或未经授权的编辑,已成为保障数据完整性的基础要求。

本文将系统介绍如何使用 Free Spire.XLS for .NET 库,在 C# 中精准锁定 Excel 工作表的特定单元格、行或列,并提供关于工作表保护与权限设置的详细讲解。

1. 库的选择与安装

1.1 安装免费库

Free Spire.XLS for .NET 是一个完全免费的 Excel 操作组件,无需安装 Microsoft Office 即可创建、读取、修改及保护 Excel 文档。推荐通过 NuGet 包管理器安装:

在 Visual Studio 中打开“程序包管理器控制台”,执行:

Install-Package FreeSpire.XLS

或使用 .NET CLI:

dotnet add package FreeSpire.XLS

1.2 与其他 .NET Excel 库的对比

授权需安装 Excel单元格格式/样式工作表保护 & 密码锁定特定单元格
Free Spire.XLS for .NET完全免费 (查看限制)❌ 无需✅ 全面支持✅ 完整支持✅ 精准锁定
EPPlus (社区版)免费 (非商业),商业需授权❌ 无需✅ 丰富✅ 支持✅ 支持
NPOIApache 2.0 免费❌ 无需✅ 基本支持⚠️ 部分支持⚠️ 复杂
Microsoft.Office.Interop.Excel需 Office 授权必须✅ 完整✅ 支持✅ 支持

各库各有千秋。若追求 精准锁定单元格与完善的保护能力,Free Spire.XLS 提供了直观的 API 且无需安装 Excel。

2. 锁定单元格核心原理

Excel 单元格锁定机制的工作流程可概括为:

  • 1️⃣ 默认状态:所有单元格 Style.Locked = true(但保护未激活时无效)
  • 2️⃣ 解除全表锁定:sheet.Range.Style.Locked = false
  • 3️⃣ 锁定特定区域:sheet.Range["A1:C5"].Style.Locked = true
  • 4️⃣ 激活保护:sheet.Protect(password, SheetProtectionType.All)

关键认知:

  • Excel 工作表中所有单元格默认 Locked = true,但此属性仅在工作表保护生效后才实际限制编辑。
  • 因此,正确的锁定流程是:全表解锁 → 局部锁定 → 启用保护

下图直观展示了这一逻辑:

3. 基础示例:锁定特定单元格

以下代码演示如何锁定单个单元格和一个区域,并设置密码保护:

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;
        // 锁定区域 C3:E9
        sheet.Range["C3:E9"].Style.Locked = true;

        // 5. 启用工作表保护,设置密码 “123456”
        sheet.Protect("123456", SheetProtectionType.All);

        // 6. 保存文件
        workbook.SaveToFile("锁定单元格.xlsx", ExcelVersion.Version2016);
        workbook.Dispose();
    }
}

执行后,A2 单元格及 C3:E9 范围内的内容将无法编辑,直至解除保护或输入密码。

4. 进阶:锁定整行或整列

业务场景中常需锁定标题行(如第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();

注意:RowsColumns 集合的索引均为 从 0 开始。因此 Rows[0] 对应 Excel 第 1 行,Columns[2] 对应第 C 列。

5. 高级保护选项

5.1 使用 SheetProtectionType 精细控制权限

SheetProtectionType 枚举决定了用户在受保护工作表中允许执行的操作。可通过按位组合实现灵活授权:

// 允许排序和筛选,但禁止修改内容与结构
sheet.Protect("password", 
    SheetProtectionType.Sorting | SheetProtectionType.Filtering);

常用枚举值含义:

枚举值描述
SheetProtectionType.Content仅保护单元格内容
SheetProtectionType.FormattingCells允许设置单元格格式
SheetProtectionType.FormattingColumns允许设置列格式
SheetProtectionType.FormattingRows允许设置行格式
SheetProtectionType.InsertingRows允许插入行
SheetProtectionType.DeletingRows允许删除行
SheetProtectionType.Sorting允许排序
SheetProtectionType.Filtering允许筛选
SheetProtectionType.UsingPivotTables允许使用数据透 视表
SheetProtectionType.All启用所有保护选项(默认)
SheetProtectionType.None禁止任何操作

5.2 创建允许编辑的区域(AllowEditRange)

即使启用了工作表保护,也可为特定用户预留可编辑区域:

// 添加名为 "InputRange" 的可编辑区域,对应单元格 B1
sheet.AddAllowEditRange("InputRange", sheet.Range["B1"]);

// 之后正常保护工作表
sheet.Protect("password", SheetProtectionType.All);

如此,用户在受保护工作表中仍可编辑 B1 单元格,无需输入密码。

6. 扩展:文件级加密与修改权限

除了工作表保护,Free Spire.XLS for .NET 还支持更高层次的文档安全:

6.1 设置文档打开密码

workbook.Protect("openPassword");

6.2 设置修改权限密码

workbook.SetWriteProtectionPassword("modifyPassword");

6.2 标记为最终版本

通过自定义属性添加标记,提醒用户此文档为最终版:

workbook.CustomDocumentProperties.Add("_MarkAsFinal", true);

通过本文的详细介绍与代码示例,开发者应当能够在 C# 项目中熟练运用 Free Spire.XLS for .NET 实现精细化的 Excel 单元格保护。该库在免费的前提下提供了足够的日常办公自动化能力,是处理 Excel 安全需求的一个可靠选择。

以上就是C#控制Excel单元格编辑权限的操作方法的详细内容,更多关于C#控制Excel单元格编辑权限的资料请关注脚本之家其它相关文章!

相关文章

  • C#小程序15位转18位身份证号代码

    C#小程序15位转18位身份证号代码

    现在我们使用的都是18位身份证号,而以前都是15位身份证号,而如何将15位身份证号转18位身份证号转换为18位身份证号呢?
    2013-02-02
  • C#深度优先遍历实现全排列

    C#深度优先遍历实现全排列

    这篇文章主要介绍了C#深度优先遍历实现全排列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • WPF开发之UniformGrid和ItemsControl的应用详解

    WPF开发之UniformGrid和ItemsControl的应用详解

    为了简化开发,WPF提供了UniformGrid布局和ItemsControl容器,本文以一个简单的小例子,简述如何在WPF开发中应用UniformGrid和ItemsControl实现均匀的布局,希望对大家有所帮助
    2024-01-01
  • c#程序定期把内存信息记录到log日志示例

    c#程序定期把内存信息记录到log日志示例

    这篇文章主要介绍了c#程序定期把内存信息记录到log日志示例,需要的朋友可以参考下
    2014-04-04
  • c# 生成随机时间的小例子

    c# 生成随机时间的小例子

    这篇文章介绍了c# 生成随机时间的小例子,有需要的朋友可以参考一下
    2013-08-08
  • c#中禁用windows的任务管理器的方法

    c#中禁用windows的任务管理器的方法

    这篇文章主要介绍了c#中禁用windows的任务管理器的方法,通过注册表实现禁用,需要的朋友可以参考下
    2014-06-06
  • C#实现自定义打印文字和图片的示例代码

    C#实现自定义打印文字和图片的示例代码

    本文主要介绍了C#实现自定义打印文字和图片的示例代码,C#中打印其实就是自己绘图+调用系统打印函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C#中的类继承详解

    C#中的类继承详解

    大家好,本篇文章主要讲的是C#中的类继承详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • C#实现在窗体上的统计图效果

    C#实现在窗体上的统计图效果

    这篇文章主要为大家详细介绍了C#实现在窗体上的统计图效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#执行DOS命令的方法

    C#执行DOS命令的方法

    这篇文章主要介绍了C#执行DOS命令的方法,涉及针对进程的调用以及系统DOS命令的使用,具有不错的实用价值,需要的朋友可以参考下
    2014-11-11

最新评论