Introduction
In this article, we will discuss how to append multiple data tables on a single worksheet in different columns. First of all, let's overview what is Microsoft Office Interloop? Yes, Microsoft Office Interop (Excel Automation) is an option when creating/reading Excel files (XLS, XLSX, CSV) from C# or VB.NET application.
Scenario
We have multiple data tables which have different data with same columns. We can export all the tables in a worksheet side by side. Let’s assume as have ‘n’ tables and each table has ‘m’ columns then we will have ‘n x m’ total columns. We will see how to achieve this using excel interop Excel in C#.
Following are the data tables which we have. First two tables have same columns with different data but third table has different data as well as different columns.
![]()
Requirements
Following DLLs will be required to implement this scenario,
using System.Data;
using System.Data.SqlClient;
Download Microsoft.Office.Interop.Excel through NuGet package.
How to merge/append these tables side-by-side
First, we will get the data from SQL to populate dataset of all the above data tables.
SqlConnection sqlConn = new SqlConnection("YourConnectionString");
SqlDataAdapter adapter = new SqlDataAdapter("procGetEmployee", sqlConn);
DataSet resultDS = new DataSet();
adapter.Fill(resultDS, "dsEmployees");
// Create objects for Excel Application, Workbook and Worksheet
Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel._Workbook xlWorkBook;
Microsoft.Office.Interop.Excel._Worksheet xlWorkSheet;
// Initialize the objects of Excel Application, Workbook and Worksheet
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = (Microsoft.Office.Interop.Excel._Workbook)(xlApp.Workbooks.Add(""));
xlWorkSheet = (Microsoft.Office.Interop.Excel._Worksheet) xlWorkBook.ActiveSheet;
// Some local veraibales to control the RowIndex, ColumnIndex and ActualIndex
int rowIndex = 2, colIndex = 1, actualIndex = 1;
// To travrse all tables of dataset
for (int i = 0; i < resultDS.Tables.Count; i++) {
rowIndex = 2;
colIndex = 1;
if (i > 0) actualIndex += resultDS.Tables[i - 1].Columns.Count;
foreach(DataRow row in resultDS.Tables[i].Rows) {
colIndex = actualIndex;
for (int k = 0; k < resultDS.Tables[i].Columns.Count; k++) {
if (rowIndex == 2) // For Worksheet Header
xlWorkSheet.Cells[rowIndex - 1, colIndex] = resultDS.Tables[i].Columns[k].ColumnName;
xlWorkSheet.Cells[rowIndex, colIndex] = row[resultDS.Tables[i].Columns[k]];
colIndex++;
}
rowIndex++;
}
}
// Save Excel file with different parameters. You can speficy parameters according to your requirement
xlWorkBook.SaveAs(@ "Yourpath\dtEmployee.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// Close and Quit the Excel
xlWorkBook.Close();
xlApp.Quit();
Result
After successfully execution of code, the final result you will get: Code merge/append all the data tables side by side, as shown in the figure.
![]()
Summary
This article shows the walk-through with data tables and code to merge/append multiple data tables on a single sheet side by side. Happy Coding!!