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. 理解ABP的领域驱动设计

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 关于玩转ABP框架相关的文章,之前在博客园陆续写了<ABP vNext系列文 ...

  2. 任务调度器Azkaban(Azkaban环境部署)

    文章链接:https://www.cnblogs.com/liugp/p/16273966.html

  3. Netty高级使用与源码详解

    粘包与半包 粘包现象 粘包的问题出现是因为不知道一个用户消息的边界在哪,如果知道了边界在哪,接收方就可以通过边界来划分出有效的用户消息. 服务端代码 public class HelloWorldSe ...

  4. QT5笔记:3.手动撸界面和可视化托界面混合

    3.手动撸界面和可视化托界面混合 参考视频:https://www.bilibili.com/video/BV1AX4y1w7Nt 3.1 工具栏可以通过在UI界面右键选择添加工具栏 3.2 设置窗口 ...

  5. 2024.11.12随笔&联考总结

    前言 心情不好,因为考试时 T2T3 全看错题了,导致 T2 没做出来,T3 一份没得.然后下午打球眼镜架子坏了,回机房才发现被高二的盒了. 但还是稍微写一下总结吧. 总结 感觉我今天做题状态还行,思 ...

  6. sql---索引总结

    索引:是为了提高数据查询的效率 常见模型: 哈希表(以键值对key-value存储数据的结构) 适应场景:哈希表这种结构适用于只有等值查询的场景 思路:把值放在数组里,用一个哈希函数把key换算成一个 ...

  7. 【基础知识】回头看Maven基础

    版本 日期 修订人 描述 V1.0 2025/3/7 nick huang 创建文档 背景 项目过程中,对于Maven的pom.xml文件,很多时候,我通过各种参考.仿写,最终做出想要的效果. 但实际 ...

  8. JavaScript与jQuery基础入门到放弃

    JavaScript与jQuery基础入门到放弃 引言: - BOM 操作 - DOM 操作 - jQuery 类库 BOM 操作 BOM (Browser Object Model) 指浏览器对象模 ...

  9. [tldr]通过指令获取github仓库的单个文件的内容

    针对一个公开的github仓库,有些时候不需要clone整个仓库的内容,只需要对应的几个文件.但是直接通过网页点击下载文件很麻烦,在服务器上也不好这样操作. 因此,如何使用curl或者wget指令快速 ...

  10. composer init

    $ composer init Do not run Composer as root/super user! See https://getcomposer.org/root for details ...