现理解:将一个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. Hibernate 的*.hbm.xml文件的填写技巧

    ================================================================================= 模板: <!-- ?属性,本类 ...

  2. ZOJ 3469 Food Delivery

    题目大意: 有n个人,住在一条直线上.第i个人的坐标是Xi,街上有个外卖餐馆的位置是X,现在餐厅工作人员要给街上的每个人送饭,送完之后再回到餐厅,送饭人的速度是V,每个人有个不满意值,当这个人送餐时间 ...

  3. Evaluate Reverse Polish Notation——LeetCode

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  4. margin:-75px的理解及妙用——纯CSS制作水平/垂直都居中短边为50px/长边为150px的红色十字架

    有这么一个题目: 使用重构的方式制作出一个如下图的水平.垂直都居中短边为50px,长边为150px的红色十字架. 要求只使用2个div完成 答案: <!DOCTYPE html PUBLIC & ...

  5. 进了ACM之后,我才清楚了自己的方向!!!

    2015年8月29日,从郴州比完赛后,状况并没有想象中的乐观,我被卡在了一个数学题上,本来以为这个题目真的是很容易,天真的以为打表就可以敲的出来,可是并没有,横在了一个结束条件上面,比完赛后真想抽自己 ...

  6. 在VC中集成cURL

    libcurl 库的代码是完全开源的,但是我们一般不会在项目中直接引入它的源代码,而是通过动态链接库隐式链接的方式引入 libcrul 库.也就是说,我们需要在自己的项目中引入 libcrul 相关的 ...

  7. 《Euclidea3》-Eta-07

    Q: 分析:考虑到充分利用三等分和角度的信息,这里我们只需做出一个36°的角即可. 考虑一个顶角是36°的等腰三角形.如下图. 设AD=a1,CD=a2,根据相似,易得a1:a2=(√5-1)/2. ...

  8. ovs router

  9. How many ways?? - hdu2157(矩阵快速幂-模板)

    分析:求Map^k,刚开始没有用快速幂,TLE了   代码如下: =================================================================== ...

  10. Android ViewPager FragmentPagerAdapter

    ViewPager  里面放Fragment <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...