I have a method to export a dataset to an excel file. Nothing is wrong with the dataset. The problem I am having though is I am getting a weird error when saving the file. It's trying to access the right directory, however it looks like it is adding a string to the directory and ignoring my filename altogether.
public static void ExportDataSetToExcel(DataSet ds, string filename)
{
//Creae an Excel application instance
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
//Create an Excel workbook instance and open it from the predefined location
Microsoft.Office.Interop.Excel.Workbook excelWorkBook = excelApp.Workbooks.Add();
foreach (DataTable table in ds.Tables)
{
//Add a new worksheet to workbook with the Datatable name
Microsoft.Office.Interop.Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets.Add();
excelWorkSheet.Name = table.TableName;
for (int i = 1; i < table.Columns.Count + 1; i++)
{
excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
}
for (int j = 0; j < table.Rows.Count; j++)
{
for (int k = 0; k < table.Columns.Count; k++)
{
excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
}
}
}
excelWorkBook.SaveAs(filename);
excelWorkBook.Close();
excelApp.Quit();
}
Things I have tried:
excelWorkBook.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing);
excelWorkBook.SaveAs("C:\\" + filename)
excelWorkBook.SaveAs("C:\\" + filename + ".xlsx")
excelWorkBook.SaveAs("C:\\myfile.xlsx")
Thanks for your help.
Full Exception Message:
Microsoft Excel cannot access the file 'C:\CEF7C500'. There are several possible reasons:
• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.
at Microsoft.Office.Interop.Excel._Workbook.SaveAs(Object Filename, Object FileFormat, Object Password, Object WriteResPassword, Object ReadOnlyRecommended, Object CreateBackup, XlSaveAsAccessMode AccessMode, Object ConflictResolution, Object AddToMru, Object TextCodepage, Object TextVisualLayout, Object Local)
at MAP.ToExcel.ExportDataSetToExcel(DataSet ds, String filename) in c:\Users\tmitchell\Source\Workspaces\import\MAP\MAP\ToExcel.cs:line 68
at MAP.Program.CreateExcelSheet() in c:\Users\tmitchell\Source\Workspaces\import\MAP\MAP\Program.cs:line 140
at MAP.Program.Main(String[] args) in c:\Users\tmitchell\Source\Workspaces\import\MAP\MAP\Program.cs:line 31
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()</ExceptionString></Exception></TraceRecord>
Make sure you run the application with admin privileges. The fact is that the system (C:) drive requires admin privileges for writing.
Do you get the same results when you choose another drive for saving files?