Avatar billede Slettet bruger
03. september 2010 - 10:55 Der er 1 løsning

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...
Avatar billede Slettet bruger
03. september 2010 - 16:21 #1
Lukker. Jeg fik sat debug til og fandt ud af at det var noget permission på noget med Excel. Gik ikke længere ind i det, da jeg samtidig fandt ud af at webhotellet jeg benytter slet ikke understøtter det jeg forsøgte at lave :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester