详细介绍:使用 C# 设置 Excel 单元格数据验证

news/2025/10/3 22:15:13/文章来源:https://www.cnblogs.com/lxjshuju/p/19125091

在日常报表开发中,Excel 的数据准确性和可控性与格式美观同样重要。通过合理设置数据验证,可以防止输入错误、约束填报规则,从而提升数据的可靠性和规范性。

相比手动设置验证规则,使用 C# 程序自动化生成 Excel 数据验证 不仅能提高效率,还能保证规则统一。本文演示如何在 同一个工作表中 设置 下拉列表、数值范围、日期区间、文本长度、自定义公式和输入提示,并结合实际业务场景帮助你理解数据验证的作用。

本文使用的方法基于 Free Spire.XLS for .NET。安装方式(NuGet)如下:

Install-Package FreeSpire.XLS

1. 初始化工作簿和工作表

using Spire.Xls;
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "员工信息录入";

操作说明
这里新建了一个 Excel 文件并获取第一个工作表,命名为“员工信息录入”。所有验证规则都会集中展示在这个表中,保证操作有条理。


2. 下拉列表验证(部门选择)

在实际业务中,员工部门字段通常是固定的几个选项,例如“人事部”“财务部”“技术部”“市场部”。通过下拉列表验证,可以避免用户随意输入错误部门名称。

// 部门列表
sheet.Range["A1"].Text = "可选部门:";
sheet.Range["A2"].Text = "人事部";
sheet.Range["A3"].Text = "财务部";
sheet.Range["A4"].Text = "技术部";
sheet.Range["A5"].Text = "市场部";
// 员工录入区
sheet.Range["C1"].Text = "所属部门:";
CellRange deptCell = sheet.Range["C2"];
deptCell.DataValidation.AllowType = CellDataType.Formula;
// 设置下拉列表数据源
deptCell.DataValidation.DataRange = sheet.Range["A2:A5"];
// 也可直接设置列表内容
//deptCell.DataValidation.Values = ["人事部", "财务部", "技术部", "市场部"];
deptCell.DataValidation.ShowError = true;
deptCell.DataValidation.AlertStyle = AlertStyleType.Stop;
deptCell.DataValidation.ErrorTitle = "输入错误";
deptCell.DataValidation.ErrorMessage = "请从下拉列表中选择部门!";
// 输入提示
deptCell.DataValidation.ShowInput = true;
deptCell.DataValidation.InputTitle = "选择部门";
deptCell.DataValidation.InputMessage = "请从固定部门列表中选择。";

使用场景:避免部门名称不统一(如“技术”“技术部”混用)。

保存文件后效果:

C#设置Excel下拉列表数据验证


3. 数值验证(员工年龄)

员工年龄一般处于一定范围内,比如 18 到 60 岁。我们可以通过数值验证来限制输入。

sheet.Range["D1"].Text = "员工年龄 (18-60):";
CellRange ageCell = sheet.Range["D2"];
ageCell.DataValidation.AllowType = CellDataType.Integer;
ageCell.DataValidation.CompareOperator = ValidationComparisonOperator.Between;
ageCell.DataValidation.Formula1 = "18";
ageCell.DataValidation.Formula2 = "60";
ageCell.DataValidation.ShowError = true;
ageCell.DataValidation.ErrorMessage = "请输入 18 到 60 之间的整数!";

使用场景:保证录入的年龄数据合理,不会出现“5 岁员工”或“100 岁员工”的异常数据。

保存文件后效果:

C#设置Excel数字数据验证


4. 日期验证(入职日期)

企业通常要求员工入职日期在某一合理区间内。例如,录入表只允许选择 2023 年内的入职日期。

sheet.Range["E1"].Text = "入职日期 (2023年):";
CellRange hireDateCell = sheet.Range["E2"];
hireDateCell.DataValidation.AllowType = CellDataType.Date;
hireDateCell.DataValidation.CompareOperator = ValidationComparisonOperator.Between;
hireDateCell.DataValidation.Formula1 = "2023-01-01";
hireDateCell.DataValidation.Formula2 = "2023-12-31";
hireDateCell.DataValidation.ShowError = true;
hireDateCell.DataValidation.ErrorMessage = "请输入 2023 年的有效日期!";

使用场景:确保录入的入职时间不会超出考勤和人事系统设定范围。

保存文件后效果:

C#设置日期验证


5. 文本长度验证(工号)

工号通常有固定的位数,例如必须是 6 位字符。通过文本长度验证可以保证工号录入规范。

sheet.Range["F1"].Text = "工号 (6位):";
CellRange idCell = sheet.Range["F2"];
idCell.DataValidation.AllowType = CellDataType.TextLength;
idCell.DataValidation.CompareOperator = ValidationComparisonOperator.Equal;
idCell.DataValidation.Formula1 = "6";
idCell.DataValidation.ShowError = true;
idCell.DataValidation.ErrorMessage = "工号必须为 6 位字符!";

使用场景:避免工号录入长度不一导致系统识别异常。

保存文件后效果:

C#设置Excel文本长度数据验证


6. 自定义公式验证(工资 > 基本工资)

在工资表中,往往需要确保“实发工资”大于“基本工资”。我们可以使用自定义公式来实现这种逻辑。

sheet.Range["G1"].Text = "基本工资:";
sheet.Range["G2"].NumberValue = 4000;
sheet.Range["H1"].Text = "实发工资:";
CellRange salaryCell = sheet.Range["H2"];
salaryCell.DataValidation.AllowType = CellDataType.Formula;
salaryCell.DataValidation.Formula1 = "=H2>G2";
salaryCell.DataValidation.ShowError = true;
salaryCell.DataValidation.ErrorMessage = "实发工资必须大于基本工资!";

使用场景:避免出现“实发工资比基本工资还低”的错误数据。

保存文件后效果:

C#设置Excel公式数据验证


7. 保存文件

完成所有验证规则设置后,将结果保存为 Excel 文件:

// 自动对齐并保存
sheet.Range.Style.Font.FontName = "微软雅黑";
sheet.Range.Style.Font.Size = 12f;
sheet.Range.AutoFitColumns();
workbook.SaveToFile("DataValidation.xlsx", ExcelVersion.Version2016);

关键类与属性总结

类 / 属性说明
Workbook表示 Excel 工作簿,用于创建和保存文件
Worksheet表示 Excel 工作表,所有操作都基于该对象
CellRange表示单元格或单元格区域
DataValidation用于设置单元格数据验证规则
AllowType指定验证类型(整数、日期、文本长度、自定义公式等)
CompareOperator指定比较运算符(Between、Equal 等)
Formula1 / Formula2用于设置验证条件的参数值
ShowError是否显示错误提示
ErrorMessage错误提示信息
ShowInput是否显示输入提示
InputMessage输入提示信息

总结

本文通过 Spire.XLS for .NET 演示了如何在一张 Excel 工作表中设置多种类型的数据验证,包括下拉列表、数值范围、日期区间、文本长度、自定义公式以及输入提示。通过这些验证规则,可以有效减少错误输入,统一数据标准,提升报表质量。如果你正在开发人事、财务或其他需要批量数据录入的系统,使用 C# 自动化设置 Excel 数据验证会大大提高效率和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乐清人才网官方网站深圳建网站公司哪家好

原理图: 矩阵按键原理图: 实验板接口原理图: 得到对应图: 扫描按键原理: 按键的COLUMN1、2、3分别制0,每次只允许其中一个为0其他都是1(POW1和POW2正常状况为上拉),当有…

博客园实验1

1 // 打印一个字符小人 2 #include <stdio.h> 3 int main() 4 { 5 printf(" O \n"); 6 printf("<H>\n"); 7 printf("I I\n"); 8 return 0; 9 }View Code1 …

做盗版系统网站会不会php app网站建设

本书目录&#xff1a;点击进入 一、总结内容 二、习题 2.1 【选择题】以下Vue指令中&#xff0c;哪些指令具备简写方式&#xff1f; 2.2 【编程题】以下Vue指令中&#xff0c;哪些指令具备简写方式&#xff1f; &#xff1e; 效果 &#xff1e; 代码 一、总结内容 了解核…

arm汇编

寄存器 R0–R3 传参/返回值 R4–R11 局部变量(callee 保存) R12 临时 R13 SP 栈指针 R14 LR 返回地址 R15 PC 程序计数器 CPSR 标志位:N Z C V 常用指令 MOV Rd, #imm 立即数传送 ADD/ADC…

腾度网站建设品牌营销模式

前段时间&#xff0c;家里的iPad被家人误操作&#xff0c;导致iPad变成不可使用状态。自己折腾了半天&#xff0c;没有找到解决办法。没有办法&#xff0c;只好拿到手机维修店去修理,很快就修理好了.其实也很简单--就是对iPad进行了刷机操作。当然我也看到了刷机的方法。今天&a…

模型与分词器

当我们说“让AI理解人类语言”时,第一步是什么? 计算机是无法直接处理文本的,它需要数字。而模型与分词器就是完成“文本 → 数字 → 理解”这个神奇转换的关键二人组。本文将带你彻底理解这两者是什么、如何工作以…

云锵投资 2025 年 9 月简报

季报摘要本季度,量化基金策略业绩:15.48%,中,全国排名:8672/13200;平均 Beta:1.00; 本季度,量化股票策略业绩:25.05%,良,全国排名:4926/13200;平均 Beta:1.61; 本季度,量化期权策略业绩:21.71%(中性…

subclipse最新版本更新地址

subclipse最新版本更新地址 https://gitcode.com/gh_mirrors/upda/updates/tree/main/subclipse

详细介绍:C++与Open CASCADE中的STEP格式处理:从基础到高级实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

板子2

最近经常跑到以前代码里复制的东西,其实简单。 其中逆序对甚至vp的时候开始写了个挂的,和将军手搓了半天。 干脆放这里备用。 【模版】逆序对 【模版】笛卡尔树

简单网站开发项目实例企业网址是怎么写的

提起SimpleDateFormat类&#xff0c;想必做过Java开发的童鞋都不会感到陌生。没错&#xff0c;它就是Java中提供的日期时间的转化类。这里&#xff0c; 为什么说SimpleDateFormat类有线程安全问题呢&#xff1f;有些小伙伴可能会提出疑问&#xff1a;我们生产环境上一直在使用S…

网站搭建多少钱徐州百都网络非常好网站建设代码怎么导入图片

我一直不知道我在大家心目中的定位是什么&#xff0c;但我内心其实是把自己定义为一个『工具人』的。可能是因为我自己本身就是程序员&#xff0c;所以更能理解程序员的不易吧。所以&#xff0c;我尽量不写水文&#xff0c;只分享干货。就是希望大家看了能够有所收获&#xff0…

从DQN到Double DQN:分离动作选择与价值评估,解决强化学习中的Q值过估计问题

2015年DQN在Atari游戏上取得突破性进展,从此以后强化学习终于能处理复杂环境了,但没多久研究者就注意到一些奇怪的现象: Q值会莫名其妙地增长到很大,智能体变得异常自信,坚信某些动作价值极高。实际跑起来却发现这…

P9877/QOJ5069 Vacation

题意 给定长度为 \(n\) 的序列 \(a\) 和定值 \(c\),\(q\) 次操作,每次操作可以是单点修改,也可以是查询 \([l,r]\) 的所有区间长度 \(\le c\) 的子区间中区间和最大是多少。 \(c\le n\le 2\times10^5,q\le 5\times1…

CF1916G Optimizations From Chelsu

神仙题,神仙做法。点分治,假设路径的端点是 \(s\) 和 \(t\),那么 \(len\times g\) 就是 \((d_s+d_t)\times \gcd(v_s,v_t)\),其中 \(d\) 是到根链长度,\(v\) 是到根的 \(\gcd\)。 不妨设 \(d_s\ge d_t\),那么 \(…

详细介绍:微服务架构:基于Spring Cloud ,构建同城生活服务平台

详细介绍:微服务架构:基于Spring Cloud ,构建同城生活服务平台pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

【游记】北京师范大学讲课

【游记】北京师范大学讲课好久没有写长文了,今天很有兴致,写一篇罢! ccpc 网络赛前一天 去北京参加 tower research 举办的宣讲会。结束后和 yzf 找芈重山吃,海淀桥店人满为患,于是跑到了五道口,发现也是人满为患…

做网站 带宽 多少钱厦门国外网站建设公司哪家好

一、按键无效现象1.操作人员对机床操作时画面无反应现象M80/M800系列系统在使用键盘或触摸屏输入时&#xff0c;请勿连击键盘按键&#xff0c;输入一 次即可。键盘每向NC输入一次&#xff0c;NC系统需要计算一次&#xff0c;连续的多次重复输入&#xff0c;NC多次重复计算、显示…

网站建设步骤与时间表个人定做衣服店

提示:本文是我cuda教程部分代码和内容构成,严禁侵权! 文章目录 前言一、核函数index寻找1、3d grid与1d block索引2、1d grid, 2d block索引二、kernel函数实例三、性能优化(内存)四、原子操作五、流stream六、cuda处理nms编码七、cuda处理yolo算法输出编码八、cuda处理yolo…

房产交易网站开发三网合一网站源码下载

本系列第三篇文章&#xff0c;一起了解下PSR规范中的PSR4和PSR0规范首先恭喜大家&#xff0c;包括我自己&#xff0c;坚持到了现在。这篇文章之后&#xff0c;Composer的基础原理就清晰明了咯。也就是说&#xff0c;Composer所利用的正是spl_autoload_register()和PSR4规范&…