Even though exporting two datatables to a single Excel worksheet with two sheets is a typical practise, it does not warrant a separate subject. You could realise how useful this answer is after looking at all the other solutions. I make use of this.NET Excel component in this solution. We may use it without installing Microsoft Excel. Let’s get to work now.
private void ExportExcell(DataSet ds, string fileName) { fileName= @"C:\Temp\CSharpAuthors.txt"; using (SpreadsheetDocument document = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook)) { WorkbookPart workbookPart = document.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets()); foreach (DataTable table in ds.Tables) { UInt32Value sheetCount = 0; sheetCount++; WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); var sheetData = new SheetData(); worksheetPart.Worksheet = new Worksheet(sheetData); Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = sheetCount, Name = table.TableName }; sheets.AppendChild(sheet); Row headerRow = new Row(); List<string> columns = new List<string>(); foreach (System.Data.DataColumn column in table.Columns) { columns.Add(column.ColumnName); Cell cell = new Cell(); cell.DataType = CellValues.String; cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(column.ColumnName); headerRow.AppendChild(cell); } sheetData.AppendChild(headerRow); foreach (DataRow dsrow in table.Rows) { Row newRow = new Row(); foreach (String col in columns) { Cell cell = new Cell(); cell.DataType = CellValues.String; cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); newRow.AppendChild(cell); } sheetData.AppendChild(newRow); } } workbookPart.Workbook.Save(); } }