NET导出Excel文件
更新时间:2024-01-31 09:28:01 阅读量: 教育文库 文档下载
- net导出word推荐度:
- 相关推荐
.NET导出Excel文件
最近做ASP.NET Excel导出功能,顺便整理了一下可用的一些导出Excel方法 一般导出方式
1,客户提出要将统计的结果导出到excel文件,首先利用如下方式:
增加 <%@page contentType=\头部说明,然后放一个table在该页面中即可了。
2,客户看过后提出了改进意见,要求保存文件的时候自动给文件一个名称,这样可以直接保存。 改进如下:
增加 response.setHeader(\\但是却又遇到了乱码的问题:
response.setHeader(\
\将文件名称的编码由GBK转换为ISO-8859-1就正常了。 GridView导出Excel
尝试了一下Gridview导出为Excel,原本以为很简单,可是真正应用起来还是不太好弄的,呵呵,所想非所得。总结了一下应该注意下面几点:
1.由于gridview的内容可能是分页显示的,因此,这里在每次导出excel时,先将gridview的allowpaging属性设置为false,然后databind()一下,确保搂到所有数据; 2.不用单独设置导出的路径,导出时会弹出对话框让你确认保存位置;
3.要写一个空的VerifyRenderingInServerForm方法(必须写),以确认在运行时为指定的ASP.NET 服务器控件呈现HtmlForm 控件; 4.导出后别忘记再重新设置其allowpaging属性;
当我把这些都设置好以后,点击[导出],出现了 只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during
Render(); ) 的错误,又检查代码,没发现问题啊,搞了一会弄不出来,然后搜索了一下,发现了解决办法:
修改你的aspx文件中的:
<%@ Page Language=\EnableEventValidation = \ AutoEventWireup=\CodeFile=\增加红色的部分就ok了。 下面是代码和截图: #region 导出为Excel
public override void VerifyRenderingInServerForm(Control control) {
// Confirms that an HtmlForm control is rendered for }
private void ToExcel(Control ctl, string FileName) {
HttpContext.Current.Response.Charset = \
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; HttpContext.Current.Response.ContentType = \ HttpContext.Current.Response.AppendHeader(\\ ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.End(); }
private void toExcelClk() {
gvSysUser.AllowPaging = false; gvSysUser.AllowSorting = false; gvSysUser.DataBind();
ToExcel(gvSysUser, \ gvSysUser.AllowPaging = true; gvSysUser.AllowSorting = true; gvSysUser.DataBind(); }
#endregion
最新ASP.NET导出EXCEL类
说明:可以导出ASP.NET页面和DATAGRID(WebControl)数据,可以导出表单头
using System;
using System.Data; using System.Text; using System.Web; using System.Web.UI; using System.Diagnostics;
using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Collections;
namespace bookstore { ///
/// Excel 的摘要说明。 ///
public class Excel {
public Excel() { //
// TODO: 在此处添加构造函数逻辑 // }
public void SaveToExcel(Page myPage, DataTable dt,DataGrid DG,string myExcelHeader,HtmlTable Tab,string myFileName) {
HttpResponse resp; resp=myPage.Response;
resp.ContentEncoding=Encoding.GetEncoding(\
resp.AppendHeader(\);
resp.ContentType=\
string colHeaders = \ colHeaders+=tableHeader(Tab)+\ StringBuilder sb=new StringBuilder();
int mycol=DG.Columns.Count; ArrayList myAL=new ArrayList();
for(int i=0;i {
colHeaders +=DG.Columns[i].HeaderText+\
myAL.Add(((System.Web.UI.WebControls.BoundColumn)(DG.Columns[i])).DataField); }
colHeaders += \
sb.Append(colHeaders); int myrow=dt.Rows.Count; for(int k=0;k {
foreach(string field in myAL) {
sb.Append(dt.Rows[k][field]); sb.Append(\ }
sb.Append(\ }
colHeaders=sb.ToString(); colHeaders=colHeaders+\ resp.Write(colHeaders); resp.End(); resp.Clear(); resp.Close(); }
/*得到表单头子*/
/*表单头子有TABLE组成,偶次项排列,TABLE在HTML中加 RUNAT=SERVER*/ public string tableHeader(HtmlTable Tab) {
int iCols=Tab.Rows[0].Cells.Count; int iRows=Tab.Rows.Count; string str=\
for(int row=0;row { for(int col=0;col {
if(col%2==1)//取偶次项的控件数据(目前只有TextBox和DropDownList,没有包含LABEL) { try {
if(Tab.Rows[row].Cells[col].Controls[0].ToString()==\ {
if(Tab.Rows[row].Cells[col].Controls[1].ToString()==\extBox\
{
str+=((System.Web.UI.WebControls.TextBox)(Tab.Rows[row].Cells[col].Controls[1])).Text+\ }
if(Tab.Rows[row].Cells[col].Controls[1].ToString()==\DropDownList\ {
str+=((System.Web.UI.WebControls.ListControl)(((System.Web.UI.WebControls.DropDownList)((Tab.Rows[row].Cells[col].Controls[1]))))).SelectedValue+\ } } else {
if(Tab.Rows[row].Cells[col].Controls[0].ToString()==\extBox\ {
str+=((System.Web.UI.WebControls.TextBox)(Tab.Rows[row].Cells[col].Controls[0])).Text+\ }
if(Tab.Rows[row].Cells[col].Controls[0].ToString()==\DropDownList\ {
str+=((System.Web.UI.WebControls.ListControl)(((System.Web.UI.WebControls.DropDownList)((Tab.Rows[row].Cells[col].Controls[0]))))).SelectedValue+\ } } }
catch {
str+=Tab.Rows[row].Cells[col].InnerHtml+\ }
if((col+1)%iCols==0) {
str+=\ } } else {
str+=\ } } }
return(str); }
} }
ASP.NET导出Excel、World文档
对于大量的数据,有时候导出到Excel中将更加方便进行数据统计分析,而对于排版打印则导出到World文档中更加方便。在ASP.NET可以通过少量代码实现这两种导出。 新建一页面,该页面布局Html源码如下:
这里没有什么特别的,只需要注意在线打开与本地保存两个按钮通过CommandName进行检验并触发相应的动作,DropDownList控件存放了可以导出的格式,可以自己添加如txt、html等格式。准备工作就绪以后,可以进行代码的书写,以完成我们需要的功能: protected void Page_Load(object sender, EventArgs e) {
FillGridView(); }
private void OutPut(string fileType, string strType) {
Response.Clear();
Response.Buffer = true;
Response.Charset = \
Response.AppendHeader(\ Response.ContentType = strType; this.EnableViewState = false;
System.IO.StringWriter swOut = new System.IO.StringWriter(); HtmlTextWriter hTw = new HtmlTextWriter(swOut);
myGW.RenderControl(hTw);
Response.Write(swOut.ToString()); Response.End(); }
protected void Button_Click(object sender, CommandEventArgs e) {
switch (e.CommandName) {
case \
switch (listType.SelectedValue) {
case \
OutPut(\; break; case \
OutPut(\ break; }
break; case \
switch (listType.SelectedValue) {
case \
OutPut(\ break; case \
OutPut(\ break; }
break; } }
public override void VerifyRenderingInServerForm(Control control) { }
private void FillGridView() {
string strConn = \id=sa;password=sa123\
SqlConnection conn = new SqlConnection(strConn); SqlCommand comm = new SqlCommand(); comm.Connection = conn;
string strSql = \ comm.CommandText = strSql;
conn.Open();
this.myGW.DataSource = comm.ExecuteReader(); this.myGW.DataBind(); conn.Close(); }
在以上的程序中,最主要的就是函数OutPut(string fileType, string strType),它完成导出或在线打开的动作,这里接受两个参数其中fileType指定是保存或在线打开,并且指名了文件的名字如:attachment;filename=out.xls(作为附件保存,文件名为out.xls)、online;filename=out.xls(在线打开);strType指定了带出文档的格式如application/ms-excel。
注意如果想要导出GridView中的数据并且要我们的程序顺利执行,则必须重写VerifyRenderingInServerForm(Control control),否则会报错的。
如果我们想要将整个页面导出到Excel中,则不需要重写
VerifyRenderingInServerForm,只需要将OutPut函数中的myGW.RenderControl(hTw)改为this.RenderControl(hTw)就可以了。
完成以上工作,在浏览器中测试,我们想要的导出功能就可以很好的工作了。 利用Office中导出的Excel.dll(DCOM方式)
这个类可以很好的控制Excel。读出内容想怎么导就怎么导 ///
public class ExcelHander {
public ExcelHander() { //
// TODO: Add constructor logic here // }
private string AList=\
public string GetAix(int x,int y) {
char [] AChars=AList.ToCharArray(); if(x>=26){return \ string s=\
s=s+AChars[x-1].ToString(); s=s+y.ToString(); return s; }
public void setValue(int x,int y,string align,string text) {
Excel.Range range=sheet.get_Range(this.GetAix(x,y),miss); range.set_Value(miss,text); if(align.ToUpper()==\ {
range.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter; }
if(align.ToUpper()==\ {
range.HorizontalAlignment=Excel.XlHAlign.xlHAlignLeft; }
if(align.ToUpper()==\ {
range.HorizontalAlignment=Excel.XlHAlign.xlHAlignRight; } }
public void setValue(int x,int y,string text) {
Excel.Range range=sheet.get_Range(this.GetAix(x,y),miss); range.set_Value(miss,text); }
public void setValue(int x,int y,string text,System.Drawing.Font font,System.Drawing.Color color) {
this.setValue(x,y,text);
Excel.Range range=sheet.get_Range(this.GetAix(x,y),miss); range.Font.Size=font.Size; range.Font.Bold=font.Bold; range.Font.Color=color;
range.Font.Name=font.Name; range.Font.Italic=font.Italic;
range.Font.Underline=font.Underline; }
public void insertRow(int y) {
Excel.Range range=sheet.get_Range(GetAix(1,y),GetAix(25,y)); range.Copy(miss);
range.Insert(Excel.XlDirection.xlDown,miss); range.get_Range(GetAix(1,y),GetAix(25,y)); range.Select();
sheet.Paste(miss,miss);
}
public void past() {
string s=\
sheet.Paste(sheet.get_Range(this.GetAix(10,10),miss),s); }
public void setBorder(int x1,int y1,int x2,int y2,int Width) {
Excel.Range range=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2)); range.Borders.Weight=Width; }
public void mergeCell(int x1,int y1,int x2,int y2) {
Excel.Range range=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2)); range.Merge(true); }
public Excel.Range getRange(int x1,int y1,int x2,int y2) {
Excel.Range range=sheet.get_Range(this.GetAix(x1,y1),this.GetAix(x2,y2)); return range; }
private Missing miss=Missing.Value; //忽略的参数OLENULL public static Missing MissValue=Missing.Value;
private Excel.Application m_objExcel;//Excel应用程序实例 private Excel.Workbooks m_objBooks;//工作表集合 private Excel.Workbook m_objBook;//当前操作的工作表 private Excel.Worksheet sheet;//当前操作的表格
public Excel.Worksheet CurrentSheet { get {
return sheet; } set {
this.sheet=value; } }
public Excel.Workbooks CurrentWorkBooks {
get {
return this.m_objBooks; } set {
this.m_objBooks=value; } }
public Excel.Workbook CurrentWorkBook { get {
return this.m_objBook; } set {
this.m_objBook=value; } }
public void OpenExcelFile(string filename) {
m_objExcel = new Excel.Application(); UserControl(false);
m_objExcel.Workbooks.Open( filename, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss, miss);
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = m_objExcel.ActiveWorkbook;
sheet = (Excel.Worksheet)m_objBook.ActiveSheet; }
public void UserControl(bool usercontrol) {
if(m_objExcel==null){return ;}
m_objExcel.UserControl=usercontrol; m_objExcel.DisplayAlerts=usercontrol; m_objExcel.Visible = usercontrol; }
public void CreateExceFile() {
m_objExcel = new Excel.Application(); UserControl(false);
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks; m_objBook = (Excel.Workbook)(m_objBooks.Add(miss)); sheet = (Excel.Worksheet)m_objBook.ActiveSheet; }
public void SaveAs(string FileName) {
m_objBook.SaveAs(FileName, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange,
Excel.XlSaveConflictResolution.xlLocalSessionChanges, miss,miss, miss, miss);
//m_objBook.Close(false, miss, miss); }
public void ReleaseExcel() {
m_objExcel.Quit();
Marshal.ReleaseComObject(m_objExcel); Marshal.ReleaseComObject(m_objBooks); Marshal.ReleaseComObject(m_objBook); Marshal.ReleaseComObject(sheet); GC.Collect(); } } 前台
<%@ Page Language=\ AutoEventWireup=\ CodeFile=\Excle.aspx.cs\ Inherits=\ %>