2016-01-18 18 views
0

У меня есть старый веб-сайт, разработанный в asp.net 2.0 и C#, я хочу сохранить данные из базы данных или DataTable в файл Excel.Как сохранить данные из базы данных или DataTable в файл Excel без ответа в .net 2.0

Я много искал в интернете, но ТОЛЬКО нашел решения, используя HttpResponce «Responce.Write», но это решение не будет работать, если файл большой, поэтому я хочу, чтобы решение было физически сохранено на жестком диске.

ответ

0

я нашел решение, если я не не Excel, установленный на машине и решил поделиться ею с общественным

Решением 1 (если вам нужно сохранить первенствовать файл физически на жестком диске)

вам потребуется GridView поместить данные в ней первым без CSS или стили просто получить выбранные данные из базы данных в формате вам нужно на Excel файл

<!-- GridView to bind data from DatasSet--> 
 
<asp:GridView ID="GridView2" runat="server" Visible="False"></asp:GridView> 
 
<!-- HyperLink to put the link of the saved file --> 
 
<asp:HyperLink ID="HyperLink1" runat="server" Visible="False">HyperLink</asp:HyperLink>

код за

private void ConvertDataSetToExcelFile(DataSet ds) 
    { 
     GridView2.DataSource = ds.Tables[0]; 
     GridView2.DataBind(); 
     string FileName = DateTime.Now.Ticks.ToString() + ".xls"; 
     string FilePath = Server.MapPath("~/upload/excel/"); 

     GridView2.Visible = true; 
     System.IO.StringWriter sw = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 
     GridView2.RenderControl(htw); 
     string renderedGridView = sw.ToString(); 
     System.IO.File.WriteAllText(FilePath + FileName, renderedGridView); 
     GridView2.Visible = false; 

     HyperLink1.Visible = true; 
     HyperLink1.NavigateUrl = "~/upload/excel/" + FileName; 
     HyperLink1.Text = "Download File"; 
    } 

Просто Обратите внимание, что вам нужно сделать GridView видимым истинным первым, чтобы сделать его в файл, если он не виден ложно, то ничего, чтобы сделать, то вы можете сделать это ложь снова он используется только для хранения данных, а затем вынести его в файл




Решение 2 (если вам нужно просто создать файл на лету, то просто скачайте его клиенту напрямую)

Сразу отметим, что я нашел эти функции на моем поиске, но я не пытаюсь, то, как мне нужно первое решение, но только хотело поделиться другим решением для общественности, а также

public static void ExportToExcel(ref GridView gv, string _filename, string cmplbl) 
{ 

    string style = @"<style>.text{mso-number-format:\@;text-align:center;};.Nums{mso-number-format:_(* #,###.00_);};.unwrap{wrap:false}</style>"; 
    //string style = @"<style> .text { mso-number-format:\@; } </style> "; 

    // "<style>.text{mso-number-format:\@;text-align:center;};.Nums{mso-number-format:_(* #,##0.00_);};.unwrap{wrap:false}</style>" 

    string attachment = "attachment; filename=" + _filename; 
    HttpContext.Current.Response.ClearContent(); 

    HttpContext.Current.Response.AddHeader("content-disposition", attachment); 
    // If you want the option to open the Excel file without saving then; 
    // comment out the line below 
    // Response.Cache.SetCacheability(HttpCacheability.NoCache); 

    HttpContext.Current.Response.ContentType = "application/ms-excel"; 
    //Response.AddHeader("Content-Disposition", "attachment;Filename=Orders.xls"); 

    //Response.Write ("<meta http-equiv=""Content-Type"" content=""text/html; charset=Utf-8"">") 

    StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); 
    gv.RenderControl(htw); 
    StringBuilder name = new StringBuilder(); 
    name.Append(cmplbl); 
    HttpContext.Current.Response.Write(style); 
    HttpContext.Current.Response.Write(name.Append(sw.ToString())); 
    //HttpContext.Current.Response.Write(sw.ToString()); 

    HttpContext.Current.Response.End(); 

    //HttpContext.Current.Response.WriteFile(_filename); 
    //Response.ContentType = "application/vnd.ms-excel" 
    //Response.AddHeader("Content-Disposition", "attachment;Filename=Orders.xls") 
    //Response.Write ("<meta http-equiv=""Content-Type"" content=""text/html; charset=Utf-8"">") 
    //dbGrid_Orders.RenderControl(hw) 
    //Response.Write(tw.ToString()) 
    //Response.End() 
} 

private void ExportGridView(GridView gvFiles, string filePath, string fileName) 
{ 
    System.IO.StringWriter sw = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 

    // Render grid view control. 
    gvFiles.RenderControl(htw); 

    // Write the rendered content to a file. 
    string renderedGridView = sw.ToString(); 
    System.IO.File.WriteAllText(filePath + fileName, renderedGridView); 

    //Response.Clear(); 
    //Response.ContentType = "application/octect-stream"; 
    //Response.AppendHeader("content-disposition", "filename=" + fileName); 
    //Response.TransmitFile(filePath + fileName); 
    //Response.End(); 

    System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
    response.ClearContent(); 
    response.Clear(); 
    response.ContentType = "text/plain"; 
    response.AddHeader("Content-Disposition", 
         "attachment; filename=" + fileName + ";"); 
    response.TransmitFile(filePath + fileName); 
    response.Flush(); 
    response.End(); 
} 
0

В большинстве случаев вам даже понадобится установить MS Excel на компьютере, где вы хотите запустить приложение, чтобы использовать библиотеки, связанные с Excel (то есть пространство имен Microsoft.Office.Interop). Не могли бы вы использовать CSV-файлы? Это может быть намного проще. Просто загрузите объект DataTable в FileStream и сохраните файл.

+0

это работает на совместном хостинге, таком как Godaddy.com !!! ??? – Mariam

+0

спасибо, но я только что нашел решение, если у меня нет excel, установленного на моем сервере веб-сервера – Mariam

0

Какая у вас среда, в какую версию Excel должен быть нацелен файл результатов? В зависимости от этого ответ может быть другим. Но более или менее общий - попробуйте использовать GemBox.Spreadsheet, который не требует установки Excel, но он имеет ограничения в бесплатной версии.

+0

спасибо, но я только нашел решение, если у меня нет excel, установленного на моей машине веб-сервера – Mariam