现理解:将一个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文件的导入导出的更多相关文章

  1. SSM excel文件的导入导出

    对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/&g ...

  2. java项目中Excel文件的导入导出

    package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...

  3. EasyExcel完成excel文件的导入导出

    简介 常见的Excel分析框架有Apache poi 和EasyExcel, poi在另一篇已经介绍过了,详情可以看[https://www.cnblogs.com/jasmine-e/p/16064 ...

  4. C# 使用NPOI 实现Excel的简单导入导出

    private void btnImport_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); DataTable dt ...

  5. 使用NPOI进行Excel数据的导入导出

  6. 使用PHPExcel实现Excel文件的导入和导出(模板导出)

    在之前有写过一篇文章讲述了使用PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度 ...

  7. C#利用NPOI操作Excel文件

    NPOI作为开源免费的组件,功能强大,可用来读写Excel(兼容xls和xlsx两种版本).Word.PPT文件.可是要让我们记住所有的操作,这便有点困难了,至此,总结一些在开发中常用的针对Excel ...

  8. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  9. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)      select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) ...

随机推荐

  1. Struts2 权限验证

    之前的Struts2项目通过再Sitemesh的母版页中使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这 种现仅仅在view层进行,如果未登录用户直接在地址栏输 ...

  2. MySQL表损坏预防与修复

    1.       表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时 ...

  3. 【Express】请求和响应对象

    浏览器发送的信息 app.get('/headers', function(req, res){ res.set('Content-Type', 'text/plain'); var s = ''; ...

  4. 【转】Android实例剖析笔记(二)--用实例讲解Andriod的开发过程,以NotesList为实例介绍Android的菜单机制

    原文网址:http://kb.cnblogs.com/page/78304/ 简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. op ...

  5. 高级数据结构(树状数组套主席树):ZOJ 2112 Dynamic Rankings

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  6. Merge into(oracle)

    作用:使用一条sql语句进行insert或者update操作,如果存在就update,如果不存在就insert 语法: MERGE INTO table_name t1 USING (table|vi ...

  7. WEB性能测试:你应该带上VisualStudio2010

    原文地址:http://www.16aspx.com/Article/62 在Web性能测试方面,增加了循环(Loops)和条件(Conditions),让开发人员可以为他们的应用程序写出更复杂,更智 ...

  8. zoj 1586

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586 //zoj 1586 #include<iostream> ...

  9. Registering Shell Extension Handlers

    最近在做Windows shell extension 的开发工作,对shell extension handler的注册机制有点疑问,以下摘自MSDN:http://msdn.microsoft.c ...

  10. OpenWrt简要刷机教程

    准备工作 1. 下载openwrt中文固件到PC.(当然其他英文固件也可) 2  找到路由器的RST键. 3  找到路由器刷机口---姑且称之为“WAN口” 4. 关闭路由器的电源. 5. 将PC网口 ...