在.net 下一般使用NPOI操作Excel相信大家都不陌生,但是本人在操作过程中遇到一个比较奇怪的问题,特写此博客记录与大家分享。

例子是使用Winform,点击按钮时弹出打开文件对话框,然后选择文件来读取Excel。

最开始代码时这样写的:

 private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog {Filter = "excel文件|*.xls"};
if (ofd.ShowDialog() == DialogResult.OK)
{
using (FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(fs);
ISheet sheet = workbook.GetSheetAt(); //总共有多少行
int lastRowNum = sheet.LastRowNum;
int firstRowNum = sheet.FirstRowNum; for (int i = firstRowNum + ; i <= lastRowNum; i++)
{
IRow row = sheet.GetRow(i);
if (row == null)
{
continue;
}
string name = row.Cells[]?.ToString(); if (string.IsNullOrEmpty(name))
{
//空行
continue;
} string birthplace = row.Cells[]?.ToString();
string major = row.Cells[]?.ToString();
string className = row.Cells[]?.ToString();
double height = row.Cells[].NumericCellValue;
double age = row.Cells[].NumericCellValue; Console.WriteLine($"name:{name},birthplace:{birthplace},major:{major},className:{className},height:{height},age:{age}"); }
}
}
}

然后Excel是这样的:

调试时,遇到错误:

监视变量i,看是循环到第几行:

这里是3,也就是第三行(标题除外),第三行的内容是这样的:

这里解释一下,这个表格使用了白色背景填充,然后前面三行(包括标题在内)使用了实线的细边框。

再在监视里输入代码row.Cells.Count,获取得到的结果是4,也就是第三行只有4“列”(这里列加了双引号)。明明就有6列,怎么会只有4列,于是再在监视里输入row.LastCellNum,得到的结果是6。

这里可以看出有6列,我们知道获取列有row.Cells[i] 或者是 row.GetCell(i) , 于是尝试在监视里输入row.GetCell(4),看是否会报错:

发现没有报错,而且“值“一栏是正确的列的内容。

于是将代码里row.Cells[i] 改成 row.GetCell(i) 的形式:

private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog {Filter = "excel文件|*.xls"};
if (ofd.ShowDialog() == DialogResult.OK)
{
using (FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(fs);
ISheet sheet = workbook.GetSheetAt(); //总共有多少行
int lastRowNum = sheet.LastRowNum;
int firstRowNum = sheet.FirstRowNum; for (int i = firstRowNum + ; i <= lastRowNum; i++)
{
IRow row = sheet.GetRow(i);
if (row == null)
{
continue;
}
string name = row.GetCell()?.ToString(); if (string.IsNullOrEmpty(name))
{
//空行
continue;
} string birthplace = row.GetCell()?.ToString();
string major = row.GetCell()?.ToString();
string className = row.GetCell()?.ToString();
double height = row.GetCell().NumericCellValue;
double age = row.GetCell().NumericCellValue; Console.WriteLine($"name:{name},birthplace:{birthplace},major:{major},className:{className},height:{height},age:{age}"); }
}
}
}

再次调试,没有报错,在输出窗口有以下的信息:

记录一次使用NPOI遇到的问题的更多相关文章

  1. NPOI读取Excel遇到的坑

    NPOI是POI的.NET版本.POI是用Java写成的库,能帮助用户在没有安装Office环境下读取Office2003-2007文件.NPOI在.NET环境下使用,能读写Excel/Word文件. ...

  2. c# 使用NOPI 操作Excel

    最近项目需要导出Excel,找来找去,微软有自己的Excel组件 using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;,但 ...

  3. c# NPOI 导出23万条记录耗时12秒

    先上测试代码: string connectionString = "Server=localhost;Initial Catalog=******;User ID=sa;Password= ...

  4. 记录NPOI使用方法

    DLL 下载地址:https://files.cnblogs.com/files/xujunbao/NPOI.rar using NPOI.HSSF.UserModel; using NPOI.SS. ...

  5. 一个NPOI导出到excel文件的范例记录

    '使用NPOI写入新创建的excel文件,导出文件: Private Sub Sub_WriteXls() Dim XlsBook As XSSFWorkbook Dim XlsSheet As XS ...

  6. .net core 基于NPOI 的excel导入导出类,支持自定义导出哪些字段,和判断导入是否有失败的记录

    #region 从Excel导入 //用法 //var cellHeader = new Dictionary<string, string>(); //cellHeader.Add(&q ...

  7. 通过NPOI操作Excel

    最近在做的一个项目中需要生成Excel,通过学习使用NPOI实现了相关需求,写了一个简便操作的类,记录如下: public class NPOIHelperForExcel { #region exc ...

  8. NPOI、MyXls、Aspose.Cells 导入导出Excel(转)

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导s出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你 ...

  9. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

随机推荐

  1. SpringBoot 自定义线程池,多线程

    原文:https://www.jianshu.com/p/832f2b162450 我们都知道spring只是为我们简单的处理线程池,每次用到线程总会new 一个新的线程,效率不高,所以我们需要自定义 ...

  2. Caused by: java.lang.ClassNotFoundException: Cannot find class:

    Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibat ...

  3. 用 tomcat 部署 Jenkins

    在tomcat 下面部署 Jenkins 版本 tomcat (7.0.94) +  jdk (7) + jenkins (2.46.3) 前两次没有部署成功,应该是 jdk 版本的问题, 如果不成功 ...

  4. macOS Catalina 的zsh升级

    MacOS最近做了一个大版本升级,这次升级中对开发者有个很大的更新是,模式的shell变成了zsh,官方提供了升级配置文档:https://support.apple.com/zh-cn/HT2080 ...

  5. c语言定义的几种易错的说明

    int p; //一个整数 int p [5]; //一个包含5个整数的数组 int * p; //指向整数的指针 int * p [10]; //一个包含10个整数指针的数组 int ** p; / ...

  6. Iptables不适用与socks协议吗?

    需求描述   现有一个台多公网IP服务器,用作于内网网关,通过NAT访问公网使用,要求不同的内网地址访问公网时使用不同的公网IP.可以简单理解为内网与公网IP进行一对一访问外网的映射. 服务器名称 I ...

  7. 云服务器使用: 购买域名,域名绑定IP

    有没有不知道域名是什么的,但是大家一定知道访问域名就是访问绑定在域名上的IP地址 域名有个好处就是一个域名可以绑定多个IP. 举个例子:百度的域名是https://www.baidu.com/ 然后咱 ...

  8. PATB1024科学计数法

    代码是部分正确,只得了13分还有两个测试点没有通过,不知道原因是啥,先不深究了,赶进度. 参考代码: #include<cstdio> #include<cstring> #i ...

  9. 每日一问:讲讲 Java 虚拟机的垃圾回收

    昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...

  10. 【Gamma】“北航社团帮”测试报告——小程序v3.0

    目录 测试计划.过程和结果 后端测试--单元测试与覆盖率 后端测试--压力测试 展示部分数据 平均数据 前端测试--小程序v3.0 新功能 各页面均可正常打开,跳转,回退 授权登录与权限检查 页面数据 ...