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创建个下拉框验证的更多相关文章

  1. 雷林鹏分享:jQuery EasyUI 表单 - 创建树形下拉框

    jQuery EasyUI 表单 - 创建树形下拉框 树形下拉框(ComboTree)是一个带有下列树形结构(Tree)的下拉框(ComboBox).它可以作为一个表单字段进行使用,可以提交给远程服务 ...

  2. NPOI生成单元格(列)下拉框

    客户提出能否将导入模板中,课程一列添加下拉框方便选择,不用手输入,以减少输入错误的可能性.于是在网上找了点代码,稍加整理后,形成了以下方案,代码部分: 一:生成课程列表,并放置在excel的单独she ...

  3. EasyExcel导出创建Excel下拉框

    话不多说,上才艺. 下面代码粘贴即用 /** * * 导出表格带下拉框 */ @GetMapping("exportBox") public void export(HttpSer ...

  4. JQuery打造下拉框联动效果

    做联动效果,若是用纯JavaScript来做,往往须要辅助页面保存须要刷新的结果集,然后渲染到原页面.考虑将须要动态刷新的内容自己主动拼接到前一个下拉框之后,当前一个下拉框onchange后,同级的后 ...

  5. 下拉框 JComboBox,文本框JTextField

    1. 下拉框 JComboBox //导入Java类 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEven ...

  6. 雷林鹏分享:jQuery EasyUI 表单 - 格式化下拉框

    jQuery EasyUI 表单 - 格式化下拉框 本教程向您展示如何创建一个简单的下拉框(Combobox),让它在下拉框中显示图片项.您可以在下拉框(combobox)上使用 formatter ...

  7. android实现下拉框(spinner),自己定义大小颜色背景位置,去掉默认样式黑边

    1. 实现最简单的spinner xml文件,有一个TextView,一个Spinner: <RelativeLayout xmlns:android="http://schemas. ...

  8. 自定义SWT控件二之自定义多选下拉框

    2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...

  9. 纯原生javascript下拉框表单美化实例教程

    html的表单有很强大的功能,在web早期的时候,表单是页面向服务器发起通信的主要渠道.但有些表单元素的样式没办法通过添加css样式来达到满意的效果,而且不同的浏览器之间设置的样式还存在兼容问题,比如 ...

  10. s:select下拉框validation验证

    S:select下拉框验证: <td colspan="5"> <s:select name="vo.typeVO.corp" list=&q ...

随机推荐

  1. 解决yarn打包时出现“FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory”的问题

    1.问题描述 我们在使用yarn命令对项目进行打包时,可能会出现如下的错误信息 "FATAL ERROR: Reached heap limit Allocation failed - Ja ...

  2. 洛谷B4038 [GESP202409 三级] 平衡序列 题解

    原题传送门 前言 当我以一种十分激动的心情参加了GESP的2024-9的三级考试时. 打开了此题,然后--自以为是的拿着暴力一顿乱写!然后TLE. 直到结束我还是没有想出来! (太菜了!!!) 以一种 ...

  3. Thymeleaf 嵌套循环

    <label th:each="role:${roles}" class="check-box"> <input th:each=" ...

  4. 还在手动更改SpringBoot的环境yml配置文件?老鸟带你可视化配置

    问题说明: 在SpringBoot开发时.SpringBoot的特性:'约定大于配置',我们只需要在**application.yml **配置当前的环境变量属与那个文件 比如测试环境 'applic ...

  5. cgroup与systemd: 通过src rpm获取systemd源代码,添加日志并使用rpmbuild重新打包

    问题起源 服务跑在富容器中.容器使用init进程作为一号进程,然后用systemd管理所有service. 在做一次升级时,nginx启动脚本有更新,原来是root拉起,现在进行了去root改造,使用 ...

  6. Spark - 面试题

    Spark是什么?答案:Apache Spark是一个快速.通用的大数据处理引擎,它提供了大规模数据集的内存计算和分布式计算能力.Spark可以处理各种数据源,如HDFS.Hive.Cassandra ...

  7. Kafka - [02] Kafka单机版部署

    Kafka是一个分布式的流处理平台. kafka主要是作为一个分布式的.可分区的.具有副本数的日志服务系性.高容错性.访问速度快.分布式等特性:具有高水平扩展 主要应用场景是:日志收集系统和分布式发布 ...

  8. python 打开yaml文件提示Empty test suite.

    网上方案: 我自己: 将test改为其他名称开头即可 读取成功

  9. 【CF VP记录】Codeforces Round 1008 (Div. 2)

    比赛链接 本文原文发布于博客园,如您在其他平台刷到此文,请前往博客园获得更好的阅读体验. 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18766 ...

  10. 市场教父 André Kostolany

    大家好,我是 沃伦·爱德华·巴菲特(Warren Edward Buffett,1930 年 8 月 30 日 - ) 查尔斯·托马斯·芒格(Charles Thomas Munger,1924 年 ...