用同一本书中的两张表创buildexcel文件 – C#

在我的应用程序中,我有一个方法返回一个Excel表格的Excel文件。 它工作正常,但现在我需要创build另一个表,并添加它,我不知道如何。 这是我的代码:

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"); 

在上面的代码中,我使用两个工作表创build了工作簿,每个工作表都有自己的表格,但它只创build一张工作表。 不知道为什么它不工作。

由于@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(); } } 

使用这样的function:

 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来stream式处理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); } }