现理解:将一个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. Node.js包(JXcore)

    Node.js的代码是开放的,并准备好被复制像任何其他Javascript代码.但现在它不可能的了.JXcore 这是一个开源项目,引入了包装和源文件和其他资源加密成JX包一个独特的功能. 考虑大型项 ...

  2. java.lang.String.indexOf()用法

    java.lang.String.indexOf(char ch) 方法返回字符ch在指定字符串中第一次出现的下标索引位置 如果字符ch在指定的字符串中找不到,则返回-1 示例: import jav ...

  3. 根据div 标签 查看数组@class=modulwrap 下面的/table/tbody/tr/td

    <div class="modulwrap"> <div class="request_title"> <span class=& ...

  4. Linux&shell 之Linux文件权限

    写在前面:案例.常用.归类.解释说明.(By Jim) Linux文件权限用户useradd test (添加用户test)userdel test (删除用户test)passwd test(修改用 ...

  5. 【转】如何在github上fork一个项目来贡献代码以及同步原作者的修改 -- 不错

    原文网址:http://www.cnblogs.com/astwish/articles/3548844.html 作为一个IT人,通过github进行学习是最快的成长手段.我们可以浏览别人的优秀代码 ...

  6. 数据结构(左偏树):HDU 1512 Monkey King

    Monkey King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. ACM第六周竞赛题目——B CodeForces 478B

    B - B Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  8. [Locked] Verify Preorder Sequence in Binary Search Tree

    Verify Preorder Sequence in Binary Search Tree Given an array of numbers, verify whether it is the c ...

  9. zzuoj 10408: C.最少换乘【最短路dijkstra】

    10408: C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 31  Solved: 8[Submit][Status][Web Board ...

  10. poj2007

    极角排序,其实是叉乘排序 #include <iostream> #include <algorithm> #include <math.h> #include & ...