最近做个东西需要读取excel经过一些处理后存入数据库,计划使用NPOI来实现。发现了一个问题,即便excel表格中只是真实数据一行(除表头),NPOI 的sheet.PhysicalNumberOfRows 返回的却有很多行,好像将表格中的空行也算进去了,除了判断每个CELL为空外,有没有什么好的办法来判断空行呢? 大家多多交流一下
ISheet sheet = wk.GetSheetAt(0); //读取当前表数据 for (int j = 0; j <= sheet.PhysicalNumberOfRows; j++) //LastRowNum 是当前表的总行数 { IRow row = sheet.GetRow(j); //读取当前行数据 if (row != null) { for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数 { ICell cell = row.GetCell(k); //当前表格 if (cell != null) { sbr.Append(cell.ToString()+"**"); //获取表格中的数据并转换为字符串类型 } sbr.Append("--\r\n"); } }
解决方案
5
以个人经验来说,没有。只能靠判断关键字段能否有数据判断。
35
本人不用 npoi。
Excel的编程模型都是一致的,所以你可以去 Excel-Home 之类的论坛去先学习 vba for excel 编程,用excel自身“录制宏”,然后再学习使用其他开发平台操作它。
对于使用 .net 框架内置的原生 Excel 对象框架来说,你应该首先选择行结束,然后再读取。例如
Excel的编程模型都是一致的,所以你可以去 Excel-Home 之类的论坛去先学习 vba for excel 编程,用excel自身“录制宏”,然后再学习使用其他开发平台操作它。
对于使用 .net 框架内置的原生 Excel 对象框架来说,你应该首先选择行结束,然后再读取。例如
var st = workbook.Worksheets["本人的工作表"]; var start = st.Range["A12"]; var end = start.End[excel.XlDirection.xlDown]; var datas = (object[,])st.Range[start, end].Value2;
这样就把一列数据读入一个 object[,] 数组中。
再例如说写
var maxN = worksheet.Range["A1"].End[excel.XlDirection.xlDown].Row;
这就找到 A1 下边的数据结束行。
5
这个逻辑应该只能本人写呢,要是遇到的是复杂表格的话,每个的算法不一样呢,至于用什么方式无所谓
5
空行,读取出来,在filter一下,把空行过滤掉