NPOI对excel文件的导入导出
现理解:将一个Excel文件(工作簿-IWorkBook)看做是一个你要操作的对象,每个工作簿包含多个工作表(ISheet)对象,每个工作表中又包含多个行对象(IRow),每行又包含多个单元格(ICell)对象. 单元格里存储相应数据
下面帮助更直观的展示:IWorkBook --> ISheet --> IRow --> ICell
一:从数据库中将符合条件的数据导出到一个新的Excel中
思路:
0.ado获取导入内容
1.创建一个IWorkBook对象.我们最终将把这个设置好的IworkBook对象写入到一个文件流中,即大功告成.
2.创建这个IWorkBook的ISheet对象.
3.创建这个ISheet的IRow对象.
4.创建IRow的ICell对象,并设置数据库里相应的值
注:SqlHelper将不再附上
//将数据库中的表的数据导出到Execel表中
string sqlstr = "select * from T_Scripts";
using (SqlDataReader dr = SqlHelper.ExecuteReader(sqlstr))
{
if (dr.HasRows)
{
IWorkbook wb = new HSSFWorkbook();
ISheet sheet = wb.CreateSheet("Customers");
IRow title = sheet.CreateRow(); //添加列名行
for (int i = ; i < dr.FieldCount; i++) //dr.FieldCount获得当前行的列数
{
title.CreateCell(i).SetCellValue(dr.GetName(i));
} int n = ;
while (dr.Read())
{
IRow dataRow = sheet.CreateRow(n);
for (int i = ; i < dr.FieldCount; i++)
{
switch (dr[i].GetType().ToString())
{
case "System.Int32":
dataRow.CreateCell(i).SetCellValue(dr.GetInt32(i));
break;
case "System.String":
dataRow.CreateCell(i).SetCellValue(dr.GetString(i));
break;
case "System.DBNull":
dataRow.CreateCell(i).SetCellValue("null");
break;
case "System.DateTime":
//dataRow.CreateCell(i).SetCellValue();
ICell cel = dataRow.CreateCell(i);
cel.SetCellValue(dr.GetDateTime(i));
//设置单元格格式
ICellStyle cs = wb.CreateCellStyle();
IDataFormat df = wb.CreateDataFormat();
cs.DataFormat = df.GetFormat("yyyy-mm-dd");
cel.CellStyle = cs;
break;
default:
break;
}
}
n++;
}
//将IWorkBook对象写入到文件流中
using (FileStream fs = File.Create("d:/tscript.xls"))
{
wb.Write(fs);
}
MessageBox.Show("out success!");
}
}
二:将Excel文件中的内容录入到数据库中
思路:
0.打开一个Excel文件流.
1.将这个流附加到新建的一个IWorkBook对象上.此时已经拿到这个文件的对象
2.获取这个工作簿的ISheet对象
3.获取ISheet的IROw对象
4.进行ado操作,将每行的数据以此添加到数据库表中
string sqlstr = "insert into T_Customers ( CC_CustomerName, CC_CellPhone, CC_Landline, CC_CarNum, CC_BracketNum, CC_BuyDate) values (@name,@phone,@sphone,@carnum,@bk,@date)";
//将要录入数据库的xls通过流的方式传给一个IWorkBook对象
using (FileStream infs = File.Open(@"客户资料new.xls", FileMode.Open))
{
IWorkbook inwb = new HSSFWorkbook(infs);
//获取工作簿每行内容
ISheet sheet1 = inwb.GetSheetAt();
for (int i = ; i <= sheet1.LastRowNum; i++)//从数据行开始读取即索引为1的行; lastrownum获取的是最后一行的索引即 行数-1
{
IRow datarow = sheet1.GetRow(i);
//每次循环都新建一个sqlparameter数组
SqlParameter[] spt = new SqlParameter[] {
new SqlParameter("@name",SqlDbType.NVarChar),
new SqlParameter("@phone",SqlDbType.NVarChar),
new SqlParameter("@sphone",SqlDbType.NVarChar),
new SqlParameter("@carnum",SqlDbType.NVarChar),
new SqlParameter("@bk",SqlDbType.NVarChar),
new SqlParameter("@date",SqlDbType.DateTime)
};
for (int j = ; j < datarow.LastCellNum; j++)
{
ICell cell = datarow.GetCell(j);
if (cell!=null)
{
spt[j].Value = cell.ToString();//添加参数
}
else
{
spt[j].Value = DBNull.Value;
}
}
SqlHelper.ExecuteNonquery(sqlstr, spt);//插入到数据库表中的相应列
}
}
MessageBox.Show("access!");
不同版本的NOPI编程貌似有些不同
NPOI对excel文件的导入导出的更多相关文章
- SSM excel文件的导入导出
对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/&g ...
- java项目中Excel文件的导入导出
package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...
- EasyExcel完成excel文件的导入导出
简介 常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064 ...
- C# 使用NPOI 实现Excel的简单导入导出
private void btnImport_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); DataTable dt ...
- 使用NPOI进行Excel数据的导入导出
- 使用PHPExcel实现Excel文件的导入和导出(模板导出)
在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...
- C#利用NPOI操作Excel文件
NPOI作为开源免费的组件,功能强大,可用来读写Excel(兼容xls和xlsx两种版本).Word.PPT文件.可是要让我们记住所有的操作,这便有点困难了,至此,总结一些在开发中常用的针对Excel ...
- 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
* 说明:复制表(只复制结构,源表名:a 新表名:b) select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...
随机推荐
- [HDOJ 5155] Harry And Magic Box
题目链接:HDOJ - 5155 题目大意 有一个 n * m 的棋盘,已知每行每列都至少有一个棋子,求可能有多少种不同的棋子分布情况.答案对一个大素数取模. 题目分析 算法1: 使用容斥原理与递推. ...
- Dungeon Master(poj 2251)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- 如果你不好好玩printf
昨天在跟Fiona讨论printf导致程序Crash的问题,就花了点时间看看究竟什么情况下会这样,有兴趣的童鞋可以看看:) 只要是玩过C或者C++的童鞋们,对printf肯定是再熟悉不过了.下面有几个 ...
- Ubuntu 中使用 谷歌日历
简介 对于经常使用待办类软件的人来说,谷歌日历是个不错的选择.但每次,都要登录网页去查看,对于我这样的懒人来说似乎麻烦了些. 所以在网上找了个叫做 Calendar Indicator 的软件. 效果 ...
- 网络流(最小费用最大流):POJ 2135 Farm Tour
Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...
- cf702B Powers of Two
B. Powers of Two time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- Interesting Punch-Bowl(优先队列)
/** http://acm.nyist.net/JudgeOnline/problem.php?pid=547 题意: 有一个正方形的区域 区域上面有高度不同的1*1的立方体自然有凸有凹 凹的地方可 ...
- hdu 4289 最小割,分拆点为边
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2609 #include <cstdio> #incl ...
- Java调用R(三)_系统命令调用
java通过配置的系统命令Rscript直接调用R脚本. 优点:R脚本和Java代码完全分离 缺点:R中变量不能控制 1. Java本地能够成功调用. public void CallR() { Ru ...
- Hibernate学习笔记(一):级联删除
一对多的关系映射 在一的一方配置文件中将会配置set节点信息: *.hbm.xml配置文件中set节点的属性: Lazy:默认是true 即使用延迟加载,false表示即时加载: Order-by:一 ...