现理解:将一个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. Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?

    Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants? Introduction ...

  2. SCVMM更换数据库,如何搞?

    因为SCVMM和SQL不是集成在同一台机器上的. 所以,当SQL换机器或是换名字后,SCVMM就不能启动了. 并且MS没提供直观的更改数据库连接的工具,只是在安装的时候有选项. 网上找了方法,修改注册 ...

  3. dt dd 如何在同一行上

    <style> dl{clear:left;} dt,dd{float:left;} </style> <dl> <dt>test </dt> ...

  4. Compare Version Number

    package cn.edu.xidian.sselab.string; /** *  * @author zhiyong wang * title: Compare Version Numbers  ...

  5. 【REST API】

    微信公众平台开发者文档 RESTful API 设计最佳实践 登录判断写去接口里 PUT 新建一个资源POST 更新一个资源GET 查看一个资源DELETE 删除一个资源

  6. SQL中的NULL值

    除is [not] null之外,空值不满足任何查找条件.–如果null参与算术运算,则该算术表达式的值为null.–如果null参与比较运算,则结果可视为false.在SQL-92中可看成unkno ...

  7. Insertion Sort List —— LeetCode

    Sort a linked list using insertion sort. 题目大意:将一个单链表使用插入排序的方式排序. 解题思路:先新建一个头指针,然后重新构建一下这个单链表,每次从头找到第 ...

  8. 开源库CImg 数据格式存储之二(RGB 顺序)

    在上一篇博客中已经初步说明了GDI和CImg数据的存储格式感谢博友 Imageshop 评论说明 CImg的说明文档中已有详细说明(详见上篇博客说明) CImg的数据格式确实是RRRGGGBBB顺序存 ...

  9. 老罗android开发视频教程学习完了

    让我学到了android的文件结构,事件窗口数据传递,百度地图开发很感谢

  10. iconv gbk字符转utf8字符

    直接上代码 bool gbk2utf8(const char* src, char* dest, size_t inlen) { const char *inbuf = src; size_t out ...