Code Bye

读取excel文件解决空行的问题

  最近做个东西需要读取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 对象框架来说,你应该首先选择行结束,然后再读取。例如
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一下,把空行过滤掉

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明读取excel文件解决空行的问题