Экспорт ASP.NET в Excel показывает HTML-разметку в электронной таблице - PullRequest
0 голосов
/ 27 июня 2011

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

 private static void ExportDataSetToExcel(DataTable dataTable, string filename)
      {
         HttpResponse response = HttpContext.Current.Response;

         // first let's clean up the response.object
         response.Clear();
         response.Charset = "";

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

         // create a string writer
         using(StringWriter sw = new StringWriter())
         {
            using(HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
               // instantiate a datagrid
               DataGrid dg = new DataGrid {DataSource = dataTable};
               dg.DataBind();
               dg.RenderControl(htw);
               response.Write(sw.ToString());
               response.End();
            }
         }
      }

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Строго говоря, это не экспорт в Excel, это хак, основанный на том факте, что Excel будет читать html-таблицу, и вы отправляете неверные параметры клиенту, потому что созданный контент - это html, а не файл Excel. Так что для большинства хаков это будет работать в некоторых условиях.

Было бы лучше использовать компонент, который знает, для создания реального файла Excel, для xlsx вы можете использовать EPPlus , а для xls ExcelLibrary

1 голос
/ 27 июня 2011

Не могли бы вы использовать значения, разделенные запятыми, для экспорта в excel?

0 голосов
/ 15 марта 2013

Используйте этот код, он отлично работает для меня.

public void ExportToSpreadsheet(DataTable table, string name)
            {
                try
                {
                    HttpContext context = HttpContext.Current;
                    context.Response.Clear();
                    context.Response.ClearHeaders();
                    String sr = string.Empty;
                    sr += "<html><body><table>";
                    sr += "<tr style=\"background-color:gray;color:white;\">";
                    foreach (DataColumn column in table.Columns)
                    {
                        sr += "<th>";
                        sr += column.ColumnName;
                        sr += "</th>";
                    }
                    sr += "</tr>";
                    sr += Environment.NewLine;
                    foreach (DataRow row in table.Rows)
                    {
                        sr += "<tr>";
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                            sr += "<td>";
                            sr += row.ItemArray[i];
                            sr += "</td>";
                        }
                        sr += "</tr>";
                        sr += Environment.NewLine;
                    }
                    sr += "</table></body></html>";               
                    context.Response.ContentType = "application/vnd.ms-excel";               
                    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + name + ".xls");                        
                    context.Response.Write(sr);
                    context.Response.Flush();
                    context.Response.End();
                    context.Response.Close();
                }
                catch (Exception ex)
                {

                }
            }

Надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...