C#使用NPOI读取电子表格Excel到DataGridView中
上篇博文中已经介绍了如何写入Excel文件。这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中。
从Excel中读取数据并保存至DataGridView中,Excel文件第一行为表格列标题,从第二行开始为数据。
需要了解的内容有:
- 引入命名空间;
- 创建文件流;
- 创建与文件对应的workbook;
- 获取sheet;
- 获取行row;
- 获取单元格cell;
- 获取单元格的值
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中的更多相关文章
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
- 根据NPOI 读取一个excel 文件的多个Sheet
大家都知道NPOI组件可以再你本地没有安装office的情况下来 读取,创建excel文件.但是大家一般都是只默认读取一个excel文件的第一个sheet.那么如果要读取一个excel 的所有shee ...
- NPOI读取操作excel
.读取using (FileStream stream = new FileStream(@"c:\客户资料.xls", FileMode.Open, FileAccess.Rea ...
- 将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取
Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: OpenFileDialog ofd ...
- java读取大容量excel之二(空格、空值问题)
最近在项目中发现,对于Excel2007(底层根本是xml) ,使用<java读取大容量excel之一>中的方式读取,若待读取的excel2007文件中某一列是空值,(注意,所谓的空值是什 ...
- C#使用NPOI将DataGridView内数据写入电子表格Excel
NPOI能够在用户没有安装office的情况下读写office文件,包括.xls/.doc/.ppt等类型的文件.本文介绍的是使用NPOI库内的函数读写Excel(.xls)内的内容.在使用NPOI之 ...
- 使用NPOI读取Excel数据到DataTable
如今XML文件的存储格式大行其道,可是也不是适用于全部情况,非常多单位的数据交换还是使用Excel的形式.这就使得我们须要读取Excel内的数据.载入到程序中进行处理.可是如何有效率的读取,如何使程序 ...
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- NPOI读取Excel帮助类,支持xls与xlsx,实现公式解析,空行的处理
NPOI读取Excel(2003或者2010)返回DataTable.支持公式解析,空行处理. /// <summary>读取excel /// 默认第一行为表头 /// </sum ...
随机推荐
- react create app ,nginx服务器配置
server{ listen 80; server_name www.domain.com domain.com; location ~* \.js$ { root /home/hard/Projec ...
- struts2中的ModelDriven使用
http://www.cnblogs.com/Topless/archive/2012/01/17/2324980.html 例子都为struts2中的文档例子 JSP提交数据: <s:fo ...
- VIM YCM 插件安装问题记录
参考:https://github.com/yangyangwithgnu/use_vim_as_ide https://github.com/Valloric/YouCompleteMe 根据 ht ...
- 使用svn diff的-r参数的来比较任意两个版本的差异
1 svn diff的用法1.1 对比当前本地的工作拷贝文件(working copy)和缓存在.svn下的版本库文件的区别 svn diff 1.2 对比当前本地的工作拷贝文件(working co ...
- 【leetcode刷题笔记】Combination Sum
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...
- android6.0 外部存储设备插拔广播以及获取路径(U盘)【转】
本文转载自:https://blog.csdn.net/zhouchengxi/article/details/53982222 这里我将U盘作为例子来说明解析. android4.1版本时U盘插拔时 ...
- /etc/init.d目录和/etc/rc.local脚本
一.关于/etc/init.d 如果你使用过Linux系统,那么你一定听说过init.d目录.这个目录到底是干嘛的呢?它归根结底只做了一件事情,但这件事情非同小可,是为整个系统做的,因此它非常重要.i ...
- ios 微信发送位置
@interface GroupReportViewController () <BMKMapViewDelegate,BMKLocationServiceDelegate,BMKGeoCode ...
- MHA高可用集群安装配置
4台服务器 192.168.136.128 主 192.168.136.129 从 192.168.136.130 从 192.168.136.131 管理服务器 一主2从,一管理,安装mysql并配 ...
- LINQ 学习路程 -- 查询操作 ThenBy & ThenByDescending
IList<Student> studentList = new List<Student>() { , StudentName = } , , StudentName = } ...