DataTable til Excel fejler med System.UnauthorizedAccessException
Hejsa.Er ved at lave en lille funktion, der henter nogle poster ud i en DataTable, hvor indholdet af denne så skal lægges over i et Excel ark.
Men det fejler når der forsøges at oprette og skrive til Excel-arket med følgende fejl:
System.UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005. at Orders_Custom_Order_List.btn_GetOrdersForExcel_Click(Object sender, EventArgs e)
Nogen der ved hvad denne fejl betyder? Altså ud over at jeg tilsyneladende ikke har rettigheder til at gøre det...
Min kode, hvor selve oprettelsen og skrivningen til Excel forsøges ser således ud:
// Opret Excel sheet fra DataTable
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
Excel.Range oRange;
// Start Excel and get Application object.
oXL = new Excel.Application();
// Set some properties
oXL.Visible = true;
oXL.DisplayAlerts = false;
// Get a new workbook.
oWB = oXL.Workbooks.Add(Missing.Value);
// Get the active sheet
oSheet = (Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name = "Orders";
// Process the DataTable
int rowCount = 1;
foreach (DataRow dr in dtOrders.Rows)
{
rowCount += 1;
for (int i = 1; i < dtOrders.Columns.Count + 1; i++)
{
// Add the header the first time through
if (rowCount == 2)
{
oSheet.Cells[1, i] = dtOrders.Columns[i - 1].ColumnName;
}
oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
}
}
// Resize the columns
oRange = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[rowCount, dtOrders.Columns.Count]);
oRange.EntireColumn.AutoFit();
// Save the sheet and close
oSheet = null;
oRange = null;
oWB.SaveAs(Server.MapPath("../Invoices/Excel/test.xls"), Excel.XlFileFormat.xlWorkbookNormal,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Excel.XlSaveAsAccessMode.xlExclusive,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
oWB.Close(Missing.Value, Missing.Value, Missing.Value);
oWB = null;
oXL.Quit();
// Clean up
// NOTE: When in release mode, this does the trick
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Selve hentningen af data og opbygningen af DataTable fungerer fint når jeg udskriver det i et GridView, men kan altså åbenbart ikke finde ud af at få det over i Excel :-)
P.S. Selve koden herover er ikke noget jeg selv har lavet, men fundet på nettet og det burde altså virke...