使用HSSFWorkBook类实例化时,经常会遇到一个问题:HSSFWorkBook.isReadOnly。

  HSSFWorkBook.isReadOnly,貌似是异常,但它又不影响你正常导出Excel模板,但是必须注意的是,Excel模板的后缀名要为.xls,如果是.xlsx,那么就会出现打开文件错误,其实是Excel版本的兼容性问题。

  有时候HSSFRow sheetRow = (HSSFRow)sheet.CreateRow(index);创建新的row,接着使用sheetRow.CreateCell(2).SetCellValue(new HSSFRichTextString("字符串"));给每个cell赋值时,有可能遇到一个问题:

for (int i=0; i<ts.Days; i++){HSSFRow sheetRow = (HSSFRow)sheet.CreateRow(4+i);sheetRow.CreateCell(0).SetCellValue(new HSSFRichTextString(startDate.AddDays(i).ToString("yyyy-MM-dd")));//日期:2018-01-01sheetRow.CreateCell(1).SetCellValue(new HSSFRichTextString(startDate.AddDays(i).ToString("dddd")));//周一、周二......//必须添加上"",如果没有给空字符串,该cell为null,上传模板的时候,Cells的个数会根据user是否输入数据而有所改变sheetRow.CreateCell(2).SetCellValue(new HSSFRichTextString(""));sheetRow.CreateCell(3).SetCellValue(new HSSFRichTextString(""));sheetRow.CreateCell(4).SetCellValue(new HSSFRichTextString(""));}

注意,代码里头有3个cell的值设置为"",如果不设置,那么这3个cell根本就是null,再者,当用户把这个模板下载下来,有些cell输入值,有些cell没有输入,如:

test1 test2 test3 test4 test5
  test2   test4  
    test3    
test1       test5
         

那么在读取数据的时候,第一行的Cells.Count==5,第二、四行的Cells.Count==2,第三行的Cells.Count==1,第五行的Cells.Count==0。如果像代码里面设置空字符串,就不管后续用户有没有输入新数据,都可以确保取到相关位置的值,不会出现out of range的异常。

  使用GetCell(index)方法精确找位:

  有时候你需要将上传的excel表格的值显示在客户端,同时还要根据某几个cell值是否为空值,或者null来进行剔除,如果真出现不定量的值为null的Cell个数,显然用Cells[index]是不行的,上面提及到,Cells.Count不统计null的Cell格子,譬如对于上图的第二行,Cells[0]的值可能就是test2,如何精确找到对应Cell的位置呢?为了应对此情况,NPOI还提供了一个方法来精确寻找Cell格子,就是GetCell(index)。那么通过GetCell(index)可以精确找到相应位置,进而可以判断是否为空,是否为null,然后进行筛选,赋值等操作。

  使用StringCellValue方法,通常我们想要取出某个cell的值,可能会使用:

string resGp = sheet.GetRow(0).Cells[1].StringCellValue;
//但如果,sheet.GetRow(0).Cells[1]的值是一个数值,
//这里不是说数据类型,是形式上就是阿拉伯数字,
//那么调用StringCellValue就会抛出异常
//不调用StringCellValue,其效果一样,而且解决值为阿拉伯数字的情况
string resGp = sheet.GetRow(0).Cells[1];//上面一句虽然避免了异常问题,但是,如果想获取阿拉伯数值的数据,那就使用ToString()string resGp = sheet.GetRow(0).Cells[1].ToString();

转载于:https://www.cnblogs.com/SysoCjs/p/9789791.html

C#操作NPOI插件的HSSFWorkBook,常见的那些坑相关推荐

  1. jedis watch Java_jedis操作redis的几种常见方式总结

    Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...

  2. autocad完全应用指南_2020版AutoCAD软件+操作教程+插件合集,限时3天领

    如今CAD在建筑行业内非常火爆啊,它有自己独特的图库.模型素材等,需要的时候直接搜索所需要的内容,非常方便,深受广大建筑朋友们的喜欢,是学习CAD朋友们的超大福利!! 这份CAD软件+操作教程+上百的 ...

  3. 新手操作低客单价时常见的误区有哪些?

    刚开始为了引流,很多新手就选择低客单价的方式引流,所以踩了很多坑,那么新手操作低客单价时常见的误区有哪些呢? 1.盲目提升客单价 那么我们做低客单价的时候会存在这样一个误区,就是很多商家面对低客单的时 ...

  4. 遥感干货一览C—— ENVI SARscape 操作和讲解视频及常见的雷达卫星介绍与分享

    ** 遥感干货一览C-- ENVI SARscape 操作和讲解视频及常见的雷达卫星介绍与分享 资料来源: ** 一.ENVI SARscape A篇: 链接: https://pan.baidu.c ...

  5. html 字段数字格式转换,JS操作字符串转数字的常见方法示例

    本文实例讲述了JS操作字符串转数字的常见方法.分享给大家供大家参考,具体如下: JS中字符串转数字共三种方法 一.转换函数 JS提供了两个转换函数 parseInt() 换成整数 parseFloat ...

  6. pytorch统计矩阵非0的个数_PyTorch常见的12坑

    原标题:PyTorch常见的12坑 1. nn.Module.cuda 和 Tensor.cuda 的作用效果差异 无论是对于模型还是数据,cuda函数都能实现从CPU到GPU的内存迁移,但是他们的作 ...

  7. C#用NPOI插件对Excel数据的生成各类Chart的绑定/生成

    其实呢,NPOI的API里面没有对高级Chart图的开发接口,只有两个, 目前需要开发高级chart图,要换另一个思维 先在Excel中将数据和模板进行关联好,然后生成模板Chart图 然后只要在Ex ...

  8. python 字符串操作_python中字符串的常见操作(一)

    如有字符串: str1 = '192.168.1.1' str2 = 'asdfghjk' str3 = 'Asd fg hj ki' str4 = ' ' str5 = '' 以下是常见操作: # ...

  9. idea快捷操作_IDEA插件系列 快捷键神器!Key Promoter X

    今天起,会陆续给大家介绍一些IDEA的插件. 正所谓工欲善其事必先利其器,一款好的插件可以帮我们提升开发效率,或者提升使用IDEA的幸福感! 今天要推荐的第一款插件 Key Promoter X . ...

最新文章

  1. 对比四种爬虫定位元素方法,你更爱哪个?
  2. 装修公司事务繁杂,如何进行项目协作管理?
  3. 小程序协同工作和发布
  4. 解决MSSQL 2008不能用IP登录的问题
  5. 把HTML转成PDF的4个方案及实现方法
  6. ABAP和Java里的单例模式攻击
  7. 代码执行漏洞-无字母数字RCE-create_function()
  8. Server.Transfer 和 Response.Redirect 的用法
  9. 粒子文字特效css,CSS3 粒子效果
  10. Spring学习大杂烩(待续)
  11. 【转】CT基本概念(必须掌握)!!!!!!!!!!!!!!
  12. C++函数编译原理和成员函数的实现
  13. STM32 的RAM跑到哪里去了
  14. python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
  15. mybatis 报错. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #2 wit
  16. 凸优化读书笔记01(仿射集合、仿射组合,仿射包)
  17. 计算机条件格式设置方法,excel怎样利用条件格式把
  18. 米3换完屏信号无服务器,米3更新系统找不到云服务器
  19. 民生问题:房价,房贷,首付之间的暖昧关系(借首页一放,点醒一下各位兄弟)
  20. 水溶性Ag2S量子点表面修饰PEG-SH,发射1100-1500之间可根据需求定制-齐岳生物

热门文章

  1. linux数据流重定向
  2. 运维利器1-supervisor
  3. 1-1-2 交叉编译工具链
  4. Android自动化测试之MonkeyRunner
  5. 让linux的防活墙也像windows一样简单易用
  6. mongodb转实体对像_MongoDB 计划从“Data Sprawl”中逃脱
  7. Java机器学习库ML之六关于模型迭代训练的思考
  8. Java读取String分行字符串
  9. AMD Developer Center有关ATI Stream的内容
  10. 计算机网络管理考试价格,2021年计算机网络管理员考试模拟试题库和答案...doc...