C # — Как мне выполнить итерацию всех строк в Excel._Worksheet?

#c# #excel #excel-2007 #excel-interop

#c# #excel #excel-2007 #excel-взаимодействие

Вопрос:

Я хочу программно извлечь данные из листа Excel и вставить их в таблицу базы данных.

Как мне определить количество столбцов и строк на листе или иным образом выполнить итерацию строк?

У меня есть

 Excel._Worksheet worksheet = (Excel._Worksheet)workbook.ActiveSheet;
  

Я пытался worksheet.Range.Rows.Count

который выдает

Индексированное свойство ‘Microsoft.Офис.Взаимодействие.Excel._Worksheet.Range’ имеет необязательные аргументы, которые должны быть предоставлены

Что нужно сделать?

Комментарии:

1. С какой версией Excel вы работаете?

Ответ №1:

 using Excel = Microsoft.Office.Interop.Excel;
...

public void IterateRows(Excel.Worksheet worksheet)
{
    //Get the used Range
    Excel.Range usedRange = worksheet.UsedRange;
    
    //Iterate the rows in the used range
    foreach(Excel.Range row in usedRange.Rows)
    {
        //Do something with the row.
    
        //Ex. Iterate through the row's data and put in a string array
        String[] rowData = new String[row.Columns.Count];
        
        for(int i = 0; i < row.Columns.Count; i  )
            rowData[i] =Convert.ToString(row.Cells[1, i   1].Value2);
    }
}
  

Это компилируется и работает просто отлично для меня! Я использую его для извлечения строк с отсутствующими полями в журнал ошибок.

Комментарии:

1. Должно быть String[] rowData = новая строка[строка.Столбцы. Количество];

2. Должна ли эта строка foreach быть foreach(Excel. Строка диапазона в UsedRange. Строки)?

3. Обратите внимание, что этот метод может быть слишком медленным для многих применений, преобразование всего диапазона в массив объектов перед итерацией ускорит процесс.

4. Получено: ‘Не удалось загрузить тип’System.Runtime. Службы взаимодействия. ComTypes . IEnumerator’ из системы assembly ‘. Частное. CoreLib …’ когда я пытаюсь выполнить итерацию по используемому диапазону. Строки

Ответ №2:

Я полагаю, вы на самом деле ищете последнюю использованную строку. В этом случае вам нужно написать это так:

 Range UsedRange = worksheet.UsedRange;
int lastUsedRow = UsedRange.Row   UsedRange.Rows.Count - 1;