2016-06-20 20 views
0

Ich erhalte den Fehler Worksheet names cannot be empty beim Herunterladen von Daten im Excel-Dokument. Unten ist mein Code aus, wo ich Störung erhalteArbeitsblattnamen dürfen nicht leer sein

protected void btnDownloadExcel_OnClick(object sender, EventArgs e) 
{ 
    try 
    { 
     DataTable dt = GetReportData(); 
     if (dt.Rows.Count > 0) 
     { 
      string fileName = drpReports.SelectedItem.ToString(); 
      using (XLWorkbook excel = new XLWorkbook()) 
      { 
       //error from below line 
       excel.Worksheets.Add(dt); 
       excel.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; 
       excel.Style.Font.Bold = true; 
       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx"); 

       using (var myMemoryStream = new MemoryStream()) 
       { 
        excel.SaveAs(myMemoryStream); 
        myMemoryStream.WriteTo(Response.OutputStream); 
        Response.Flush(); 
        HttpContext.Current.Response.End(); 
       } 
      } 
     } 
     else 
     { 
      ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('No records found. Please check the selection criteria.');</script>", false); 

     } 
    } 
    catch (Exception ex) 
    { 
     ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('Oops..!! some error occured. Please contact to administrator.');</script>", false); 
     log4net.ThreadContext.Properties["loginid"] = LoggedInUserDetails.LoginId.ToString(); 
     Log.Error(ex.Message, ex); 
    } 

} 

Ich erhalte Fehler bei excel.Worksheets.Add(dt); während mein Datatable Zugabe zu übertreffen. Kann mir jemand sagen, wo ich falsch liege?

+0

erklären Sie einfach festlegen müssen 'DataTable.TableName' Eigenschaft som Alles, was der Name des Blattes wird. – Alex

+0

Ich habe bereits den Datatable-Tabellennamen gesetzt, hat immer noch Fehler – Juran

+0

Hinzufügen YourDataTableName.TableName = "Enter_a_Name_same_as_Excelsheetname"; Bevor Sie Ihr XLWorkbook wb = neues XLWorkbook() deklarieren. –

Antwort

0
protected void btnDownloadExcel_OnClick(object sender, EventArgs e) 
    { 
     try 
     { 
      DataTable dt = GetReportData(); 
      if (dt.Rows.Count > 0) 
      { 
       string fileName = drpReports.SelectedItem.ToString(); 
       string attachment = "attachment;filename=" + fileName + ' ' + DateTime.Now.ToShortDateString() + ".xlsx"; 
       Response.ClearContent(); 
       Response.AddHeader("content-disposition", attachment); 
       Response.ContentType = "application/vnd.ms-excel"; 
       string tab = ""; 
       foreach (DataColumn dc in dt.Columns) 
       { 
        Response.Write(tab + dc.ColumnName); 
        tab = "\t"; 
       } 
       Response.Write("\n"); 
       int i; 
       foreach (DataRow dr in dt.Rows) 
       { 
        tab = ""; 
        for (i = 0; i < dt.Columns.Count; i++) 
        { 
         Response.Write(tab + dr[i].ToString()); 
         tab = "\t"; 
        } 
        Response.Write("\n"); 
       } 
       HttpContext.Current.Response.Flush(); // Sends all currently buffered output to the client. 
       HttpContext.Current.Response.SuppressContent = true; // Gets or sets a value indicating whether to send HTTP content to the client. 
       HttpContext.Current.ApplicationInstance.CompleteRequest(); // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event. 

      } 


      else 
      { 
       ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('No records found. Please check the selection criteria.');</script>", false); 

      } 
     } 
     catch (Exception ex) 
     { 
      ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('Oops..!! some error occured. Please contact to administrator.');</script>", false); 
      log4net.ThreadContext.Properties["loginid"] = LoggedInUserDetails.LoginId.ToString(); 
      Log.Error(ex.Message, ex); 
     } 

    } 
+0

ausgeführt werden, sollte es Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; ? Ich habe versucht, diesen MIME-Typ zu verwenden und es sagt, dass die Datei beschädigt ist – Juran

2

Ich kann das erwähnte Problem beim Versuch, eine DataTable ohne Tabellenname hinzuzufügen, sehen. Als ich mit einer DataTable mit Tabellenname versuchte, funktionierte es gut. In diesem Fall wird der DataTable-Name als Name des Arbeitsblatts beibehalten.

using ClosedXML.Excel; 
using System; 
using System.Data; 

namespace ClosedXML_Test 
{ 
class Program 
{ 
    /// <summary> 
    /// This example method generates a DataTable. 
    /// </summary> 
    static DataTable GetTable() 
    { 
     DataTable table = new DataTable("Test");//DataTable with name - works fine 
     //DataTable table = new DataTable("Test"); //DataTable without name - issue reproduced as you mentioned 
     table.Columns.Add("Dosage", typeof(int)); 
     table.Columns.Add("Drug", typeof(string)); 
     table.Columns.Add("Patient", typeof(string)); 
     table.Columns.Add("Date", typeof(DateTime)); 

     // Here we add five DataRows. 
     table.Rows.Add(25, "Indocin", "David", DateTime.Now); 
     table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); 
     table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); 
     table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); 
     table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); 
     return table; 
    } 
    static void Main(string[] args) 
    { 
     var workbook = new XLWorkbook(); 
     var worksheet = workbook.Worksheets.Add(GetTable()); 
     workbook.SaveAs("Sample.xlsx"); 
     workbook.Dispose(); 

     System.Diagnostics.Process.Start("Sample.xlsx"); 
    } 
} 
} 
+0

Ich habe dies versucht, es erscheint ein Fehler "Zugriff auf den Pfad 'C: \ Programme \ IIS Express \ Sample.xlsx' wird verweigert." – Juran

+0

@Juran überprüfen Sie meine Antwort – Steve

+0

ich @vijayakumar Antwort verwendet, aber ich sollte als Administrator mit Visual Studio – Juran

0

YourDataTableName.TableName = "Enter_a_Name_same_as_Excelsheetname"; 

hinzufügen Bevor Sie

XLWorkbook excel= new XLWorkbook() 

oder

var ws= excel.Worksheets.Add(table);  
ws.Name="Enter_a_Name_same_as_Excelsheetname"; 
Verwandte Themen