2024年6月7日发(作者:)

.NET导出Excel文件

最近做 Excel导出功能,顺便整理了一下可用的一些导出Excel方法

一般导出方式

1,客户提出要将统计的结果导出到excel文件,首先利用如下方式:

增加 <%@page contentType="application/-excel;charset=GBK" %>

头部说明,然后放一个table在该页面中即可了。

2,客户看过后提出了改进意见,要求保存文件的时候自动给文件一个名称,这样可以直接

保存。

改进如下:

增加 der("Content-Disposition", "attachment; filename="+fileName);

但是却又遇到了乱码的问题:

der("Content-Disposition",

"attachment; filename="+new String(es("GBK"),"iso-8859-1"));

将文件名称的编码由GBK转换为ISO-8859-1就正常了。

GridView导出Excel

尝试了一下Gridview导出为Excel,原本以为很简单,可是真正应用起来还是不太好弄

的,呵呵,所想非所得。总结了一下应该注意下面几点:

1.由于gridview的内容可能是分页显示的,因此,这里在每次导出excel时,先将gridview

的allowpaging属性设置为false,然后databind()一下,确保搂到所有数据;

2.不用单独设置导出的路径,导出时会弹出对话框让你确认保存位置;

3.要写一个空的VerifyRenderingInServerForm方法(必须写),以确认在运行时为指定的

服务器控件呈现HtmlForm 控件;

4.导出后别忘记再重新设置其allowpaging属性;

当我把这些都设置好以后,点击[导出],出现了 只能在执行 Render() 的过程中调用

RegisterForEventValidation(RegisterForEventValidation can only be called during

Render(); ) 的错误,又检查代码,没发现问题啊,搞了一会弄不出来,然后搜索了一下,

发现了解决办法:

修改你的aspx文件中的:

<%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true"

CodeFile="" Inherits="Autho_SysUser2" %>

增加红色的部分就ok了。

下面是代码和截图:

#region 导出为Excel

public override void VerifyRenderingInServerForm(Control control)

{

// Confirms that an HtmlForm control is rendered for

}

private void ToExcel(Control ctl, string FileName)

{

t = "UTF-8";

tEncoding = 8;

tType = "application/ms-excel";

Header("Content-Disposition",

"attachment;filename=" + "" + FileName);

ViewState = false;

Writer tw = new Writer();

HtmlTextWriter hw = new HtmlTextWriter(tw);

Control(hw);

(ng());

();

}

private void toExcelClk()

{

aging = false;

orting = false;

nd();

ToExcel(gvSysUser, "OFS_");

aging = true;

orting = true;

nd();

}

#endregion

最新导出EXCEL类

说明:可以导出页面和DATAGRID(WebControl)数据,可以导出表单头