I have to create a Console application that exports a DataSet
to Excel. The problem is that it shouldn't pop up the save window, it should automatically create the Excel file. So far I have the following code, but I don't know how to make it save automatically. Would appreciate any help.
public static void CreateWorkbook(DataSet ds, String path)
{
int rowindex = 0;
int columnindex = 0;
Microsoft.Office.Interop.Excel.Application wapp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Worksheet wsheet;
Microsoft.Office.Interop.Excel.Workbook wbook;
wapp.Visible = false;
wbook = wapp.Workbooks.Add(true);
wsheet = (Worksheet)wbook.ActiveSheet;
try
{
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
wsheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
}
foreach (DataRow row in ds.Tables[0].Rows)
{
rowindex++;
columnindex = 0;
foreach (DataColumn col in ds.Tables[0].Columns)
{
columnindex++;
wsheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName];
}
}
}
catch (Exception ex)
{
String err = ex.Message;
}
wapp.UserControl = true;
}
See MSDN Documentation
setting
Application.DisplayAlerts
property tofalse
will stop displaying all alerts for all of its workbooks.Add
ConflictResolution
toXlSaveConflictResolution.xlLocalSessionChanges
and set the application's
DisplayAlerts
property tofalse
so the window won't show.see XlSaveConflictResolution Enum (Microsoft.Office.Interop.Excel) | Microsoft Docs for more info.
Use
open xml sdk
to generate documents instead of automation; it is much more reliable.All of the arguments to
WorkBook.SaveAs()
are optional, but you can just useType.Missing
for most of them if you want to.The typical call would look like:
Note that I didn't include the file extension; Excel will set that for you.
Workbook.SaveAs Method (Microsoft.Office.Tools.Excel) | Microsoft Docs describes each of the arguments.
Use the DisplayAlerts property. Its very simple and fast.
Never let the Excel define the kind of file when you're going to save the file. Because it's possible that the format will be changed.
If original doc was .xls and the current user has the office 2013 the default format its .xlsx and then the Excel will convert the file to .xlsx and the users tha doesnt have the Excel 2010 or superior cant open the file.