C#操作Excel(NPOI)
这两天需要读取Excel文件,网上找了找,发现NPOI用的是最多的,于是研究了一下。这里大概介绍一下。
首先,在NPOI中一个Excel文件对应了一个IWorkbook对象,Excel中的一个工作表对应了NPOI中的一个ISheet。
在Excel中有行的概念IRow,但是没有列,取而代之的是单元格ICell。
下面简单介绍一下NPOI读取写入Excel的方法,我这里用的是NPOI2.0版本的
http://pan.baidu.com/s/1qXJsWXm 这是下载地址。
也可以来这里http://npoi.codeplex.com/看NPOI的官方文档。如果有用Java的同学,可以用poi来操作方法都是一样的。
自offic2003之后,excel多了一种格式即xlsx格式,所以在引用NPOI时,需要把那几个dll全部引用,如果只引用ICSharpCode.SharpZipLib.dll和NPOI.dll 则只能读取xls格式的excel。
首先看一下如何向Excel 中写入:
//HSSF可以读取xls格式的Excel文件
IWorkbook workbook = new HSSFWorkbook();
//XSSF可以读取xlsx格式的Excel文件
//IWorkbook workbook = new XSSFWorkbook(); //Excel文件至少要有一个工作表sheet
ISheet sheet = workbook.CreateSheet("工作表");
//创建行
for (int i = ; i < ; i++)
{
IRow row = sheet.CreateRow(i); //i表示了创建行的索引,从0开始
//创建单元格
for (int j = ; j < ; j++)
{
ICell cell = row.CreateCell(j); //同时这个函数还有第二个重载,可以指定单元格存放数据的类型
cell.SetCellValue(i.ToString() + j.ToString());
}
} //表格制作完成后,保存
//创建一个文件流对象
using (FileStream fs = File.Open("test.xls", FileMode.OpenOrCreate))
{
workbook.Write(fs);
//最后记得关闭对象
workbook.Close();
} }
然后我们还是用这个excel文件来读取一下
//首先根据需要读取的文件创建一个文件流对象
using (FileStream fs = File.OpenRead("test.xls"))
{
IWorkbook workbook = null;
//这里需要根据文件名格式判断一下
//HSSF只能读取xls的
//XSSF只能读取xlsx格式的
if (Path.GetExtension(fs.Name) == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else if (Path.GetExtension(fs.Name) == ".xlsx")
{
workbook = new XSSFWorkbook(fs);
}
//因为Excel表中可能不止一个工作表,这里为了演示,我们遍历所有工作表
for (int i = ; i < workbook.NumberOfSheets; i++)
{
//得到当前sheet
ISheet sheet = workbook.GetSheetAt(i);
//也可以通过GetSheet(name)得到
//遍历表中所有的行
//注意这里加1,这里得到的最后一个单元格的索引默认是从0开始的
for (int j = ; j < sheet.LastRowNum + ; j++)
{
//得到当前的行
IRow row = sheet.GetRow(j);
//遍历每行所有的单元格
//注意这里不用加1,这里得到的最后一个单元格的索引默认是从1开始的
for (int k = ; k < row.LastCellNum; k++)
{
//得到当前单元格
ICell cell = row.GetCell(k, MissingCellPolicy.CREATE_NULL_AS_BLANK);
Console.Write(cell.StringCellValue+" ");
}
Console.WriteLine();
}
}
}
这就是读取完成后控制台显示的结果,和Excel文件中一模一样。
下一篇我们介绍一下如果将Excel文件导入到数据库中或者将数据库的文件导出到Excel里。
C#操作Excel(NPOI)的更多相关文章
- .Net操作Excel —— NPOI
近期的两个项目都有关于NPOI的功能,经过了一点学习,自己也摸索了一会,感觉还有点意思.现在将部分代码分享一下.一部分是C#代码,一部分是VB.Net的,懒得修改了,基本上都是从项目文件中copy出来 ...
- 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)
很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...
- C#通过NPOI操作Excel
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-post.html http://www.yuanjiaocheng.net/w ...
- NPOI操作EXCEL(六)——矩阵类表头EXCEL模板的解析
哈哈~~~很高兴还活着.总算加班加点的把最后一类EXCEL模板的解析做完了... 前面几篇文章介绍了博主最近项目中对于复杂excel表头的解析,写得不好,感谢园友们的支持~~~ 今天再简单讲诉一下另一 ...
- NPOI操作Excel辅助类
/// <summary> /// NPOI操作excel辅助类 /// </summary> public static class NPOIHelper { #region ...
- NPOI操作EXCEL(一)——npoi基础
去年项目有一个子模块需要解析上百张不一样的excel表格入库,当时用的NPOI,做了很久...也尝试想把代码分享到oschina,结果没坚持两篇就放弃了. 赶巧的是,昨天运营那边提出要录入一些基础数据 ...
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- [Solution] NPOI操作Excel
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
随机推荐
- ios--UIButton简单使用
//这里创建一个圆角矩形的按钮 UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; /* 注:能 ...
- 我的github代码添加
1.创建一个新的repository: echo "# backupVim" >> README.md git init git add README.md git c ...
- 3 Longest Substring Without Repeating Characters(最长不重复连续子串Medium)
题目意思:求字符串中,最长不重复连续子串 思路:使用hashmap,发现unordered_map会比map快,设置一个起始位置,计算长度时,去减起始位置的值 eg:a,b,c,d,e,c,b,a,e ...
- [Python笔记]第二篇:运算符、基本数据类型
本篇主要内容有:运算符 基本数据类型等 一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 6.身份运算 7.位运算 8.运算符优先级 二.基本数据类型 1.整数:int ...
- UvaLive 6661 Equal Sum Sets (DFS)
Let us consider sets of positive integers less than or equal to n. Note that all elements of a set a ...
- k-近邻算法理解
左图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四 ...
- poj 1364
http://poj.org/problem?id=1364 #include<cstdio> #include<cstring> #include<algorithm& ...
- 定时器:为 Windows 实现一个连续更新,高精度的时间供应器
原著:Johan Nilsson 翻译:lxhui 原文出处:MSDN Magazine March 2004(Timers...) 原代码下载: HighResolutionTimer.exe (4 ...
- 关于JavaScriptSerializer使用的问题
初学C#的同学们,你们有没有这样的问题:遇到不懂的问题,就到处搜索,好不容易搜索出来答案吧,却发现缺少引用,缺少引用就添加引用吧,结果在添加中找不到!是不是很恼火? 解决办法:查看项目的目标框架,如果 ...
- 关于开发板不能ping通外网IP
最近在做远程监控的项目,打算用开发板给一个网站发送数据包.不过发现开发板只能ping通同一局域网内的ip,外网的ip不能ping通.纠结了半天发现是网关没有设置的原因.下面来说说如何解决这个问题. 首 ...