IsMergedRegionCell(int cellIndex, int rowIndex,ISheet sheet,ref int firstRegionRow) 3 { 4 bool isMerged = false; 5 var regionLists = GetMergedCellRegion(sheet); (var cellRangeAddress in regionLists) 8 { 9 for (int i = cellRangeAddress.FirstRow; i <= cellRangeAddress.LastRow; i++) 10 { 11 if (rowIndex == i) 12 { 13 for (int j = cellRangeAddress.FirstColumn; j <= cellRangeAddress.LastColumn; j++) 14 { 15 if (cellIndex == j) 16 { 17 isMerged = true; 18 firstRegionRow = cellRangeAddress.FirstRow; 19 break; 20 } { 23 continue; 24 } 25 } 26 } { 29 continue; 30 } 31 } 32 } isMerged; 35 } List<CellRangeAddress> GetMergedCellRegion(ISheet sheet) 39 { 40 int mergedRegionCellCount = sheet.NumMergedRegions; 41 var returnList = new List<CellRangeAddress>(); (int i = 0; i < mergedRegionCellCount; i++) 44 { 45 returnList.Add(sheet.GetMergedRegion(i)); 46 } returnList; 49 }
博主只查阅到NPOI有sheet所有合并区域属性,以及获取某合并区域合并坐标方法...故做了此方法来做判断
2.第6-16行则是在获取合并单元格值,具体思路是:
合并坐标起始行不等于当前行,若等则代表有列合并(已经是空值),而我们暂不对列合并做值的特殊处理
resultIndex是计算该合并单元格值已被读取到DTO中的索引
oldModel是获得含有该合并单元格值的数据对象
这样,我们就成功的读取到了左合并单元格的数据,在入库时稍作处理即可得到我们想要的“水位.潮汐性质”数据字段。
至此,我们已经完成了绝大部分excel表格模板的解析工作。
上述代码如有任何不对之处,欢迎指出,一定虚心请教~~~
不过,博主的甲方特别难缠,最近又给了一个矩阵模板excel,让解析入库,还说有同样类型的模板很多个....
意思很明显,这尼玛又得加班加点的搞了...
模板样式如下:
出发城市、到达城市内容、个数不定,意思就是连表头内容都是不确定的....
还要求数据进库后,再能把筛选出来的数据按原模板顺序导出....
好吧,吐血中~~~如果博主下周还活着,请关注下一篇文章查看解决方案(为什么是下周呢?因为尼玛这周末是最后期限...)
原创文章,代码都是从自己项目里贴出来的。转载请注明出处哦,亲~~~