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. js中的call与apply深入浅出

    首先明确call()与apply()最大的区别,除了名字不同以外,就是参数不一样,call的参数需要一一列出,apply的第二个及其以后的参数需要组成一个数组传进来. 这两个函数的调用者不是对象,而是 ...

  2. 2 Add Two Numbers

    // Java public ListNode addTwoNumbers(ListNode l1, ListNode l2) { return add(l1, l2, false); } priva ...

  3. AngularJs + Web API 页面开发(一)

    AngularJS这个JS框架是个神马东东我也不太清楚,我也是初学者~~ AngularJS适用于single page App,单页面程序都是局部刷新的,这一点和Ajax有第一的区别,因为使用Aja ...

  4. flash中htmlText样式

    赋值htmlText时,htmlText中指定了样式的按指定样式显示,没有指定的按该文本的默认样式显示. PS:flash软件拖出来的文本,在赋值htmlText的时候该文本原有样式会失效,而new出 ...

  5. Java广度优先爬虫示例(抓取复旦新闻信息)

    一.使用的技术 这个爬虫是近半个月前学习爬虫技术的一个小例子,比较简单,怕时间久了会忘,这里简单总结一下.主要用到的外部Jar包有HttpClient4.3.4,HtmlParser2.1,使用的开发 ...

  6. 在 JQuery Mobile 中实现瀑布流图库布局

    先来看在Windows系统的1080P显示器中显示的效果: 这个整合方式几乎没有现存的实例,是自己总结出来的方法,在此记录下来. 首先访问Masonry官网下载masonry.pkgd.min.js: ...

  7. Thrift 2中get用法的详细解析

    Thrift2相比于Thrift 1改动较大,这里不去描述改动的地方,但是它的改动确实比Thrift1方便了很多.但是不能理解的是Thrift2网上的资料和文档相当的少,就以Thrift2操作Hbas ...

  8. 在 Linux 下将 PNG 和 JPG 批量互转的四种方法

    计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务[1]的方法.这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些 .PNG 格式的图像批量转换成 .J ...

  9. 三目运算符是不是在bug中躺了枪_折腾了一整天

    Hand_result = !String.IsNullOrEmpty(e.ReadString) ? e.ReadString : GetHandCodeReadStringFromResultXm ...

  10. vios 虚拟光驱 安装vioc

    一.VIO server 创建虚拟光驱 1 检查是否创建Library $lsrep 2 创建 VMLibrary :vg 和size都可以自己定义 $mkrep -sp rootvg -size 1 ...