Создайте файл excel с двумя листами в одной книге – C #

В моем приложении у меня есть метод, который возвращает файл excel с одним листом. Он отлично работает, но теперь мне нужно создать еще один лист и добавить его, и я не понимаю, как это сделать. Вот мой код:

StringBuilder sb = new StringBuilder(); string sFileName = "lottery" + Sorteio.Data.Date.ToShortDateString() + ".xls"; sb.Append("<x:ExcelWorkBook>"); sb.Append("<x:ExcelWorkSheet>"); sb.Append("<table style='1px solid black; font-size:12px;'>"); //many sb.Append(...) with data sb.Append("</table>"); sb.Append("</x:ExcelWorkSheet>"); sb.Append("<x:ExcelWorkSheet>"); sb.Append("<table style='1px solid black; font-size:12px;'>"); //many sb.Append(...) with data sb.Append("</table>"); sb.Append("</x:ExcelWorkSheet>"); sb.Append("</x:ExcelWorkBook>"); HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + sFileName); this.Response.ContentType = "application/vnd.ms-excel"; this.Response.ContentEncoding = System.Text.Encoding.Default; System.IO.StringWriter sw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw); byte[] buffer = System.Text.Encoding.Default.GetBytes(sb.ToString()); return File(buffer, "application/vnd.ms-excel"); 

В приведенном выше коде я создаю книгу с двумя рабочими листами, каждый со своей собственной таблицей, но это только создает мне один лист. Не могу понять, почему это не работает.

Как @xxmrlnxx ответ, но адаптированный к вопросу – просуммируйте «файл» в памяти:

 byte[] ExcellInMemory() { using (var m = new MemoryStream()) { SpreadsheetDocument sDoc = SpreadsheetDocument.Create(m, SpreadsheetDocumentType.Workbook); WorkbookPart workbookP = sDoc.AddWorkbookPart(); workbookP.Workbook = new Workbook(); WorksheetPart workSheetP = workbookP.AddNewPart<WorksheetPart>(); workSheetP.Worksheet = new Worksheet(new SheetData()); Sheets sheets = sDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets()); for (UInt32 i = 0; i < 2; i++) { var sheet = new Sheet() { Id = sDoc.WorkbookPart.GetIdOfPart(workSheetP), SheetId = i, Name = "shhet " + i }; sheets.Append(sheet); } workbookP.Workbook.Save(); sDoc.Close(); return m.GetBuffer(); } } 

используйте эту функцию следующим образом:

 string sFileName = "lottery" + Sorteio.Data.Date.ToShortDateString() + ".xlsx"; HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + sFileName); this.Response.ContentType = "application/vnd.ms-excel"; byte[] buffer = ExcellInMemory(); return File(buffer, "application/vnd.ms-excel"); 

Возможно, вы захотите реализовать свой собственный ActionResult, что-то вроде этого: Использование ASP.NET MVC и OpenXML API для потоковых файлов Excel

Я бы использовал OpenXML, и код был бы чем-то вроде …..

 // Given a document name, inserts a new worksheet. public static void InsertWorksheet(string docName) { // Open the document for editing. using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) { // Add a blank WorksheetPart. WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); newWorksheetPart.Worksheet = new Worksheet(new SheetData()); Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>(); string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart); // Get a unique ID for the new worksheet. uint sheetId = 1; if (sheets.Elements<Sheet>().Count() > 0) { sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1; } // Give the new worksheet a name. string sheetName = "Sheet" + sheetId; // Append the new worksheet and associate it with the workbook. Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName }; sheets.Append(sheet); } } 
  • Вернуть файл Excel в результате MVC
  • Конфигурация экспорта Excel весной mvc
  • MVC 5 Как загрузить файл Excel и прочитать строки до последней заполненной строки данных, используя EPPlus (OfficeOpenXml) ExcelPackage
  • Экспортировано excel, показывающее непризнанные символы в iphone
  • Отделив выделение нескольких строк
  • Экспорт ReportViewer в Excel с паролем
  • Вставка данных в столбцы таблицы Excel из таблицы SQL Server
  • Как я могу получить каждое значение внутри анонимного объекта массива в c #
  • Загрузите файл после обработки запроса ajax
  • mso-number-format для телефонных номеров и дат
  • Сохранить окно в отчете Excel в C #
  • Interesting Posts

    Перемещение данных в электронную таблицу Excel, нужно ли мне использовать VBA? Если да, то как мне это сделать?

    Получение ошибки времени выполнения 1004 после размещения обработчика ошибок?

    Excel: усреднение значений из набора строк, но только их включение, если они имеют определенное значение в столбце

    Автоматическое обновление формулы MS Excel при изменении значения поля

    Код Excel VBA работает очень медленно даже при отключенных событиях

    ReportViewer – Как я могу отображать файлы Excel с более чем 65 000 строк?

    VBA. Найдите все значения в столбце B для статьи в столбце A и поместите их в одну строку

    Как написать данные таблицы mysql в файл excel, но ни один downlad просто не сохранит файл

    Несколько форматов в одной ячейке с использованием c #

    Закройте файл Excel, если он уже открыт

    Запустить выполнение кода в 00:08:15 вместо 00:08:00

    Используйте функцию SUBSTITUTE в общей формуле Excel COUNTIF

    Как сгенерировать несколько файлов xls с циклом for, используя тип содержимого

    Excel – выбор строк, где несколько столбцов ==

    Ранжировать повторяющиеся текстовые значения в Excel по порядку появления для уникальных критериев

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