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. 第一个thinkphp项目遇到的知识

    本文是于项目完成后所写,基本是想到 哪写到哪,所以顺序会很乱. 1.在后台处理ueditor这种文本编辑器的时候,会遇到取值问题,如果你想要取纯文本内容:getContentTxt(),没有段落格式: ...

  2. Java基础--面向对象编程2(封装)

    1.封装的定义: 封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.  为什么需要封装?封装的作用和含义? 首先思考一个问题:当我们要 ...

  3. 操作系统层面聊聊BIO,NIO和AIO (epoll)

    BIO 有了Block的定义,就可以讨论BIO和NIO了.BIO是Blocking IO的意思.在类似于网络中进行read, write, connect一类的系统调用时会被卡住. 举个例子,当用re ...

  4. Groovy闭包详解

    Groovy闭包是一种可执行代码块的方法,闭包也是对象,可以向方法一样传递参数,因为闭包也是对象,因此可以在需要的时候执行,像方法一样闭包可以传递一个或多个参数.闭包最常见的用途就是处理集合,可以遍历 ...

  5. git体验

    (1)git初始化配置#配置用户名git config --global user.name "azcode"#配置邮箱git config --global user.email ...

  6. 查看提交历史(git log)

    git log 命令 在完成了几次提交,或者克隆了一个已有提交历史的仓库后,要查看历史提交记录,可以通过git log命令来实现. $ git log commit 0becea8e1966df258 ...

  7. cnpm下载包与npm版本不一致的问题解决

    参考链接:https://www.jianshu.com/p/949b4e0ae190

  8. vue.js基础

    1,感谢菜鸟教程 2,第一个实例 <html> <head> <meta charset="utf-8"> <title>Vue 测 ...

  9. mysql linux utf-8 下中文乱码

    SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf ...

  10. JAVA学习笔记(4)—— 排序算法

    排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ...