How to write some data to excel file(.xlsx)
Try this code
Microsoft.Office.Interop.Excel.Application oXL;Microsoft.Office.Interop.Excel._Workbook oWB;Microsoft.Office.Interop.Excel._Worksheet oSheet;Microsoft.Office.Interop.Excel.Range oRng;object misvalue = System.Reflection.Missing.Value;try{ //Start Excel and get Application object. oXL = new Microsoft.Office.Interop.Excel.Application(); oXL.Visible = true; //Get a new workbook. oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add("")); oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet; //Add table headers going cell by cell. oSheet.Cells[1, 1] = "First Name"; oSheet.Cells[1, 2] = "Last Name"; oSheet.Cells[1, 3] = "Full Name"; oSheet.Cells[1, 4] = "Salary"; //Format A1:D1 as bold, vertical alignment = center. oSheet.get_Range("A1", "D1").Font.Bold = true; oSheet.get_Range("A1", "D1").VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; // Create an array to multiple values at once. string[,] saNames = new string[5, 2]; saNames[0, 0] = "John"; saNames[0, 1] = "Smith"; saNames[1, 0] = "Tom"; saNames[4, 1] = "Johnson"; //Fill A2:B6 with an array of values (First and Last Names). oSheet.get_Range("A2", "B6").Value2 = saNames; //Fill C2:C6 with a relative formula (=A2 & " " & B2). oRng = oSheet.get_Range("C2", "C6"); oRng.Formula = "=A2 & \" \" & B2"; //Fill D2:D6 with a formula(=RAND()*100000) and apply format. oRng = oSheet.get_Range("D2", "D6"); oRng.Formula = "=RAND()*100000"; oRng.NumberFormat = "$0.00"; //AutoFit columns A:D. oRng = oSheet.get_Range("A1", "D1"); oRng.EntireColumn.AutoFit(); oXL.Visible = false; oXL.UserControl = false; oWB.SaveAs("c:\\test\\test505.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); oWB.Close(); oXL.Quit(); //...
You can use ClosedXML for this.
Store your table in a DataTable and you can export the table to excel by this simple snippet:
XLWorkbook workbook = new XLWorkbook();DataTable table = GetYourTable();workbook.Worksheets.Add(table );
You can read the documentation of ClosedXML to learn more. Hope this helps!
It is possible to write to an excel file without opening it using the Microsoft.Jet.OLEDB.4.0
and OleDb
. Using OleDb
, it behaves as if you were writing to a table using sql.
Here is the code I used to create and write to an new excel file. No extra references are needed
var connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SomePath\ExcelWorkBook.xls;Extended Properties=Excel 8.0";using (var excelConnection = new OleDbConnection(connectionString)){ // The excel file does not need to exist, opening the connection will create the // excel file for you if (excelConnection.State != ConnectionState.Open) { excelConnection.Open(); } // data is an object so it works with DBNull.Value object propertyOneValue = "cool!"; object propertyTwoValue = "testing"; var sqlText = "CREATE TABLE YourTableNameHere ([PropertyOne] VARCHAR(100), [PropertyTwo] INT)"; // Executing this command will create the worksheet inside of the workbook // the table name will be the new worksheet name using (var command = new OleDbCommand(sqlText, excelConnection)) { command.ExecuteNonQuery(); } // Add (insert) data to the worksheet var commandText = $"Insert Into YourTableNameHere ([PropertyOne], [PropertyTwo]) Values (@PropertyOne, @PropertyTwo)"; using (var command = new OleDbCommand(commandText, excelConnection)) { // We need to allow for nulls just like we would with // sql, if your data is null a DBNull.Value should be used // instead of null command.Parameters.AddWithValue("@PropertyOne", propertyOneValue ?? DBNull.Value); command.Parameters.AddWithValue("@PropertyTwo", propertyTwoValue ?? DBNull.Value); command.ExecuteNonQuery(); }}