Как экспортировать данные в Excel в MVC

Я разрабатываю приложение в MVC, и я хочу экспортировать данные в Excel. В настоящее время я использую этот код-

public ActionResult ExportToExcel(int id) { string UserName = (string)HttpContext.Session["loggedUserName"]; PurchaseOrderService purchaseOrderService = new PurchaseOrderService(); PurchaseOrderDTO PurchaseOrder = purchaseOrderService.GetById(Convert.ToInt32(id)); StringBuilder sb = new StringBuilder(); sb.Append("<table border=`" + "1px" + "`b>"); sb.Append("<tr>"); sb.Append("<td><b><font face=Calibri size=3>Created By : " + UserName + "</font></b></td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td><b><font face=Calibri size=3>Purchase Order No. :" + PurchaseOrder.Id.ToString() + "</font></b></td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td><b><font face=Calibri size=3>Vendor Name : " + PurchaseOrder.VendorName.ToString() + "</font></b></td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td><b><font face=Calibri size=3>Purchase Order Date : " + PurchaseOrder.OrderDate.ToString("dd-MMM-yy") + "</font></b></td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td><b><font face=Calibri size=3>SR NO.</font></b></td>"); sb.Append("<td><b><font face=Calibri size=3>PRODUCT CODE</font></b></td>"); sb.Append("<td><b><font face=Calibri size=3>VP CODE</font></b></td>"); sb.Append("<td><b><font face=Calibri size=3>PRODUCT DESCRIPTION</font></b></td>"); sb.Append("<td><b><font face=Calibri size=3>QUANTITY</font></b></td>"); sb.Append("</tr>"); int rowCount = 1; var quantity = 0; foreach (var item in PurchaseOrder.purchaseOrderItemDTOList) { if (PurchaseOrder.purchaseOrderItemDTOList.Count > 1) { sb.Append("<td><font face=Calibri size=" + "11px" + ">" + rowCount.ToString() + "</font></td>"); sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.ProductCode.ToString() + "</font></td>"); sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.VendorProductCode.ToString() + "</font></td>"); sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Product.Name.ToString() + "</font></td>"); sb.Append("<td><font face=Calibri size=" + "11px" + ">" + item.Quantity.ToString() + "</font></td>"); quantity = quantity + item.Quantity; } sb.Append("</tr>"); rowCount = rowCount + 1; } sb.Append("<tr>"); sb.Append("<td colspan=3></td>"); sb.Append("<td><b><font face=Calibri size=3>Total Quantity : </font></b></td>"); sb.Append("<td><font face=Calibri size=" + "11px" + ">" + quantity.ToString() + "</font></td>"); sb.Append("</tr>"); sb.Append("</table>"); HttpContext.Response.AddHeader("content-disposition", "attachment; filename=PO NO_" + PurchaseOrder.Id +"_"+ DateTime.Now.ToString("dd-MMM-yy") + ".xls"); this.Response.ContentType = "application/vnd.ms-excel"; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(sb.ToString()); return File(buffer, "application/vnd.ms-excel"); } 

Этот код работает правильно, но когда я пытаюсь открыть лист excel, который он отображает,

 The file you are trying to open is in different format than specified by the file extension. 

Есть ли другой способ сделать это?

Вы создаете НЕ лист Excel, а HTML-таблицу. что раздражает всех пользователей excel, поскольку всплывающие окна при загрузке файла неизбежны. Более того, в этом подходе невозможна передовая форматировка, формулы, проверка и т. Д.

Я бы порекомендовал libary EPPLUS, который обеспечивает очень хороший (и быстрый!) Интерфейс для чтения / записи xlsx-файлов. В библиотеке есть хорошая лицензия, поэтому вам не нужно открывать исходный код вашего проекта или другого дерьма.

У библиотеки есть хорошая документация (примеры проектов).

http://epplus.codeplex.com/

Похоже, вы пытаетесь открыть html-таблицу как документ .xls, который, как я думаю, не работает.

Самый простой способ получить что-то в Excel (imo) – это экспортировать ваши данные в виде файла с разделителями (обычно это табуляция или запятая).

Существует несколько библиотек для создания csv-файлов в c #, но это довольно просто вручную

 StringBuilder sb = new StringBuilder(); //headers sb.AppendLine("column1, column2, column3, column4"); foreach (var item in dataItemsEnumerable) { sb.AppendFormat("{0},{1},{2},{3}\n", item.value1, item.value2, item.value3, item.value4); } File.WriteAllText(sb.ToString, "myFile.csv"); 

Также доступны некоторые библиотеки, если вы настроились на создание файлов XLS. Взгляните на этот https://code.google.com/p/excellibrary/

Также этот вопрос также очень хорошо объясняет ваши варианты: создайте файл Excel (.XLS и .XLSX) с C #

  • Как экспортировать все данные списка со своим заголовком для листа excel в vb 6.0
  • Генерация больших файлов Excel из данных MySQL с помощью PHP из корпоративных приложений
  • Экспорт отчета о доступе к Microsoft Outlook в Excel
  • Хотите предоставить экспорт в Excel с несколькими комментариями в одной ячейке Excel
  • Как форматировать столбцы gridview?
  • Где пропал GUI?
  • Как сохранить формулы и очистить содержимое в Excel с помощью VB.net?
  • Наиболее эффективный способ экспорта Access 2003 Listbox RowSource (запрос) в Excel 2003
  • CSV-файлы и многострочные текстовые ячейки
  • Как ускорить экспорт большого файла Excel с помощью php и SQL Server
  • Экспорт динамического текста ярлыка в Excel
  • Interesting Posts

    Валидация данных VBA работает в VBE, но не в событии деактивации

    Как защитить изображение на листе Excel

    Два десятичных запятых, изменяющихся на многие десятичные числа в ячейке

    Excel Sumproduct с требованиями и неопределенным списком (целая колонка)

    Таблица сортировки Excel сортируется по столбцу

    Преобразование типа данных символа в тип данных даты и времени приводило к значению даты и времени вне диапазона

    Как включить функцию загрузки в django, если файл XLSX в папке django?

    Выход / отключение режима редактирования после события с двойным щелчком

    HLookup () с датой: Уже пробовал CLng ()

    Excel 2010 Check Boxs Macro – как снять флажок «Выбрать все», если другое поле отменено

    Добавление суммы на основе критериев месяца

    Excel Macro, который считывает количество строк в другой таблице и заполняет формулы

    Максимальные значения в день из данных с разными датами

    Вызов подпрограммы из внешнего приложения

    Формула для взвешенных средних

    Давайте будем гением компьютера.