1. 使用NPOI读取及生成excel表。

(1)导出Click事件:

获取DataTable;

给文件加文件名: string xlsxName = "xxx_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xlsx";

(注:.xlsx是Office2007使用的,是用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母x(即:docx取代doc、.xlsx取代xls等等),使其占用空间更小; .xls是可以使用Microsoft Excel打开,Office2003及之前版本文档的扩展名)

定义一个方法: TableToExcelForXLSX(dt);

(2)//使用NPOI:NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。优势:可以在服务器上未安装office的情况下,对Word、excel文档进行读写操作。

private void TableToExcelForXLSX(DataTable dt)
{

XSSFWorkbook xssfworkbook = new XSSFWorkbook();    //XSSFWorkbook :用于表示高及低层次excel文件格式的类,实现workbook接口。

ISheet sheet = xssfworkbook.CreateSheet("Result");      //ISheet:是一个工作表的高级表示,Row:行;Cell:单元格

//循环添加表头
IRow row = sheet.CreateRow(0);
for (int i = 0; i < dt.Columns.Count; i++)
{
ICell cell = row.CreateCell(i);

}

row.Cells[0].SetCellValue("RowNum");//1
row.Cells[1].SetCellValue("Type");//2
row.Cells[2].SetCellValue("PN(B)");//3
row.Cells[3].SetCellValue("PN(S)");//4
row.Cells[4].SetCellValue("ODMPN");//5
row.Cells[5].SetCellValue("OSSPPN");//6
row.Cells[6].SetCellValue("CT#");//7
row.Cells[7].SetCellValue("SecurityID");//8
row.Cells[8].SetCellValue("BOXID");//9
row.Cells[9].SetCellValue("FLOWTAG");//10
row.Cells[10].SetCellValue("IOTKNO");//11
row.Cells[11].SetCellValue("KITCATE");//12
row.Cells[12].SetCellValue("PROCESSLINE");//13
row.Cells[13].SetCellValue("Comment");//14
row.Cells[14].SetCellValue("CREATE_T");//15
row.Cells[15].SetCellValue("REMARK");//16

//填充excel的单元格

for (int i = 0; i < dt.Rows.Count; i++)
{

IRow row1 = sheet.CreateRow(i + 1);

for (int j = 0; j < dt.Columns.Count; j++)
{
ICell cell = row1.CreateCell(j);
}
row1.Cells[0].SetCellValue(dt.Rows[i]["RowNum"].ConvertObjToStr().Trim());//1
row1.Cells[1].SetCellValue(dt.Rows[i]["Type"].ConvertObjToStr().Trim());//2
row1.Cells[2].SetCellValue(dt.Rows[i]["PN(B)"].ConvertObjToStr().Trim());//3
row1.Cells[3].SetCellValue(dt.Rows[i]["PN(S)"].ConvertObjToStr().Trim());//4
row1.Cells[4].SetCellValue(dt.Rows[i]["ODMPN"].ConvertObjToStr().Trim());//5
row1.Cells[5].SetCellValue(dt.Rows[i]["OSSPPN"].ConvertObjToStr().Trim());//6
row1.Cells[6].SetCellValue(dt.Rows[i]["CT#"].ConvertObjToStr().Trim());//7
row1.Cells[7].SetCellValue(dt.Rows[i]["SecurityID"].ConvertObjToStr().Trim());//8
row1.Cells[8].SetCellValue(dt.Rows[i]["BOXID"].ConvertObjToStr().Trim());//9
row1.Cells[9].SetCellValue(dt.Rows[i]["FLOWTAG"].ConvertObjToStr().Trim());//10
row1.Cells[10].SetCellValue(dt.Rows[i]["IOTKNO"].ConvertObjToStr().Trim());//11
row1.Cells[11].SetCellValue(dt.Rows[i]["KITCATE"].ConvertObjToStr().Trim());//12
row1.Cells[12].SetCellValue(dt.Rows[i]["PROCESSLINE"].ConvertObjToStr().Trim());//13

if (dt.Rows[i][13].ConvertObjToStr().Trim().Contains("<br"))
{
ICellStyle cs = xssfworkbook.CreateCellStyle();
cs.WrapText = true;
row1.Cells[13].CellStyle = cs;
}
row1.Cells[13].SetCellValue(dt.Rows[i]["Comment"].ConvertObjToStr().Trim().Replace("<br style=mso-data-placement:same-cell/>", Environment.NewLine));//14
//Environment.NewLine 或 ‘\r\n’:都有在excel表中的单元格有换行的效果。注:只做此换行,在excel表中,需双击单元格,才会有效果。所以需要加上面的代码。

row1.Cells[14].SetCellValue(dt.Rows[i]["CREATE_T"].ConvertObjToStr().Trim());//15
row1.Cells[15].SetCellValue(dt.Rows[i]["REMARK"].ConvertObjToStr().Trim());//16

for (int ColumnsNum = 0; ColumnsNum < dt.Columns.Count; ColumnsNum++)
{
int columnWidth = sheet.GetColumnWidth(ColumnsNum) / 256;
string s = row1.Cells[ColumnsNum].ConvertObjToStr().Trim();

int length = Encoding.UTF8.GetBytes(s).Length;//获取当前单元格的内容宽度  
if (length == 0)
{
length = 10;
}

if (columnWidth < length + 1)
{
columnWidth = length + 1;
}//若当前单元格内容宽度大于列宽,则调整列宽为当前单元格宽度


sheet.SetColumnWidth(ColumnsNum, columnWidth * 256);
}
}
//设置单元格的高度
row.Height = 15 * 20;
//设置单元格的宽度
sheet.SetColumnWidth(13, 25 * 256);

//导出到Excel(.XLSX)

Response.Clear();
Response.Buffer = true;
byte[] bytes = null;
Response.ContentType = "application/ms-excel";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + path);

//转为字节数组
using (MemoryStream stream = new MemoryStream())
{
xssfworkbook.Write(stream);
bytes = stream.ToArray();
stream.Close();
stream.Dispose();
}

Response.BinaryWrite(bytes);
Response.End();
}

ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作的更多相关文章

  1. SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...

  2. 利用数据库管理工具(Navicat)导出数据到Excel表中

    如果只是想把数据库表中数据简单导出来,可以利用数据库管理工具中的工具 1.先查询 2.在查询出结果中全选 3.导出向导 4.选择Excel 5.选择导出地址并命名

  3. Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)

    POI是apache提供的一个读写Excel文档的开源组件,在操作excel时常要合并单元格,合并单元格的方法是: sheet.addMergedRegion(new CellRangeAddress ...

  4. mysql导出数据到excel表中

     mysql>  select b.username,a.subject,a.money,FROM_UNIXTIME(a.ctime) from shop_pay a   INNER JOIN ...

  5. 在java中实现数据导入excel表格中

    1.首先前端代码如下: 一个导出按钮:<input id="export" class="btn btn-primary" type="butt ...

  6. 【PHP】将EXCEL表中的数据轻松导入Mysql数据表

    在网络上有不较多的方法,在此介绍我已经验证的方法. 方法一.利用EXCEL表本身的功能生成SQL代码 ①.先在“phpmyadmin”中建立数据库与表(数据库:excel,数据表:excel01,字段 ...

  7. 将从数据库中获取的数据写入到Excel表中

    pom.xml文件写入代码,maven自动加载poi-3.1-beta2.jar <!-- https://mvnrepository.com/artifact/poi/poi --> & ...

  8. 将EXCEL表中的数据轻松导入Mysql数据表

    转载自:http://blog.163.com/dielianjun@126/blog/static/164250113201042310181431/ 在网络上有不较多的方法,在此介绍我已经验证的方 ...

  9. C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel

    其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...

随机推荐

  1. Android笔记:DrawerLayout抽屉布局的使用

    DrawerLayout(抽屉布局),在各种app中经常出现,比如csdn.. 如下示,只要从屏幕侧边滑一下,或者点击左上角的图标,抽屉就会出来. DrawerLayout要点: 1.使用Drawer ...

  2. C++基础-02

    函数重载 - 函数重载依据参数列表,而不依据返回类型 - 重载函数匹配规则: 精确匹配,不需要类型转换,但可以数组名到指针.函数名到指针和T到const T 提升匹配,bool.short.char到 ...

  3. Hibernate自动建表问题

    自动见表配置 <property key="hibernate.hbm2ddl.auto">update</property> 运行时出现了一下错误 org ...

  4. mysql学习(3)-linux下mysql主从复制

    前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  5. My安卓知识5--百度地图api的使用,周边信息检索

    虽然查了很多资料,但是这个问题还是解决不了,不知道为什么检索城市内的相关信息能用,检索周边信息语句就是用不了.代码如下,第一段是检索保定市内的加油站,第二段是检索周边的加油站.centerToMyLo ...

  6. aix 维护常用命令

    errpt   - dH  :如果有记录表示硬故障件出现.#向ibm报修 mail:关键错误信息会以mail方式发给root用户.#根据报错程序联系相应厂家. df  -g: 文件系统不可以,当/va ...

  7. flex中通过代码获取supermap的token

    最近工作中需要使用代码来获取supermap服务启动安全访问限制以后的token值,经过一番尝试,最终成功获取到,记录下里,以供翻阅 //get token public function getTo ...

  8. Oracle 11g 导库导不出空表问题

    Oracle11g 会遇到这样的问题,用exp整库导出的时候,会遇到这样的问题,库里的空表没办法导出 select * from all_all_tables aa where aa.owner='U ...

  9. 用servlet和jsp做探索数据库

    1.建一个web文件,在里面分三层,分别是实体层:DAO层,DAO层里面包含BaseDAO(数据访问层)和DAO层:还有一个servlet层,处理数据逻辑层! 一.实体层,建立两个实体,一个membe ...

  10. 关于swfupload,客户端中文乱码解决方案!

    公司做了个邮箱系统,上传附件用到了swfupload控件,测试成功上线后hr找我说上传附件中文乱码. 奇怪了,就只有她的电脑出问题,我找了好几台电脑,虚拟机也跑了怎么就找不到问题. 后来网上查了好久, ...