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. MVC Html.ValidationSummary()样式优化

    先看效果图 在MVC中常用ValidationSummary显示校验信息,默认样式为 针对Html.ValidationSummary()如何做优化 样式一: 在MVC中,如果你使用验证总结方法任何验 ...

  2. myeclipse部署web项目到server : deploy location 为 INVALID,并且不能更改

    首先查看项目路径下有没有 .mymetadata文件,没有就从其它地方挪一个,但是文件中的id必须是唯一的. 如果还不行就去下面这位大哥写的博客看下,进行下一步就可以解决了 生如夏花

  3. DBCP数据源连接池实现原理分析

    前些天在调试公司系统的时候发现这样的一个问题:mysql数据库服务停止一段时间后再次重启后吗,tomcat服务无法请求数据库服务,调试了半天对这个问题进行定位解决,期间也搞了很多有关mysql数据库的 ...

  4. 如何理解反向传播 Backpropagation 梯度下降算法要点

    http://colah.github.io/posts/2015-08-Backprop/ http://www.zhihu.com/question/27239198 待翻译 http://blo ...

  5. 序列化--dict与(file)文件读写

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...

  6. oracle 第一章总结

    sysdba:  即数据库管理员,权限包括:打开数据库服务器.关闭数据库服务器.备份数据库.恢复数据库.日志归档.会话限制.管理功能.创建数据库.sys用户必须用 sysdba身份才能登录,syste ...

  7. PHP-redis中文文档介绍(转自http://www.jb51.net/article/33887.htm)

    Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务地址port: int,端口号t ...

  8. 分享一个快速测试ios软件的工具

    简易IPA安装地址生成器 地址: https://www.neicexia.com/IPADistribute/Resources/index.html?fromsite#IPADistribute- ...

  9. 粗略读完opengl

    清明节前粗略读完了opengl编程指南第七版,对opengl有了一个大体的了解,并且了解的也很肤浅.有了计算机图形学,线性代数的基础,读起来也不像以前那么吃力了.从简单的绘制点,直线,多边形,到视图变 ...

  10. 为何jquery动态添加的input value无法提交到数据库?【坑】

    有两个输入框,我想让第一个输入框失去焦点以后,第二个输入框自动获取第一个输入框的value为默认值,jquery代码如下,可以正常显示,但是用PHP提交数据,并插入数据库的时候确实空值,尚未查找到原因 ...