C# Excel使用NPOI
程序处理excel使用using Microsoft.Office.Interop.Excel方式,运行程序需要电脑安装excel,而且excel版本还需要一样,使用起来不方便。使用NPOI不用电脑安装office.
下载地址:http://npoi.codeplex.com/
下载NPOI 2.2.1 binary package.zip,解压缩里面有Net20和Net40。我使用的Net40,把里面所有的dll添加引用。
读excel
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
private void ReadPatternExcel(string filePath,int sheetIndex)
{
IWorkbook workBook = null;
ISheet sheet;
try
{
FileInfo fileInfo = new FileInfo(filePath);
if(fileInfo.Exists)
{
FileStream fs = fileInfo.OpenRead();
switch (fileInfo.Extension)
{
//xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
case ".xls":
workBook = new HSSFWorkbook(fs);
break;
case ".xlsx":
workBook = new XSSFWorkbook(fs);
break;
default:
break;
}
fs.Close();//关闭文件流
} if(workBook!=null)
{
sheet = workBook.GetSheetAt(sheetIndex);
IRow headerRow = sheet.GetRow();
int colCount = headerRow.LastCellNum;//列数
//遍历
for(int i=sheet.FirstRowNum;i<=sheet.LastRowNum;i++)
{
Console.Write("row "+i.ToString()+" ");
NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
for(int j=row.FirstCellNum;j<row.LastCellNum;j++)
{
string data = row.GetCell(j).ToString();
Console.Write(data);
}
Console.WriteLine();
}
} }
catch(Exception e)
{
MessageBox.Show(e.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
workBook = null;
sheet = null;
} }
写入Excel
private void ExportToExcel()
{
SaveFileDialog saveFileDlg = new SaveFileDialog();
saveFileDlg.Filter = "Excel|*.xlsx|All file|*.*";
if (saveFileDlg.ShowDialog()==DialogResult.OK)
{
WriteExcel(saveFileDlg.FileName);
} } private void WriteExcel(string filePath)
{
IWorkbook workBook = null;
ISheet sheet = null;
FileStream fs=null;
try
{
workBook = new XSSFWorkbook();
sheet = workBook.CreateSheet("sheet0"); //设置列头
IRow row = sheet.CreateRow();//excel第一行设为列头
ICell cell = row.CreateCell();
cell.SetCellValue("Data");
cell = row.CreateCell();
cell.SetCellValue("Remark"); //添加数据
for(int rowIndex=; rowIndex < collapseDataGridView1.RowCount; rowIndex++)
{
row = sheet.CreateRow(rowIndex+);
cell = row.CreateCell();
cell.SetCellValue(collapseDataGridView1.Rows[rowIndex].Cells[].Value.ToString()); cell = row.CreateCell();
cell.SetCellValue(collapseDataGridView1.Rows[rowIndex].Cells[].Value.ToString());
} fs = File.OpenWrite(filePath);
workBook.Write(fs);
MessageBox.Show("导入excel完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
finally
{
workBook = null;
sheet = null;
if(fs!=null)
{
fs.Close(); } } }
C# Excel使用NPOI的更多相关文章
- ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)
网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的 ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)
很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...
- csharp: Export or Import excel using NPOI
excel 2003: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...
- .net excel利用NPOI导入oracle
1.链接数据库 引用System.Data.OracleClient: //数据库链接字符串 Data Source如:192.168.5.153:1521/orcl string linkStr ...
- C#操作Excel(NPOI)
这两天需要读取Excel文件,网上找了找,发现NPOI用的是最多的,于是研究了一下.这里大概介绍一下. 首先,在NPOI中一个Excel文件对应了一个IWorkbook对象,Excel中的一个工作表对 ...
- ASP.NET中的Excel操作(NPOI方式)
代码准备: 一:实体准备 代码如下: /// <summary> /// 一个能添加到将要导出到指定行的实体类型规范 /// data:{int StartColIndex ? 0, in ...
- EXCEL读写NPOI
1.第一步: 可以使用ExcelAutomation进行EXCEl文件的读写,但是需要电脑上安装EXCEL,对EXCEL版本有要求,速度慢,有安全性,并发性问题,不适合网站类项目. 第二种方法: NP ...
- NPOI操作Excel(一)--NPOI基础
用C#读取Excel的方法有很多中,由于近期工作需要,需要解析的Excel含有合并单元格以及背景色等特殊要求,故在网上查了一些关于读Excel的方法的优缺点,觉得NPOI能满足我的需要,所以搜索了一些 ...
随机推荐
- 费马定理&欧拉定理
费马定理: ap≡a(mod p) 其中p为质数,且a不是p的倍数 证明: ..... 欧拉定理: aφ(p)≡1(mod p) φ(x)(欧拉函数)为小于等于x且与x互质的数的个数 φ(x)=∏(p ...
- (转)synchronized和lock的区别
背景:最近在准备java基础知识,对于可重入锁一直没有个清晰的认识,有必要对这块知识进行总结. 1 . 什么是可重入锁 锁的概念就不用多解释了,当某个线程A已经持有了一个锁,当线程B尝试进入被这个锁保 ...
- hdu4549_M斐波那契数列 解题报告
Solution: 1.快速幂:数/矩阵 2.以证明1000000007是素数. 费马小定理: 若p是素数,gcd(a,p)=1,则a^(p-1)1(mod p). 若a^b mod p 中b很大,则 ...
- 蛋白质结构模型和功能预测:I-TASSER工具的使用
I-TASSER是一款用于预测蛋白质结构和功能的工具,网站链接:https://zhanglab.ccmb.med.umich.edu/I-TASSER/ 具体描述如下: I-TASSER (Iter ...
- 有意思的undefined columns selected,源于read.table和read.csv
输入以下语法时: read.table(site_file,header=T)->data data<-data[which(data[,5]=="ADD"),] 出现 ...
- vue.js2.0开发中的几个技巧
最近用Vue.js开发了几个项目,Vue的双向数据绑定和组件化让我耳目一新,减少了很多底层重复的工作,和基于jQuey的前端开发不起来,基于Vue的开发给我一种酣畅淋漓的感觉. 下面给出我基于Vue. ...
- ElasticSearch 之 dis_max tie_break的应用
1. 插入数据 PUT /my_index/my_type/ { "title": "Quick brown rabbits", "body" ...
- Vagrant工具的安装
Vagrant工具的安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 这篇博客源于我的北京一位好友:崔佳.在此,为了感激崔佳的帮助,特意写下这篇博客.希望对一些开发的小伙伴有些帮 ...
- 挖洞姿势:特殊的上传技巧,绕过PHP图片转换实现远程代码执行(RCE)
我使用了一个特殊的图片上传技巧,绕过PHP GD库对图片的转换处理,最终成功实现了远程代码执行. 事情是这样的.当时我正在测试该网站上是否存在sql注入漏洞,不经意间我在网站个人页面发现了一个用于上传 ...
- ObservableData-另一种姿势的观察者模式
使用 数据的定义 public class TestModel { private static TestModel mInstance; public static TestModel GetIns ...