上篇博文中已经介绍了如何写入Excel文件。这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中。

从Excel中读取数据并保存至DataGridView中,Excel文件第一行为表格列标题,从第二行开始为数据。

需要了解的内容有:

  1. 引入命名空间;
  2. 创建文件流;
  3. 创建与文件对应的workbook;
  4. 获取sheet;
  5. 获取行row;
  6. 获取单元格cell;
  7. 获取单元格的值

1.引入命名空间:

本文操作所用到的NPOI中命名空间有:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

2.创建文件流:

使用FileStream创建文件流FileStream fs = new FileStream(文件路径, 文件操作方式, 文件读写权限);

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

3.创建于文件对应的workbook:

HSSFWorkbook workbook = new HSSFWorkbook(fs);

4.获取sheet:

ISheet sheet = workbook.GetSheetAt();//获取第一个工作表
ISheet sheet = workbook.GetSheet("Sheet1");//获取指定名称的工作表

5.获取行row:

IRow row = sheet.GetRow(i);  //获取i行

6.获取单元格cell:

ICell cell = row.GetCell(j);//获取j列

7.获取单元格的值:

获取单元格的值直接通过cell的方法cell.ToString()就可以了。

放个例子:

         //------------【函数:从Excel文件读取数据到表格控件】------------
//filePath为Excel文件路径名
//datagGridView要显示数据的表格控件
//------------------------------------------------
public static bool ReadFromExcel(string filePath, DataGridView dataGridView)
{
bool result = true; FileStream fs = null;//创建一个新的文件流
HSSFWorkbook workbook = null;//创建一个新的Excel文件
ISheet sheet = null;//为Excel创建一张工作表 //定义行数、列数
int rowCount = ;//记录Excel中的行数
int colCount = ;//记录Excel中的列数 //判断文件是否存在
if (!File.Exists(filePath))
{
result = false;
return result;
}
//创建指向文件的工作表
try
{
fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
workbook = new HSSFWorkbook(fs);//.xls
if (fs != null)
{
fs.Close();
fs.Dispose();
fs = null;
}
sheet = workbook.GetSheetAt();
if (sheet == null)
{
result = false;
return result;
}
rowCount = sheet.LastRowNum;
colCount = sheet.GetRow().LastCellNum;
dataGridView.Rows.Clear();
dataGridView.Columns.Clear();
for (int j = ; j < colCount; j++) //列循环
{
ICell cell = sheet.GetRow().GetCell(j);//获取列
dataGridView.Columns.Add(j.ToString()+ cell.ToString(), cell.ToString());
}
for (int i = ; i < rowCount; i++) //行循环
{
IRow row = sheet.GetRow(i); //获取i行
int index = dataGridView.Rows.Add();
colCount = row.LastCellNum;
for (int j = ; j < colCount; j++) //列循环
{
ICell cell = row.GetCell(j);//获取j列
dataGridView.Rows[index].Cells[j].Value = cell.ToString();
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
result = false;
return result;
}
return result;
}

如何将Excel内数据读取到DataGridView中,参考上篇博文:http://blog.csdn.net/nicewe/article/details/79620280

本文的源文件程序(Visual Studio 2017)与NPOI.DLL文件下载地址:https://download.csdn.net/download/nicewe/10296960

C#使用NPOI读取电子表格Excel到DataGridView中的更多相关文章

  1. DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)

    /// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...

  2. 根据NPOI 读取一个excel 文件的多个Sheet

    大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...

  3. NPOI读取操作excel

    .读取using (FileStream stream = new FileStream(@"c:\客户资料.xls", FileMode.Open, FileAccess.Rea ...

  4. 将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

    Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: OpenFileDialog ofd ...

  5. java读取大容量excel之二(空格、空值问题)

    最近在项目中发现,对于Excel2007(底层根本是xml) ,使用<java读取大容量excel之一>中的方式读取,若待读取的excel2007文件中某一列是空值,(注意,所谓的空值是什 ...

  6. C#使用NPOI将DataGridView内数据写入电子表格Excel

    NPOI能够在用户没有安装office的情况下读写office文件,包括.xls/.doc/.ppt等类型的文件.本文介绍的是使用NPOI库内的函数读写Excel(.xls)内的内容.在使用NPOI之 ...

  7. 使用NPOI读取Excel数据到DataTable

    如今XML文件的存储格式大行其道,可是也不是适用于全部情况,非常多单位的数据交换还是使用Excel的形式.这就使得我们须要读取Excel内的数据.载入到程序中进行处理.可是如何有效率的读取,如何使程序 ...

  8. excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)

    将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...

  9. NPOI读取Excel帮助类,支持xls与xlsx,实现公式解析,空行的处理

    NPOI读取Excel(2003或者2010)返回DataTable.支持公式解析,空行处理. /// <summary>读取excel /// 默认第一行为表头 /// </sum ...

随机推荐

  1. Springmvc注解启用

      http://www.blogbus.com/wanping-logs/235898637.html 使用注解的原因 最方便的还是启用注解 注解方便,而且项目中很流行. 配置文件尽量减少,主要使用 ...

  2. Navicat Premium试用期破解方法(转)

    转载网址https://blog.csdn.net/Jason_Julie/article/details/82864187 1.按步骤安装Navicat Premium,如果没有可以去官网下载:ht ...

  3. rails 常用方法

    bundle install --without production 不安装production中的gem ./configure && make && sudo m ...

  4. mysql 历史数据表迁移方案

    当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表.登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到. 在我们的 ...

  5. django配置文件环境分离后celery的启动方式整理

    django项目中,当配置文件分离时: 启动方式1: 硬编码写死在manage.py中: os.environ.setdefault("DJANGO_SETTINGS_MODULE" ...

  6. centos web+mysql服务器的安全

    今天闲来无事,拿来X-Scan-v3.3 来扫描自己的服务器,开放端口有22,80,443,3306:3306端口被扫出来,呵呵,那可不得了: 一,屏蔽扫描器扫出3306端口,因为web和数据库是在同 ...

  7. HTTPSQS(HTTP Simple Queue Service)消息队列

    HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...

  8. 仿联想商城laravel实战---3、前端页面搭建(什么情况下需要路由接参数)

    仿联想商城laravel实战---3.前端页面搭建(什么情况下需要路由接参数) 一.总结 一句话总结: 比如访问课程的时候,不同的课程(比如云知梦),比如访问不同的商品,比如访问不同的分类 //商品详 ...

  9. Saiku_学习_02_Schema Workbench 开发mdx和模式文件

    一.前言 saiku的查询都是通过cube来进行的.因此每当我们要进行一次多维度查询时,都要先修改xml.上传.重启才能生效,不仅效率低,还不利于学习和理解MDX和模式文件. 通过 workbench ...

  10. (转)Java 调用 C++ (Java 调用 dll)

    转自: http://www.cnblogs.com/baokang/p/4979243.html 因为要做点图形处理的项目,需要在Java中调用dll库,所以开发的第一步是研究了一下Java Jni ...