2013-05-14 6 views
0

Я получаю сообщение об ошибке, когда я экспортирующей Excel в C#, я не могу найти, где мой код является неправильным, и решение моей проблемыОшибка Экспорт в Excel C#

Ошибка:

необработанное исключение типа '' System.Runtime.InteropServices.COMException произошло в GestãoSI.exe

Дополнительная информация: Indice inválido. (Excepção де HRESULT: 0x8002000B (DISP_E_BADINDEX))

Ошибка появляется, когда код выполняется

// Add a workbook. 
oBook = oExcel_12.Workbooks.Add(oMissing); 

// Get worksheets collection 
oSheetsColl = oExcel_12.Worksheets; 

// Get Worksheet "Sheet1" 
oSheet = (Excel_12.Worksheet)oSheetsColl.get_Item("Sheet1"); 

Вот все, что мой код

public static void ExportDataGridViewTo_Excel12(DataGridView itemDataGridView) 
{ 
     Excel_12.Application oExcel_12 = null;    //Excel_12 Application 
     Excel_12.Workbook oBook = null;      // Excel_12 Workbook 
     Excel_12.Sheets oSheetsColl = null;     // Excel_12 Worksheets collection 
     Excel_12.Worksheet oSheet = null;      // Excel_12 Worksheet 
     Excel_12.Range oRange = null;       // Cell or Range in worksheet 
     Object oMissing = System.Reflection.Missing.Value; 

     // Create an instance of Excel_12. 
     oExcel_12 = new Excel_12.Application(); 

     // Make Excel_12 visible to the user. 
     oExcel_12.Visible = true; 

     // Set the UserControl property so Excel_12 won't shut down. 
     oExcel_12.UserControl = true; 

     // System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); 

     // Add a workbook. 
     oBook = oExcel_12.Workbooks.Add(oMissing); 

     // Get worksheets collection 
     oSheetsColl = oExcel_12.Worksheets; 

     // Get Worksheet "Sheet1" 
     oSheet = (Excel_12.Worksheet)oSheetsColl.get_Item("Sheet1"); 

     // Export titles 
     for (int j = 0; j < itemDataGridView.Columns.Count; j++) 
     { 
      oRange = (Excel_12.Range)oSheet.Cells[1, j + 1]; 
      oRange.Value2 = itemDataGridView.Columns[j].HeaderText; 
     } 

     // Export data 
     for (int i = 0; i < itemDataGridView.Rows.Count - 1; i++) 
     { 
      for (int j = 0; j < itemDataGridView.Columns.Count; j++) 
      { 
       oRange = (Excel_12.Range)oSheet.Cells[i + 2, j + 1]; 
       oRange.Value2 = itemDataGridView[j, i].Value; 
      } 
     } 

     // Release the variables. 
     //oBook.Close(false, oMissing, oMissing); 
     oBook = null; 

     //oExcel_12.Quit(); 
     oExcel_12 = null; 

     // Collect garbage. 
     GC.Collect(); 
    } 
+0

Ну, вы должны разместить линию, где брошено исключение ... наверное, то вы увидите решение даже сами –

+0

линия такова: oSheet = (Excel_12.Worksheet) oSheetsColl.get_Item ("Лист1"); –

+0

Я не могу найти проблему, я ее ищу и ничего –

ответ

0

Поскольку вы получили не- английский текст исключения из Excel. Я предполагаю, что нет листа, который называется «Sheet1», вместо этого он имеет локализованное имя. Вы должны либо использовать имя с локализацией, либо, что было бы лучше, просто используйте индекс листа (должен начинаться с 1) вместо имени листа.

+0

теперь я что-то получаю, но только появляется на excel имя столбцов, а не данные , –

+0

oSheet = (Excel_12.Рабочий лист) oBook.Worksheets [1]; –

+0

Кто-нибудь? Нужна помощь –

1

эта работа для меня ..

oSheet = oBook.Worksheets.get_Item(index);