Avatar billede herman01753 Nybegynder
24. januar 2007 - 13:25 Der er 8 kommentarer og
1 løsning

Excel exception 0x800A03EC når store datamængder assignes range

jeg har lavet noget kode som kan tage data fra et dataset og lægge det ind i et excel-ark.

Det virker perfekt hvis jeg tilføjer f.eks. 1000 rækker gange 4 kolonner til mit ark. hvis jeg tilføjer f.eks. 25000 rækker gange 4 kolonner, så får jeg en exception:

Exception from HRESULT: 0x800A03EC
at System.RuntimeType.ForwardCallToInvokeMember(String memberName,
BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData&
msgData)
at Microsoft.Office.Interop.Excel.Range.set_Value2(Object )

Er der nogen som kender en løsning på problemt? koden som producerer fejlen er i kaldet "excellRange.Value2 = objData;" i nedenstående funktion. koden som kalder funktionen har jeg skrevet længere nede.

******************************
private void InsertData(DataTable table, _Worksheet concreteWorkSheet)
  {
  // the worksheet starting at cell A2.
  int numOfRows = table.Rows.Count;
  int numOfColums = table.Columns.Count;
  object[,] objData = new Object[numOfRows, numOfColums];


  for (int row = 0; row < numOfRows; row++)
  {
    for (int column = 0; column < numOfColums; column++)
    {
    objData[row, column] = table.Rows[row][column];
    }

  }
  excellRange = concreteWorkSheet.get_Range("A2", excelNullValue);
  excellRange = excellRange.get_Resize(numOfRows, numOfColums);
  excellRange.Value2 = objData;
  }
***********************


********************funktionen som kalder InsertData******

      Application excelApplication;
      excelApplication = new Application();
      Workbooks excellWorkBooks;
      excellWorkBooks = excelApplication.Workbooks;
      _Workbook concreteWorkbook;
      concreteWorkbook = excellWorkBooks.Add(excelNullValue);
      Sheets excelWorkSheets;
      excelWorkSheets = concreteWorkbook.Worksheets;
      if (data.Tables.Count > excelWorkSheets.Count)
      {
      int numberOfMissingSheets = data.Tables.Count - excelWorkSheets.Count;
      for (int i = 0; i < numberOfMissingSheets; i++)
      {
        concreteWorkbook.Worksheets.Add(excelNullValue, excelNullValue,
excelNullValue, excelNullValue);
      }
      }
      for (int i = 1; i <= excelWorkSheets.Count && i <= data.Tables.Count;
i++)
      {
      _Worksheet concreteWorkSheet;
      concreteWorkSheet = (_Worksheet)(excelWorkSheets.get_Item(i));

      DataTable table = data.Tables[i - 1];
      CreateHeaders(table, concreteWorkSheet);
      InsertData(table, concreteWorkSheet);
      }

      if (!Path.IsPathRooted(excelFileName))
      {
      excelFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
Path.GetFileName(excelFileName));
      }

      // Save the Workbook and quit Excel.
      if (File.Exists(excelFileName)) File.Delete(excelFileName);
      concreteWorkbook.SaveAs(excelFileName, excelNullValue, excelNullValue,
            excelNullValue, excelNullValue, excelNullValue,
XlSaveAsAccessMode.xlNoChange,
            XlSaveConflictResolution.xlLocalSessionChanges, excelNullValue,
excelNullValue, excelNullValue, excelNullValue);
      concreteWorkbook.Close(false, excelNullValue, excelNullValue);
      excelApplication.Quit();
Avatar billede dr_chaos Nybegynder
25. januar 2007 - 08:05 #1
Der var noget som kunne tyde på at at størrelsen simpelt hen blev for stor.
Jeg har prøvet at søge på den exception. men har ikke fundet nigen med lige præcis ditproblemet.
prøv at se hvad grænsen er.
Avatar billede herman01753 Nybegynder
25. januar 2007 - 10:02 #2
Jeg har forsøgt med at indsætte 1000 rækker, det går godt. hvis jeg så forsøger at indsætte alle rækkerne af flere omgange finder jeg at jeg ved 1000 indsatte rækker af gange får indsat 3000 Rækker, ved 200 indsatte rækker af gange får jeg indsat 2300 rækker før exception kastes. Hvis jeg sætter antallet ned til 127 eller 128 får jeg indsat alle rækker uden exceptions.

du skriver du har søgt på exception men ikke finder noget. Det kan skyldes at exceptionen måske er en generel COM exception, da jeg har fundet både noget om office, og ADO igennem java.

Noget kunne tyde på der er en bug i deres håndtering af datamængder i Excel.
Avatar billede dr_chaos Nybegynder
26. januar 2007 - 08:19 #3
Ja det kunne godt se sådan ud. Prøv evt at kontakte ms.

Jeg lavede denne søgning, den gav masse resultater med deb exception du fik:
http://www.google.dk/search?client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&channel=s&hl=da&q=c%23+Exception+from+HRESULT%3A+0x800A03EC&meta=&btnG=Google-s%C3%B8gning
Avatar billede herman01753 Nybegynder
26. januar 2007 - 08:26 #4
Jeg har naturligvis søgt på google inden jeg postede her, og kan af de exceptions man finder se at det ligner en generisk microsoft exception for databehandling. Jeg har fundet eksempler på at den kastes ved brug af ADO fra Java samt en masse forskellige Excel exceptions.
Avatar billede dr_chaos Nybegynder
26. januar 2007 - 08:34 #5
Ja det kan jeg se.
prøv lige at se denne post:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1146670&SiteID=1


Det lader til at du skal lave et work around, så du kune tilføjer et bestemt antal værdier adgangen.
Avatar billede herman01753 Nybegynder
26. januar 2007 - 08:39 #6
Ja det er jeg klar over, det er mig der har lavet det spørgsmål inde på microsoft forum. Som du kan se i min første kommentar skriver jeg følgende:
*********
eg har forsøgt med at indsætte 1000 rækker, det går godt. hvis jeg så forsøger at indsætte alle rækkerne af flere omgange finder jeg at jeg ved 1000 indsatte rækker af gange får indsat 3000 Rækker, ved 200 indsatte rækker af gange får jeg indsat 2300 rækker før exception kastes. Hvis jeg sætter antallet ned til 127 eller 128 får jeg indsat alle rækker uden exceptions.
*********
Avatar billede dr_chaos Nybegynder
26. januar 2007 - 08:42 #7
sorry :)
Det lagde jeg slet ikke mærke til.
Prøv at rapporterer den som en bug til ms.
Jeg kan desværre ikke hjælpe dig yderligerer :/
Avatar billede herman01753 Nybegynder
26. januar 2007 - 08:45 #8
Det er helt iorden. Jeg forsøger mig på anden vis, nu er "problemet" jo tilsyneladende løst, så må vi se om microsoft får fixet det senere.
Avatar billede dr_chaos Nybegynder
26. januar 2007 - 08:57 #9
ja.
Måske er det lavet i den nye office pakke.
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