2013-10-15 98 views
7

我試圖將包含4個表格的數據集導出到excel工作表中,但不幸的是我不能。我有代碼將數據表導出爲ex​​cel。因此,我沒有使用數據集,而是調用了我的代碼中的「ExportToExcel」函數,將數據表導出爲ex​​cel 4次。但一旦它創建了第一張紙,就會停止控制流程。控制不調用第二函數(「ExportToExcel(dsResult.Tables [2],‘AthleteSentCount’);」)以下是代碼將數據集導出到asp.net中的Excel工作表中c#

protected void ExportToExcel(object sender, EventArgs e) 
{ 
    ExportToExcel(dsResult.Tables[3], "AthleteInboxCount"); 
    ExportToExcel(dsResult.Tables[2], "AthleteSentCount"); 
    ExportToExcel(dsResult.Tables[0], "CoachInboxCount"); 
    ExportToExcel(dsResult.Tables[1], "CoachSentCount"); 
} 

void ExportToExcel(DataTable dt, string FileName) 
{ 
    if (dt.Rows.Count > 0) 
    { 
     string filename = FileName + ".xls"; 
     System.IO.StringWriter tw = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); 
     DataGrid dgGrid = new DataGrid(); 
     dgGrid.DataSource = dt; 
     dgGrid.DataBind(); 

     //Get the HTML for the control. 
     dgGrid.RenderControl(hw); 
     //Write the HTML back to the browser. 
     //Response.ContentType = application/vnd.ms-excel; 
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.AppendHeader("Content-Disposition", 
           "attachment; filename=" + filename + ""); 
     this.EnableViewState = false; 
     Response.Write(tw.ToString()); 
     Response.End(); 
    } 
} 

如果任何身體知道到數據集導出到Excel中與條形圖請幫助我。否則,請給出解決問題的辦法。

在此先感謝。

+0

ü[R什麼問題越來越在這? – SANDEEP

+0

感謝您的回覆。一旦它創建了第一張Excel表格,即一旦「ExportToExcel(dsResult.Tables [3],」AthleteInboxCount「);」函數得到了執行 –

+0

ys爲什麼不呢?嘗試循環傳遞datatabe直到數據集長度爲 – SANDEEP

回答

4

所有的功能首先啓動流媒體內容

Response.ContentType = "application/vnd.ms-excel"; 
       Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + ""); 

到最終用戶,並與

Response.End(); 

而且結束它,如果你解決這個問題你的代碼將產品4個Excel文件。

存在用於在堆棧溢出上創建Excel工作表的現有代碼:How to add additional worksheets to an Excel from DataTable 您必須做出的唯一更改是將xlsx保存爲流並將此流傳輸給用戶。

+0

謝謝@Garath,你的文章對我很有用。我必須做一些像語法一樣的小改動。但它效果很好。再次感謝。 –

+0

我可以知道爲什麼控制在上面的代碼中創建第一張時停止? –

+0

@ArunKumarT代碼不會激動地停止,但是因爲您調用了'Response.End();'其餘代碼不會發送給最終用戶。 –

0

歡迎下載並使用我的免費C#庫將DataSet導出到「真實」Excel .xlsx文件。

它使用Microsoft OpenXML庫,只需一行代碼。

Export to Excel

它看起來像你的代碼是一個ASP.Net Web應用程序,因此,使用我的圖書館,你的代碼只是看起來像這樣:

protected void ExportToExcel(object sender, EventArgs e) 
{ 
    CreateExcelFile.CreateExcelDocument(dsResult, "YourExcelfilename.xlsx", Response); 
} 

只是一個代碼行,你會得到一個真正的Excel文件寫入你的頁面的響應

它將在DataSet中爲每個DataTable包含一個工作表。

0

以下是一些關於如何export dataset to Excel的源代碼示例。您可以使用ExcelWorksheet.easy_insertDataSet方法插入多個數據表。

關於其它問題,請在此代碼bar chart和調整代碼來生成柱狀圖是這樣的:

xlsChart.easy_setChartType(Chart.CHART_TYPE_BAR_CLUSTERED); 
1

寫在WCF & ASMX


但我用EPPuls。 dlll文件的開源dll。請查看下面的鏈接以供參考。 http://epplus.codeplex.com/

代碼:

string excelFileName = @"E:\GOPI_16122016.xls"; 
DataTable dt = ds.Tables[0]; 
string worksheetsName = "Report"; 
ExcelPackage pack = new ExcelPackage(); 
ExcelWorksheet wrkSht = pack.Workbook.Worksheets.Add(worksheetsName); 
wrkSht.Cells["A1"].LoadFromDataTable(dt, true); 
pack.SaveAs(new FileInfo(excelFileName)); 
    MailMessage msg = new MailMessage(); 
       msg.To.Add(new MailAddress("[email protected]", "GOPIKRISHNA")); 

       msg.From = new MailAddress("[email protected]", "Domain"); 
       msg.Subject = "REPORTS"; 
       string str = "Dear Team,<br/> Please find the Reports Details <br/><br/>"; 
       Attachment attachment = new System.Net.Mail.Attachment(excelFileName); 
       msg.Attachments.Add(attachment); 
       msg.Body = str ; 
       msg.IsBodyHtml = true; 
       SmtpClient client = new SmtpClient(); 
       client.UseDefaultCredentials = false; 
       client.Credentials = new System.Net.NetworkCredential("[email protected]", ""); 
       client.Port = 25; // You can use Port 25 if 587 is blocked (mine is!) 
       client.Host = "[email protected]"; 
       client.DeliveryMethod = SmtpDeliveryMethod.Network; 
       client.EnableSsl = true; 
       client.Send(msg); 
+0

如果你可以詳細說明你的答案,清理代碼,並適應一下下載excel文件而不是電子郵件的特定情況(例如'Response'部分),我想你會不僅幫助OP而且還幫助許多其他人。 EPPlus比許多其他替代方案強大和簡單 –

相關問題