NPOI,给指定的excle创建个下拉框验证
NPOI,给指定的excle创建个下拉框验证
先大致看下效果吧

Nuget 搜索 NPOI,一般出来的第一个就是,安装NPOI基础环境
1 using NPOI.HSSF.UserModel;
2 using NPOI.OpenXmlFormats.Spreadsheet;
3 using NPOI.SS.UserModel;
4 using NPOI.SS.Util;
5 using NPOI.XSSF.UserModel;
6 using System;
7 using System.Collections.Generic;
8 using System.IO;
9 using System.Linq;
10 using System.Text;
11 using System.Threading.Tasks;
12 using System.Windows;
13 using System.Windows.Controls;
14 using System.Windows.Data;
15 using System.Windows.Documents;
16 using System.Windows.Input;
17 using System.Windows.Media;
18 using System.Windows.Media.Imaging;
19 using System.Windows.Navigation;
20 using System.Windows.Shapes;
21 using Path = System.IO.Path;
22
23 namespace NPOIDemo
24 {
25 /// <summary>
26 /// MainWindow.xaml 的交互逻辑
27 /// </summary>
28 public partial class MainWindow : Window
29 {
30 public MainWindow()
31 {
32 InitializeComponent();
33
34 var ff = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "服务器导入模板.xlsx");
35 CreateCellDropDownList(
36 ff,
37 new string[] { "1111", "2222", "3333", "4444" },
38 1, 4, 3, 3
39 );
40 System.Diagnostics.Process.Start(ff);
41 }
42
43 /// <summary>
44 /// 给指定的excle添加个下拉框验证
45 /// 备注:只能给未添加下拉框验证的添加,追加的情况不理想
46 /// </summary>
47 /// <param name="exclepath">excle路径</param>
48 /// <param name="dropDownConstraint">有效值集合</param>
49 public void CreateCellDropDownList(string exclepath, string[] dropDownlist, int firstRow = 0, int lastRow = 65535, int firstCol = 0, int lastCol = 256)
50 {
51 FileInfo file = new FileInfo(exclepath);
52 if (!file.Exists)
53 {
54 throw new FileNotFoundException("Excle文件不存在!");
55 }
56 if (dropDownlist == null || dropDownlist.Length == 0)
57 {
58 throw new ValueUnavailableException("有效值集合不允许为空!");
59 }
60 if (firstRow < 0 || lastRow < 0 || firstCol < 0 || lastCol < 0)
61 {
62 throw new IndexOutOfRangeException("索引值下标有误,从0开始!");
63 }
64 file.IsReadOnly = false;
65
66 IWorkbook workbook = null;
67
68 using (FileStream fs = File.Open(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
69 {
70 workbook = new XSSFWorkbook(fs);
71 }
72
73 ISheet sheet = workbook.GetSheetAt(0);
74
75 //设置默认值
76
77 for (int irow = firstRow, length = lastRow; irow <= length; irow++)
78 {
79 var row = sheet.GetRow(irow);
80 if (row == null)
81 {
82 continue;
83 }
84
85 for (int icell = firstCol, lengthc = lastCol; icell <= lengthc; icell++)
86 {
87 var cell = row.GetCell(icell);
88 if (cell == null)
89 {
90 continue;
91 }
92 cell.SetCellValue(dropDownlist.First());
93 }
94 }
95
96 //设置生成下拉框的行和列
97 CellRangeAddressList cellRegions = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
98
99 XSSFDataValidationHelper helper = new XSSFDataValidationHelper((XSSFSheet)sheet);
100 //启用下拉验证
101 var dropDownConstraint = helper.CreateExplicitListConstraint(dropDownlist);
102 IDataValidation dropDownValidation = helper.CreateValidation(dropDownConstraint, cellRegions);
103 sheet.AddValidationData(dropDownValidation);
104 sheet.ValidateMergedRegions();
105
106 var filenew = Path.Combine(file.DirectoryName, "filenew" + Path.GetExtension(file.Name));
107 using (FileStream fs = File.Open(filenew, FileMode.OpenOrCreate, FileAccess.ReadWrite))
108 {
109 workbook.Write(fs);
110 }
111
112 //因为暂时无法解决编辑的情况,所以迂回下,删除原始再覆盖下
113 File.Delete(file.FullName);
114 File.Move(filenew, file.FullName);
115 }
116 }
117 }
特此说明下:添加下拉框数据验证在已经存在的情况不理想,后面生成的会失效,暂时没找到解决办法,只有每次生成的数据操作一个空数据验证的模板
NPOI,给指定的excle创建个下拉框验证的更多相关文章
- 雷林鹏分享:jQuery EasyUI 表单 - 创建树形下拉框
jQuery EasyUI 表单 - 创建树形下拉框 树形下拉框(ComboTree)是一个带有下列树形结构(Tree)的下拉框(ComboBox).它可以作为一个表单字段进行使用,可以提交给远程服务 ...
- NPOI生成单元格(列)下拉框
客户提出能否将导入模板中,课程一列添加下拉框方便选择,不用手输入,以减少输入错误的可能性.于是在网上找了点代码,稍加整理后,形成了以下方案,代码部分: 一:生成课程列表,并放置在excel的单独she ...
- EasyExcel导出创建Excel下拉框
话不多说,上才艺. 下面代码粘贴即用 /** * * 导出表格带下拉框 */ @GetMapping("exportBox") public void export(HttpSer ...
- JQuery打造下拉框联动效果
做联动效果,若是用纯JavaScript来做,往往须要辅助页面保存须要刷新的结果集,然后渲染到原页面.考虑将须要动态刷新的内容自己主动拼接到前一个下拉框之后,当前一个下拉框onchange后,同级的后 ...
- 下拉框 JComboBox,文本框JTextField
1. 下拉框 JComboBox //导入Java类 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEven ...
- 雷林鹏分享:jQuery EasyUI 表单 - 格式化下拉框
jQuery EasyUI 表单 - 格式化下拉框 本教程向您展示如何创建一个简单的下拉框(Combobox),让它在下拉框中显示图片项.您可以在下拉框(combobox)上使用 formatter ...
- android实现下拉框(spinner),自己定义大小颜色背景位置,去掉默认样式黑边
1. 实现最简单的spinner xml文件,有一个TextView,一个Spinner: <RelativeLayout xmlns:android="http://schemas. ...
- 自定义SWT控件二之自定义多选下拉框
2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...
- 纯原生javascript下拉框表单美化实例教程
html的表单有很强大的功能,在web早期的时候,表单是页面向服务器发起通信的主要渠道.但有些表单元素的样式没办法通过添加css样式来达到满意的效果,而且不同的浏览器之间设置的样式还存在兼容问题,比如 ...
- s:select下拉框validation验证
S:select下拉框验证: <td colspan="5"> <s:select name="vo.typeVO.corp" list=&q ...
随机推荐
- P1787 [入门赛 #22]非众数 Hard Version 题解
P1787 [入门赛 #22]非众数 Hard Version 题解 原题传送门 这里对 pjh0625 的题解进行了详细解释 1. 读题 题目要求计算给定字符串中非众数子串的数量. 非众数子串 的定 ...
- 天翼云加速落地紫金DPU实践应用,让算力供给更高效!
近日,以"智驱创新·芯动未来"为主题的第三届DPU峰会在北京成功举办.会上,天翼云凭借紫金DPU在架构革新.算力释放.场景落地等多方面的成果,荣膺"2023芯星品牌奖&q ...
- AI工具推荐——open-interpreter
前言 Open Interpreter 是一个能让大型语言模型在你本地电脑上运行代码的工具. 简单来说: 它提供了一个类似于 ChatGPT 的自然语言界面,让你能通过代码与电脑互动. 你可以用它来: ...
- 如何在M芯片的Mac上爽玩原神
[热点速递]苹果震撼发布全新M4 Mac mini,国补福利下惊喜价仅约3500元!这不仅是一次办公体验的全新升级,更是对高效能与性价比完美融合的一次致敬.想象一下,以如此亲民的价格,拥抱苹果标志性的 ...
- shell脚本sed命令
Sed 是一个脚本型的编译器,全称StreamEDitor,即流编辑器是非交互式的编辑器 sed 原理简析sed 以行为处理单位,每次从标准输入/文本获取一行信息,存储到其" 模式空间 &q ...
- 通讯录管理系统(C++基础知识实现)
通讯录管理系统 描述:本人C++小白一枚,正在学习C++基础知识,给大家分享一款使用C++基础知识实现的通讯录管理系统,一起努力进步,大佬轻点喷. 1. 知识点 (1) 预处理器指令 (#includ ...
- 如何在ubuntu[linux] 上用docker安装Sqlserver
本次按照目前最新版本Sqlserver2022进行记录 先决条件 任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本. 有关详细信息,请参阅 Install Docker(安 ...
- 用于敏捷开发的最佳免费 UML 工具 2022
Table of Contents hide 1 最好的在线免费 UML图工具 2 免费的 UML Visual Paradigm 在线平台 3 其他福利 4 用于正式和大规模可视化建模的 Vis ...
- 数字先锋 | 天翼云xDeepSeek,赋能东莞开启智慧政务新篇章!
人工智能浪潮奔涌 DeepSeek堪称"全能战士" 在各行各业疯狂"上分" 特别是在政务领域 其以强大的智能问答 公文写作.数据分析等能力 为政务服务按下了&q ...
- vue - [02] 安装部署
Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面. 001 || 通过CND快速开始 只需要在HTML文件中引入VUE的CDN链接即可 (1)创建HTML文件 <!DOC ...