2010-08-06 62 views
0

我想導出數據集以使用以下代碼從asp.net頁面方法(webmethod)導出excel。導出數據集以使用asp.net從webmethod導出excel的問題

[WebMethod] 
    public static void ExporttoExcel() 
    { 
     DataSet ds; 
     productfactory pf=new productfactory(); 
     ds = pf.getproducts(); 
     HttpResponse response = HttpContext.Current.Response; 

     // first let's clean up the response.object 
     response.Clear(); 
     response.Charset = ""; 
     response.ContentEncoding = System.Text.Encoding.Default; 

     // set the response mime type for excel 
     response.ContentType = "application/vnd.ms-excel"; 
     response.AddHeader("Content-Disposition", "attachment;filename=\"products.xls\""); 

     // create a string writer 
     using (StringWriter sw = new StringWriter()) 
     { 
      using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
      { 
       // instantiate a datagrid 
       DataGrid dg = new DataGrid();      
       dg.DataSource = ds.Tables[0]; 
       dg.DataBind(); 
       dg.RenderControl(htw); 
       string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\products.xls";      
       response.Write(sw.ToString()); 
       // response.End(); 

      } 
     }  
    } 

上面的代碼似乎是工作以外的事情,下載文件對話框沒有打開詢問用戶「保存」 /「打開」對話框,因此我沒有看到響應是否被寫入OK到一個文件。相反,當我在Firebug中檢查響應時,我得到了HTML表格結構中的數據。

請問有人可以幫我嗎?

謝謝。

回答

0

如果你能得到你的產品數據轉換成一個DataTable,而不是嘗試以下操作:

protected void ExportToExcel(DataTable myTable, string name) 
    { 
     //Set Response 
     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment; filename="+name+".xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 

     //Print columns headers 
     //manually create column headers 
     Response.Write("Column1" + "\t"); 
     Response.Write("Column2" + "\t"); 
     Response.Write("\n"); 

     foreach (DataRow row in myTable.Rows) // Loop over the rows. 
     { 
      Response.Write(row["column1_database_name"].ToString() + "\t"); 
      Response.Write(row["column2_database_name"].ToString() + "\t"); 
      Response.Write("\n"); 
     } 

     //End Response 
     Response.End(); 
    }