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. C语言面试题大汇总之华为面试题 Eddy整理

    1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...

  2. Git打标签、还原到具体标签版本代码

    1.打标签:(在需要合并的分支上先打一个标签,方便回滚) $ git tag 标签名 -----此标签将打在本地,还需要推送至远程仓库 $ git push origin 标签名 -----此步骤执行 ...

  3. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系

    原创链接:https://www.cnblogs.com/lxf1117/p/6762315.html sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户 ...

  4. vue+element-ui实现显示隐藏密码

    <template> <el-form :model="cuser_info" label-width="115px" label-posit ...

  5. typescript + echarts-for-react 制作渐变柱状图, 提示[ts] 类型“Graphic”上不存在属性“LinearGradient”

    更新: 2019/03 无意间发现Graphic上已有 LinearGradient属性 

  6. JavaScript实现轮播图效果

    我又来了,同志们.老想你们了 捕获小可爱一枚. 下面进入正题:用JavaScript原生代码写轮播图效果. 具体效果就不多说了,网站上面的轮播效果我们都知晓.下面是展示代码 html代码: <d ...

  7. (五)ORBSLAM关键帧的筛选和插入

    ORBSLAM2的关键帧简介 图像插入频率过高会导致信息冗余度快速增加,而这些冗余的信息对系统的精度却十分有限,甚至没有提高,反而消耗了更多的计算资源.这等于吃力不讨好. 关键帧的目的在于,适当地降低 ...

  8. 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS

    在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思. ...

  9. TextView设置不同字段不同点击事件

    转载自:http://www.apkbus.com/blog-160625-59265.html package com.example.fortextdemo;   import java.util ...

  10. L2-007 家庭房产 (25 分) (并查集)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题目: 给定每个人的家庭成员和其自己名 ...