npoi的下拉框操纵 以及数据读取 以及下拉框字符超过255的解决方法 不需要高版本excel

基础的创建 以及将数据存入其中就不写了  直接开始正文

string[] Nunarry = dt2.AsEnumerable().Select(d => d.Field<string>("Text")).ToArray();
//下拉框数据源 这里我是从一个datatable取到的
NPOI.SS.Util.CellRangeAddressList regions = new NPOI.SS.Util.CellRangeAddressList(1, 65535, 1, 1);
//行.最大数量 列,控制你要的下拉框位置。
DVConstraint constraint = DVConstraint.CreateFormulaListConstraint("Nunarry");
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet1.AddValidationData(dataValidate);
//绑定数据源 并且填充。 这样便完成了一个下拉框的创建
如果是xssf的话格式会有些变动 不过设置约束还是一样的 如下
//XSSFDataValidationHelper helper = new XSSFDataValidationHelper((XSSFSheet)sheet1);
            //XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(Nunarry);
            //IDataValidation dataValidate = helper.CreateValidation(constraint, regions);  
            //sheet1.AddValidationData(dataValidate);
然后如果你用的xssf格式那么最后在导出时 最好重写一个文件流 如下
 public class NpoiMemoryStream : MemoryStream
        {
            public NpoiMemoryStream()
            {
                AllowClose = true;
            }

            public bool AllowClose { get; set; }

            public override void Close()
            {
                if (AllowClose)
                    base.Close();
            }  
        }
不然可能会出现无法访问已经被关闭的文件流的错误 
hssf导出为
System.IO.MemoryStream ms = new System.IO.MemoryStream();
            //var ms = new NpoiMemoryStream();
            //ms.AllowClose = false;
            book.Write(ms);
            //ms.Flush();
            ms.Seek(0, SeekOrigin.Begin);
            //ms.AllowClose = true;
            //return File(ms, "application/vnd.ms-excel", strdate + "aaa.xlsx");
            return File(ms, "application/octet-stream", strdate + "aaa.xls");
注释掉的则是xssf下应该写的 。导出xlsx需要手动控制。

然后就是重点 下拉框超过255的解决方法  也是从网上大神借鉴的
新建一个sheet
NPOI.SS.UserModel.ISheet sheet2 =book.CreateSheet("sheet2");
NPOI.SS.UserModel.IRow row2 = sheet2.CreateRow(0);
将想要展示的数据写入sheet2中 记得弄成list或者在取的时候让其只有一列 虽然后面指定数据源时也能指定 但是当 数据过多的时候会很慢。
然后操纵如下
IName range=book.CreateName();
range.RefersToFormula = "sheet2!$A$1:$A$"+dt2.Rows.Count;
//dt2是我的取到的数据 然后我的下拉框的数据自然是从第一行到数据的最后一行
range.NameName = "dicRange";//方便后面指定数据源
之后的步骤则都与之前相同 不过讲我之前绑定的 数据中的数组改为重新命名的name。
之前在网上找资料时发现大部分都是 HSSFNAME range = 。。。如此 然后我这么写后遇到了 无法将iname转换的情况 看了下可能是npoi版本造成的差异
如果你的是高版本的npoi 那么可以如下 
HSSFName range=book.CreateName();
range.Refence="sheet2!$A$1:$A$"+dt2.Rows.Count;

第一篇博客 排版问题很大 用的不是很习惯请谅解 .net 新人一枚 同时也会一点js













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NPOI是一个基于.NET平台的开源库,用于操作Office文档,包括读取、删除、修改和写入Excel数据。下面是使用NPOI进行Excel数据操作的一些示例代码: 读取Excel数据: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 打开Excel文件 using (var file = new FileStream("path/to/excel.xlsx", FileMode.Open, FileAccess.Read)) { // 创建工作簿 var workbook = new XSSFWorkbook(file); // 获取第一个工作表 var sheet = workbook.GetSheetAt(0); // 遍历行和列 for (int rowIndex = 0; rowIndex <= sheet.LastRowNum; rowIndex++) { var row = sheet.GetRow(rowIndex); if (row == null) continue; for (int colIndex = 0; colIndex < row.LastCellNum; colIndex++) { var cell = row.GetCell(colIndex); if (cell == null) continue; // 处理单元格数据 .WriteLine(cell.ToString()); } } } ``` 删除Excel数据: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 打开Excel文件 using (var file = new FileStream("path/to/excel.xlsx", FileMode.Open, FileAccess.ReadWrite)) { // 创建工作簿 var workbook = new XSSFWorkbook(file); // 获取第一个工作表 var sheet = workbook.GetSheetAt(0); // 删除指定行 var rowIndexToDelete = 5; var rowToDelete = sheet.GetRow(rowIndexToDelete); if (rowToDelete != null) { sheet.RemoveRow(rowToDelete); } // 保存修改 workbook.Write(file); } ``` 修改Excel数据: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 打开Excel文件 using (var file = new FileStream("path/to/excel.xlsx", FileMode.Open, FileAccess.ReadWrite)) { // 创建工作簿 var workbook = new XSSFWorkbook(file); // 获取第一个工作表 var sheet = workbook.GetSheetAt(0); // 修改指定单元格的数据 var rowIndexToModify = 2; var colIndexToModify = 3; var rowToModify = sheet.GetRow(rowIndexToModify); if (rowToModify != null) { var cellToModify = rowToModify.GetCell(colIndexToModify); if (cellToModify != null) { cellToModify.SetCellValue("New Value"); } } // 保存修改 workbook.Write(file); } ``` 写入Excel数据: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 创建工作簿 var workbook = new XSSFWorkbook(); // 创建工作表 var sheet = workbook.CreateSheet("Sheet1"); // 创建行和单元格,并写入数据 for (int rowIndex = 0; rowIndex < 5; rowIndex++) { var row = sheet.CreateRow(rowIndex); for (int colIndex = 0; colIndex < 5; colIndex++) { var cell = row.CreateCell(colIndex); cell.SetCellValue($"Row {rowIndex + 1}, Col {colIndex + 1}"); } } // 保存Excel文件 using (var file = new FileStream("path/to/excel.xlsx", FileMode.Create, FileAccess.Write)) { workbook.Write(file); } ``` 以上是一些使用NPOI进行Excel数据操作的示例代码,你可以根据自己的需求进行相应的修改和扩展。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值