2014-09-11 3 views
0

У меня есть набор данных в Excel и я использую C#, чтобы открыть рабочий лист и получить доступ к некоторым данным.Как получить все строки, содержащие данные в определенном столбце в Excel с C#

Я пытаюсь получить все строки, содержащие данные из определенного столбца. Например, в столбце B, начиная с ячейки «B3», я хочу сохранить все строки, содержащие данные в коллекции, например массиве.

Это то, что я до сих пор:

Application excelApplication; 
_Workbook workbook; 
_Worksheet sheet; 

excelApplication = new Excel.Application 
    { 
    Visible = true, 
    ScreenUpdating = true 
    }; 

workbook = excelApplication.Workbooks.Open(@"C:\Documents and Settings\user\Desktop\Book1.xls"); 
sheet = (Worksheet)workbook.Worksheets[2]; 

Excel.Range range = sheet.Range["b3:b145"]. 

foreach (Range cell in range) 
    { 

     // Do something with rows which contain data   
    } 

Как вы можете видеть выше, я указал диапазон от B3 до B45, которые я не хочу. Я хочу получить все строки в столбце B, содержащие данные, начиная с B3.

Как бы я мог достичь этого?

ответ

1

В общем, когда я застрял в этих ситуациях, я записываю макрос и конвертирую код VBA в C#. Объектная модель в VSTO в значительной степени идентична (помните, что это отличный совет), а с .Net 4.0 дополнительные параметры сохраняют много кода.

В вашем конкретном случае я предполагаю, что чем крупнее электронная таблица, тем больше времени потребуется, чтобы прочитать все ячейки Excel в столбце B, используя VSTO. Мой совет состоит в том, чтобы использовать эту технику, чтобы прочитать их все сразу:

//Work out the number of rows with data in column B: 
//int lastColumn = range.Columns.Count; 
int lastRow = range.Rows.Count; 

//Get all the column values: 
object[,] objectArray = shtName.get_Range("B3:B" + lastRow.ToString()).Value2; 
rngName.Value2 = objectArray; 
+0

Но для чего я устанавливаю объект 'range'? в моем коде я имел 'range = sheet.Range [" b3: b145 "];' но я не хочу указывать диапазон сам, я хочу работать в C#, какие ячейки имеют данные в столбце B – user3574492

+0

Установите ' range' в столбец B, например 'range = sheet.Range [" B3 "];' затем проверить Rows.Count. В вашем for-loop пропускают ячейки IsNullOrEmpty. Я не уверен, что вы хотите, чтобы промежутки в последовательности (из столбцов B) сохранялись или нет. –

+0

Rows.Count возвращает 1, если я устанавливаю диапазон в 'range = sheet.Range [" b3 "];' – user3574492