DLL 下载地址:https://files.cnblogs.com/files/xujunbao/NPOI.rar

using NPOI.HSSF.UserModel;
using NPOI.SS.Util;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
protected void btn_export_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt = null; //这里为导出的数据源
string path = Server.MapPath("~/FileUpload/Excel/导出" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls");
TableToExcel2(dt, path); //进行后台文件下载
FileInfo fileInfo = new FileInfo(path);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=报价表" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls");
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();
}
public static void TableToExcel2(DataTable dt, string file)
{
IWorkbook workbook;
string fileExt = Path.GetExtension(file).ToLower();
if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; }
if (workbook == null) { return; }
ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName);
int Excel_row = ;
int Excel_col = ;
BLL.jk_activatedTestingItem_base bll = new BLL.jk_activatedTestingItem_base();
DataTable dt_item = new DataTable();
ICellStyle style = workbook.CreateCellStyle();
//设置单元格的样式:水平对齐居中
style.Alignment = HorizontalAlignment.Center;
//垂直居中
style.VerticalAlignment = VerticalAlignment.Center;
//新建一个字体样式对象
IFont font = workbook.CreateFont();
//设置字体加粗样式
font.Boldweight = short.MaxValue;
//使用SetFont方法将字体样式添加到单元格样式中
style.SetFont(font);
//数据
for (int i = ; i < dt.Rows.Count; i++)
{
long activateId = TypeConverter.ObjectToLong(dt.Rows[i]["activateId"]);
dt_item = bll.GetList("activateId=" + activateId + " and testingItemLevel=1").Tables[];
if (dt_item == null || dt_item.Rows.Count == )
{
continue;
}
IRow row1 = sheet.CreateRow(Excel_row);
//表头
if (i == )
{
row1 = sheet.CreateRow(Excel_row);
ICell cell = row1.CreateCell();
cell.SetCellValue("产品大类");
sheet.SetColumnWidth(, * );
cell.CellStyle = style; //绑定样式到单元格上
cell = row1.CreateCell();
cell.SetCellValue("检测对象");
sheet.SetColumnWidth(, * );
cell.CellStyle = style;
cell = row1.CreateCell();
cell.SetCellValue("检测标准");
sheet.SetColumnWidth(, * );
cell.CellStyle = style;
cell = row1.CreateCell();
cell.SetCellValue("收样说明");
sheet.SetColumnWidth(, * );
cell.CellStyle = style;
}
string value = "";
for (int j = ; j < dt_item.Rows.Count; j++)
{
if (j == && i == )
{
ICell cell = row1.CreateCell();
cell.SetCellValue("检测项目");
sheet.SetColumnWidth(, * );
cell.CellStyle = style;
cell = row1.CreateCell();
cell.SetCellValue("检测周期");
cell.CellStyle = style;
cell = row1.CreateCell();
cell.SetCellValue("检测费用");
cell.CellStyle = style;
cell = row1.CreateCell();
cell.SetCellValue("检测部门");
sheet.SetColumnWidth(, * );
cell.CellStyle = style;
Excel_row++;
}
row1 = sheet.CreateRow(Excel_row);
string deptName = TypeConverter.ObjectToString(dt.Rows[i]["parameterDeptName"]);
for (int ij = ; ij < dt.Columns.Count; ij++)
{
string ColumnName = dt.Columns[ij].ColumnName;
switch (ColumnName)
{
case "productTypeName":
value = TypeConverter.ObjectToString(dt.Rows[i]["productTypeName"]);
ICell cell0 = row1.CreateCell();
cell0.SetCellValue(value);
cell0.CellStyle = style;
break;
case "testingObject":
value = TypeConverter.ObjectToString(dt.Rows[i]["testingObject"]);
ICell cell1 = row1.CreateCell();
cell1.SetCellValue(value);
cell1.CellStyle = style;
break;
case "testingbasisId":
value = TypeConverter.ObjectToString(dt.Rows[i]["testingbasisCode"]) + TypeConverter.ObjectToString(dt.Rows[i]["testingbasisChiName"]) + TypeConverter.ObjectToString(dt.Rows[i]["parameterComment"]);
ICell cell2 = row1.CreateCell();
cell2.SetCellValue(value);
cell2.CellStyle = style;
break;
case "remark":
value = TypeConverter.ObjectToString(dt.Rows[i]["remark"]);
ICell cell3 = row1.CreateCell();
cell3.SetCellValue(value);
cell3.CellStyle = style;
break;
default:
value = "";
break;
}
}
for (int jj = ; jj < dt_item.Columns.Count; jj++)
{
string ColumnName = dt_item.Columns[jj].ColumnName;
switch (ColumnName)
{
case "testingItemName":
value = TypeConverter.ObjectToString(dt_item.Rows[j]["testingItemName"]);
ICell cell4 = row1.CreateCell();
cell4.SetCellValue(value);
break;
case "testingTotalDay":
value = TypeConverter.ObjectToString(dt_item.Rows[j]["testingTotalDay"]);
ICell cell5 = row1.CreateCell();
cell5.SetCellValue(value);
break;
case "testingFee":
value = TypeConverter.ObjectToString(dt_item.Rows[j]["testingFee"]);
ICell cell6 = row1.CreateCell();
cell6.SetCellValue(value);
break;
default:
value = "";
break;
}
}
ICell cell7 = row1.CreateCell();
cell7.SetCellValue(deptName);
Excel_row++;
}
sheet.AddMergedRegion(new CellRangeAddress(Excel_row - dt_item.Rows.Count, Excel_row - , , )); //跨行 :开始行,结束行,开始列,结束列
sheet.AddMergedRegion(new CellRangeAddress(Excel_row - dt_item.Rows.Count, Excel_row - , , ));
sheet.AddMergedRegion(new CellRangeAddress(Excel_row - dt_item.Rows.Count, Excel_row - , , ));
sheet.AddMergedRegion(new CellRangeAddress(Excel_row - dt_item.Rows.Count, Excel_row - , , ));
} //转为字节数组
MemoryStream stream = new MemoryStream();
workbook.Write(stream);
var buf = stream.ToArray(); //保存为Excel文件
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write))
{
fs.Write(buf, , buf.Length);
fs.Flush();
}
}

记录NPOI使用方法的更多相关文章

  1. linux下history命令显示历史指令记录的使用方法

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...

  2. C#获取变更过的DataTable记录的实现方法

    本文实例讲述了C#获取变更过的DataTable记录的实现方法,是一个非常实用的功能!具体实现方法如下: 首先DataTable可以看做是一个物理表的内存式存储,每一个DataRow都有一个属性叫做R ...

  3. mysql随机查询记录的高效率方法

    mysql使用rand随机查询记录的高效率方法 一直以为mysql随机查询几条数据,就用 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了. 但是真 ...

  4. Sql Server删除数据表中重复记录 三种方法

    本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...

  5. mysql删除重复记录语句的方法

    例如: id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c pp 7 c pp 8 c iii id是主键 要求得到这样的结果 id name ...

  6. mysql中判断记录是否存在方法比较

    我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是 ...

  7. linux记录登录ip方法

    PS:Linux用户操作记录一般通过命令history来查看历史记录,但是如果因为某人误操作了删除了重要的数据,这种情况下history命令就不会有什么作用了.以下方法可以实现通过记录登陆IP地址和所 ...

  8. npoi 使用方法

    不少朋友在做项目的过程中或多或少的都会用到excel导入.导出功能,下面我来给大家介绍一下使用NPOI如何导入.导出excel, 通过代码描述一下npoi的使用方法,希望都够给需要的朋友一点点帮助,也 ...

  9. E - Coin Change UVA - 674 &&(一些记录路径的方法)

    这一道题并不难,我们只需要将dp数组先清空,再给dp[0]=1,之后就按照完全背包的模板写 主要是我们要证明着一种方法不会出现把(1+3+4)(1+4+3)当作两种方法,这一点如果自己写过背包的那个表 ...

随机推荐

  1. 使用vcastr22.swf做flash版网页视频播放器

    flash的安装设置参考  Flash设置(各种版本浏览器包括低版本IE) 百度搜索下载vcastr22.swf文件 然后使用方式很简单,浏览器安装flash相关插件就能看了 视频路径主要在这里,视频 ...

  2. ES6-Babel-Browserify使用教程

    ES6-Babel-Browserify使用教程 定义package.json文件 { "name" : "es6-babel-browserify", &qu ...

  3. Windows10搭建FTP服务

    1.启用Windows10 Ftp服务 打开控制面板->程序和功能->启用或关闭windows功能然后如图: 2.配置FTP用户 我的电脑->右击点击管理->本地用户和组 在A ...

  4. Redis 使用介绍-Linux-Bash

    1.进入Bash redis-cli 2.查看所有的key keys * 1.Key-Value 1.1.查看key-value值 1.2.修改key值 2.List 1> string lis ...

  5. com.alibaba.druid数据源工具类

    Druid是阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好.它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库, ...

  6. 快速掌握Nginx(二) —— Nginx的Location和Rewrite

    1 location详解 1.location匹配规则 Nginx中location的作用是根据Url来决定怎么处理用户请求(转发请求给其他服务器处理或者查找本地文件进行处理).location支持正 ...

  7. 多模块项目Module must not contain source root. The root already belongs to module

    多模块项目Module "*" must not contain source root *. The root already belongs to module "* ...

  8. 源码-mybatis-01-SqlSessionFactory创建

    0.总概   1.SqlSessionFactory在mybatis只要创建一次: import com.suntek.vdm.gw.util.AESEncipher; import org.apac ...

  9. Oracle ORA-08104报错处理方法及注意事项

    [环境介绍] 系统环境:IBM P740 8205-E6C (AIX) + 11.2.0.3.0 Oracle RAC [背景介绍] 故障描述:数据库表空间超过90%,无法进行扩容表空间,需要业务侧清 ...

  10. jmeter中的参数化

    1.那些场景需要参数化? 1.登陆认证信息 2.一些和时间相关的,违反时间约束的[时间点和当前时间不一致的情况等等] 3.一些受其他字段约束的[例如字段的一些限制条件] 4.一些来自于其他数据源[例如 ...