谁有asp.net导出excel的代码,普通导出代码也可以,水晶报表导出也可以!求救高手!

解决方案 »

  1.   

    private void outExcelBtn_ServerClick(object sender, System.EventArgs e)
       {
                  string filename = "FileFlow.xls";              OutPutExcel(filename);
       }   public void OutPutExcel(string filename)
       {
                    //定义文档类型、字符编码
                    Response.Clear();
               Response.Buffer= true;
               Response.Charset="GB2312";
                   //下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开
              //filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm
               Response.AppendHeader("Content-Disposition","attachment;filename=" + filename);
               Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
              //Response.ContentType指定文件类型 可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档
               Response.ContentType = "application/ms-excel";
              this.EnableViewState = false;
                  // 定义一个输入流
               System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
               System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
       
                   this.dg_xm.RenderControl(oHtmlTextWriter);
                  //this.RenderControl(oHtmlTextWriter);
              //this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件
               Response.Write(oStringWriter.ToString());
               Response.End();
       }
      

  2.   

            Response.ClearContent();
            Response.ClearHeaders();        Response.ContentType = "application/vnd.ms-excel";
            Response.Charset = "utf-8";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");        string fileName = HttpUtility.UrlEncode("Employee", System.Text.Encoding.UTF8);        Response.AddHeader("content-disposition","attachment;filename=\"" + fileName + ".xls\"");
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);        GridView1.RenderControl(htw);        Response.Write(sw.ToString());
            Response.End();
      

  3.   

    #region 导出到excel
        /// <summary>
        /// 导出到excel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnExportExcel_Click(object sender, EventArgs e)
        {
            try
            {
                System.Data.DataTable dt = dtSource;
                string TemplatePath = Server.MapPath(@"Template\Third.xls");
                string ExportPath = Server.MapPath("") + @"\ExportReports";            if (!Directory.Exists(ExportPath))
                {
                    Directory.CreateDirectory(ExportPath);
                }            Excel.Application app = new Excel.Application();            if (app == null)
                {
                    return;
                }
                app.Visible = false;
                app.UserControl = true;
                Workbooks workbooks = app.Workbooks;
                _Workbook workbook = workbooks.Add(TemplatePath);
                Sheets sheets = workbook.Worksheets;
                _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);            if (worksheet == null)
                {
                    return;
                }            int i = 1;            for (; i <= dt.Rows.Count; i++)
                {
                    int j = 0;
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["Month"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["PatientTypeName"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["OutCount"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["BedDayCount"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["AverageDay"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["TotalCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["BedCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["MedicineCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["CureCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["CheckUpCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["VerifyCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["PerAverageCharge"].ToString().Trim();
                    worksheet.Cells[i + 2, ++j] = dt.Rows[i - 1]["DayAverageCharge"].ToString().Trim();
                }            string str = DateTime.Now.ToString("yyyyMMddHHmmss");
                string strExportPath = ExportPath + @"\" + str + ".xls";            workbook.SaveAs(strExportPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);            //结束Excel进程
                Process[] p = Process.GetProcesses();
                for (int x = 0; x < p.Length; x++)
                {
                    if (p[x].ProcessName == "EXCEL")
                    {
                        p[x].Kill();
                    }
                }            app = null;            Response.Redirect("DownLoad.aspx?Path=" + strExportPath);
            }
            catch
            {
                Response.Write("<script>alert('导出失败!!')</script>");
                return;
            }
        }
        #endregion以上是导出到服务器上下面是下载到本地
    #region 下载服务器上的文件
        /// <summary>
        /// 下载服务器上的文件
        /// </summary>
        /// <param name="PageResponse">程序中可以设置参数:HttpResponse ht=Page.Response;</param>
        /// <param name="serverPath">服务器上的文件路径</param>
        public void DownloadFile(HttpResponse response, string serverPath)
        {
            FileStream fs = null;
            try
            {
                fs = File.OpenRead(serverPath);
                byte[] buffer = new byte[1024];
                long count = 1024;
                response.Buffer = true;
                response.AddHeader("Connection", "Keep-Alive");
                response.ContentType = "application/octet-stream";
                response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(serverPath));//下载时要保存的默认文件名
                response.AddHeader("Content-Length", fs.Length.ToString());
                while (count == 1024)
                {
                    count = fs.Read(buffer, 0, 1024);
                    response.BinaryWrite(buffer);
                }
            }
            catch
            {
            }
            finally
            {
                fs.Close();
            }
        }
        #endregion
      

  4.   

    Private Sub outExcelBtn_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) 
        Dim filename As String = "FileFlow.xls" 
        
        OutPutExcel(filename) 
    End Sub Public Sub OutPutExcel(ByVal filename As String) 
        '定义文档类型、字符编码 
        Response.Clear() 
        Response.Buffer = True 
        Response.Charset = "GB2312" 
        '下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开 
        'filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm 
        Response.AppendHeader("Content-Disposition", "attachment;filename=" & filename) 
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312") 
        'Response.ContentType指定文件类型 可以为application/ms-excel、application/ms-word、application/ms-txt、application/ms-html 或其他浏览器可直接支持文档 
        Response.ContentType = "application/ms-excel" 
        Me.EnableViewState = False 
        ' 定义一个输入流 
        Dim oStringWriter As New System.IO.StringWriter() 
        Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter) 
        
        Me.dg_xm.RenderControl(oHtmlTextWriter) 
        'this.RenderControl(oHtmlTextWriter); 
        'this 表示输出本页,你也可以绑定datagrid,或其他支持obj.RenderControl()属性的控件 
        Response.Write(oStringWriter.ToString()) 
        Response.[End]() 
    End Sub 
      

  5.   

     
     1. Asp.net 2.0 GridView数据导出Excel文件(示例代码下载):
       http://blog.csdn.net/ChengKing/archive/2006/08/27/1128385.aspx 2. Asp.net 2.0 装载XML文件中数据到Excel文件中(示例代码下载):
       http://blog.csdn.net/ChengKing/archive/2006/08/10/1045853.aspx 3. 生成/读取(反向更新数据库) Excel文件(示例代码下载):
       http://blog.csdn.net/ChengKing/archive/2005/11/29/539514.aspx
      

  6.   

    尝试了一下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="C#" EnableEventValidation = "false" AutoEventWireup="true"  CodeFile="SysUser.aspx.cs" Inherits="Autho_SysUser2" %>  
    增加红色的部分就ok了。
        public override void  VerifyRenderingInServerForm(Control control)
        {
            // Confirms  that an HtmlForm control is rendered for
        }    public static  void ToExcel(Control ctl, string FileName)
        {  
            HttpContext.Current.Response.Charset = "gb2312";  
            HttpContext.Current.Response.ContentEncoding =  System.Text.Encoding.Default;  
            HttpContext.Current.Response.ContentType = "application/ms-excel";  
            HttpContext.Current.Response.AppendHeader("Content-Disposition",  "attachment;filename=" + "" + FileName);
            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();
        }但是一试,便出现了乱码,解决方案如下  
        public static void Export(System.Web.UI.Page page, System.Web.UI.Control  dg, string fileName, string typeName)
        {  
            System.Web.HttpResponse httpResponse =page.Response;  
            httpResponse.AppendHeader  
                                  ("Content-Disposition", "attachment;filename="  
                                   + HttpUtility.UrlEncode(fileName,  System.Text.Encoding.UTF8));
            httpResponse.ContentEncoding =  System.Text.Encoding.GetEncoding("GB2312");
            httpResponse.ContentType  = typeName;
            System.IO.StringWriter tw = new  System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter hw = new  System.Web.UI.HtmlTextWriter(tw);
            dg.RenderControl(hw);  
            string filePath = page.Server.MapPath("..") + fileName;  
            System.IO.StreamWriter sw = System.IO.File.CreateText(filePath);  
            sw.Write(tw.ToString());
            sw.Close();
              
            DownFile(httpResponse, fileName, filePath);  
            httpResponse.End();
        }
        public static bool  DownFile(System.Web.HttpResponse Response, string fileName, string fullPath)  
        {
            try
            {
                Response.ContentType =  "application/octet-stream";  
                Response.AppendHeader("Content-Disposition",  "attachment;filename=" +
                    HttpUtility.UrlEncode(fileName,  System.Text.Encoding.UTF8) + ";charset=GB2312");  
                System.IO.FileStream fs = System.IO.File.OpenRead(fullPath);  
                long fLen = fs.Length;
                int size =  102400;//每100K同时下载数据
                byte[] readData = new byte[size];//指定缓冲区的大小  
                if (size > fLen) size = Convert.ToInt32(fLen);  
                long fPos = 0;
                bool isEnd = false;  
                while (!isEnd)
                {
                    if ((fPos +  size) > fLen)
                    {
                        size =  Convert.ToInt32(fLen - fPos);
                        readData = new byte[size];  
                        isEnd = true;
                    }  
                    fs.Read(readData, 0, size);//读入一个压缩块  
                    Response.BinaryWrite(readData);
                    fPos +=  size;
                }
                fs.Close();  
                System.IO.File.Delete(fullPath);
                return true;  
            }
            catch
            {
                return false;  
            }
        }
    怎么调用?? 其实就是怎么调用Export这个函数罢了.  以上方法可以很有效地解决导出的乱码问题 
      

  7.   

    http://www.crazycoder.cn/DotNet/Article21807.html
    参考
    http://topic.csdn.net/t/20060421/14/4703905.html
      

  8.   

    asp.net页面导出为Excel文档
    http://www.code-123.com/html/20087151126531090290.html
    Asp.Net页面输出到EXCEL
    http://www.code-123.com/html/20087151126531054137.html
    asp.net教程
      

  9.   

    可以看一下这个。
    asp.net导出Excel