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

一:生成课程列表,并放置在excel的单独sheet中。

IList<CourseCodeInfo> list = StudentBus.GetSubjectInterface().GetList(0, "", "Name");

var CourseSheetName = "Course";
var RangeName = "dicRange"; ISheet CourseSheet = workbook.CreateSheet(CourseSheetName); CourseSheet.CreateRow(0).CreateCell(0).SetCellValue("课程列表(用于生成课程下拉框,请勿修改)"); for (var i = 1; i < list.Count; i++)
{
CourseSheet.CreateRow(i).CreateCell(0).SetCellValue(list[i-1].Name);
}

二:生成一个列表引用区域,方便需要的的地方加载这个引用区域。

IName range = workbook.CreateName();
range.RefersToFormula = string.Format("{0}!$A$2:$A${1}",CourseSheetName,list.Count.ToString());
range.NameName = RangeName;
三:引用以上生成的引用区域。
 
CellRangeAddressList regions = new CellRangeAddressList(1, 65535,4, 4);
DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(RangeName);
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet.AddValidationData(dataValidate);

备注:代码区域二和网上的代码略有不同,网上代码一般为:

HSSFName range = hssfworkbook.CreateName();
range.Reference = "ShtDictionary!$A1:$A3";
range.NameName = "dicRange";

但在实际编写代码过程中,发现Hssfworkbook.CreateName()生成的是IName,无法直接转换为HSSFName,于是改为:

IName range = workbook.CreateName();
 range.RefersToFormula = string.Format("{0}!$A$2:$A${1}",CourseSheetName,list.Count.ToString());
 range.NameName = RangeName;

运行也正常,奇怪为什么和网上代码不同呢?估计与NOPI版本有关吧。

后记:近期有园子里的朋友问有无源代码,我就将原来的代码找出来,贴在下面,供各位参考(代码写的久远,请勿见笑)。

        public ActionResult GetExcelTeacherClassTemplate()
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("sheet1"); IRow row = sheet.CreateRow();
row.CreateCell().SetCellValue("姓名");
row.CreateCell().SetCellValue("身份证号");
row.CreateCell().SetCellValue("年级");
row.CreateCell().SetCellValue("班级");
row.CreateCell().SetCellValue("课程");
row.CreateCell().SetCellValue("角色(班主任、单科老师)"); IRow row1 = sheet.CreateRow();
row1.CreateCell().SetCellValue("张峰");
row1.CreateCell().SetCellValue("");
row1.CreateCell().SetCellValue("小学六年级");
row1.CreateCell().SetCellValue("4班");
row1.CreateCell().SetCellValue("语文");
row1.CreateCell().SetCellValue("单科老师"); var ic = workbook.CreateCellStyle();
ic.DataFormat = HSSFDataFormat.GetBuiltinFormat("@"); sheet.SetDefaultColumnStyle(, ic); sheet.SetColumnWidth(, );
sheet.SetColumnWidth(, );
sheet.SetColumnWidth(, );
sheet.SetColumnWidth(, ); IList<CourseCodeInfo> list = StudentBus.GetSubjectInterface().GetList(, "", "Name");
var CourseSheetName = "Course";
var RangeName = "dicRange";
ISheet CourseSheet = workbook.CreateSheet(CourseSheetName);
CourseSheet.CreateRow().CreateCell().SetCellValue("课程列表(用于生成课程下拉框,请勿修改)");
for (var i = ; i < list.Count; i++)
{
CourseSheet.CreateRow(i).CreateCell().SetCellValue(list[i-].Name);
} IName range = workbook.CreateName();
range.RefersToFormula = string.Format("{0}!$A$2:$A${1}",CourseSheetName,list.Count.ToString());
range.NameName = RangeName;
//
CellRangeAddressList regions = new CellRangeAddressList(, ,, );
DVConstraint constraint = DVConstraint.CreateFormulaListConstraint(RangeName);
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet.AddValidationData(dataValidate); System.IO.MemoryStream ms = new System.IO.MemoryStream();
workbook.Write(ms);
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("教师授课模板.xls"));
Response.BinaryWrite(ms.ToArray());
workbook = null;
ms.Close();
ms.Dispose();
return null;
}

NPOI生成单元格(列)下拉框的更多相关文章

  1. NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)

    NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 ...

  2. java swing 中JTable实现指定单元格为下拉框

    利用自定义的CellEditor实现第四列第二行为下拉框,本列其余行为文本框 利用默认的DefaultCellEditor设置第五列整列为下拉框   package mypackage; import ...

  3. 【Excel】单元格的下拉框是怎么做的?

    如果我们希望将产品这一列的每个单元格都能选择 左侧的产品就好了,就像这样 这里使用的是"验证数据有效性"功能 在这里: 点击F,选择F列后,打开“数据验证”,如图,选择序列,选择来 ...

  4. C# Winform 中DataGridView 实现单元格输入下拉框功能

    https://blog.csdn.net/ad13adsa/article/details/82108969 private void dataGridViewX1_EditingControlSh ...

  5. LibreOffice/Calc:单元格设置下拉菜单

     造冰箱的大熊猫,本文适用于LibreOffice Calc 5.1.6.2 + Ubuntu 16.04@cnblogs 2019/1/2 LibreOffice是一个类似Microsoft Off ...

  6. POI设置excel添加列下拉框

    POI在生成excel模板时需要为列添加下拉框,我写了两个方法. @ 方法一:适用任何情况,不受下拉框值数量限制.但是需要通过引用其它列值. 思路大概如下: 1.创建一个隐藏的sheet页,用于存放下 ...

  7. Java使用poi生成Excel,生成两种表格下拉框

    想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有: poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.j ...

  8. js生成tree形组织机构下拉框

    1.首先我们正常数据是如下所示: [ { id: 1, pid: 0, name: '公司组织' }, { id: 2, pid: 1, name: '总经办' }, { id: 3, pid: 1, ...

  9. Excel的单元格设置下拉选项并填充颜色

    如何在Excel的单元格中加入下拉选项   方法/步骤     第一步:打开excel文档,选中需加入下拉选项的单元格.      第二步:点击菜单中的“数据”->“数据有效性”->“数据 ...

随机推荐

  1. w3school一个学习编程的好地方!

    http://www.w3school.com.cn/index.html 每天过来学习几篇.

  2. JAVA https证书相关

    生成证书: keytool -genkey -alias cas -keyalg RSA -keystore  cas.key 导出证书: keytool -export -alias cas  -f ...

  3. 转: JSTL SQL标签库 使用

    SQL标签库 JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作.本章将详细介绍这些标签的功能和使用方法. SQL标签库从功能 ...

  4. 苹果IOS系统SVN命令 同样适用于linux系统

    1.将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn ...

  5. 一步步调试解决iOS内存泄漏

      虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄 ...

  6. jQuery.extend源码深层分析

    在网站的开发中,经常会自己写一些jQuery插件来方便使用,其中自然少不了一个关键的方法->jQuery.extend(),使用这个方法来扩展jQuery对象. 那么今天就来讲讲这个函数的实现原 ...

  7. SDR 研究

    最近终于买了一个RTL2832u 电视棒,可以软件无线电了 使用我的小米3开发板 (安卓6.0),直接在应用商店里搜索 "sdr",到豌豆荚中,就有“RTL驱动程序” 点击下载安装 ...

  8. HDU2222

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 注意: 1. keyword可以相同,因此计算时要累计:cur->num++. 2. 同一个keyw ...

  9. Ubuntu远程连接windows

    一般情况下都是使用windows系统,通过mstsc远程连接linux系统,但对于一些linuxer来说,有时候需要远程连接一下windows,最后采用的是rdesktop,一个非常好用的工具 sud ...

  10. HDU 1254

    http://acm.hdu.edu.cn/showproblem.php?pid=1254 暴搜,状态是四维的(箱子和人的坐标),向一个方向推箱子还要判断人能否走到推的位置,1A #include ...