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. 在浏览器地址栏按回车、F5、Ctrl+F5刷新网页的区别

    不少同学问,不都是刷新吗?还有什么区别?其实,还是有的. 其中,在地址栏按回车又分为两种情况.一是请求的URI在浏览器缓存中未过期,此时,使用Firefox的firebug插件在浏览器里显示的HTTP ...

  2. PHP读取Excel数据写入数据库(包含图片和文字)

    public function test(){ $exts = 'xlsx'; //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org ...

  3. 查看oracle表中列的数据类型

    一. SQLPLUS中,直接用 DESC[ribe] tablename 即可. 二.在外部应用程序调用查看ORACLE中的表结构时,只能用下面的语句代替: 1.看字段名与数据类型 select * ...

  4. wcf 由 http 更改为 https 返回404,没有终结点在侦听可以接受消息的

    首先wcf项目在使用http时是没问题的. WCF有http更改为https之后,返回 没有终结点在侦听可以接受消息 需要修改wcf服务端及客户端 服务端更改代码 <binding maxRec ...

  5. GUI的搭建,windowbuilder的使用

    在进行GUI的搭建过程中,相信很多人对于一个图标的设置感觉写起来很麻烦,需要不断的添加,而在java中有一个windowbuilder窗口可以很好的帮助我们进行GUI的搭建 1.进入eclipse的页 ...

  6. ThinkPHP 3.2.3 文件上传时间目录问题

    上传文件的代码如下 在上传文件的时候会默认生成时间目录, 但是有些时候,并不想生成时间目录,而是储存在我们自己定义的目录下,可以这样做: 只需要添加 $upload->autoSub = fal ...

  7. 粗略读完opengl

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

  8. Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法

    上午新建excel工作表时,发现新建完之后居然打不开 提示: 尼玛这坑爹的,难道我的Excel坏了?? 排查问题之后发现 只有新建“Microsoft Excel 工作表”时会出现这种问题,新建“Wo ...

  9. 金蝶K/3 Cloud 界面解析过程

    服务端 目前也就是iis服务器生成Json描述返回给不同的展现端最解析. 不同的展现端,可以有Silverlight.WPF.Html5.Winform 当然还有IOS和Android端做解析展现 对 ...

  10. 【redis】redis 在 windows 下安装使用

    1.安装 windows 下 redis 可用客户端 : http://redisdesktop.com/download ; 或在 github 上下载 redis zip 包,解压包到某个目录并在 ...