2013-07-17 4 views
0

Я кодирую на C# и используя Microsoft.Office.Interop.Excel. У меня есть столбцы A-F, а некоторые строки не имеют значения в столбце B. Поэтому я хочу пройти через столбец B и найти все ячейки без текста/значения, а затем удалить эту целую строку. Мне удалось пройти через столбец B и найти нулевую ячейку, но затем, когда я пытаюсь удалить эту строку, ничего не происходит. Вот мой код:удалить строку на основе условия

Excel.Range B = objsheet.get_Range("B1:B" + lastUsedRow, System.Type.Missing); 
foreach (Excel.Range r in B) 
{ 
    string column = r.Text.ToString(); 

    if (string.IsNullOrEmpty(column)) 
    { 
     Excel.Range BEntireRow = objsheet.get_Range(r + "1:" + r + "B" + lastUsedColumn, System.Type.Missing); 
     // Excel.Range BEntireRow2 = r.EntireRow; 
     BEntireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp); 

    } 
} 
+0

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

2

Вместо зацикливания через колонку вы можете сделать следующее; это код VBA:

Range("B1:B" + lastUsedRow).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

В C# вы должны использовать:

.SpecialCells(Excel.XlCellType.xlCellTypeBlanks) 

BTW Я бы не назвал свой объект Excel.Application Excel - Я хотел бы использовать й или даже myXl. Это запутывает иначе и может вызвать ошибки в какой-то момент.

Добавлено Полная # заявление C будет

Range("B1:B" + lastUsedRow).SpecialCells(Excel.XlCellType.xlCellTypeBlanks).EntireRow.Delete(); 
+0

, что это делает? .SpecialCells (Excel.XlCellType.xlCellTypeBlanks) - удалить ячейки? – user2140832

+0

Что не так: Excel.Range BEntireRow = objsheet.get_Range ("B1: B" + lastUsedRow, System.Type.Missing); BEntireRow.SpecialCells (Excel.XlCellType.xlCellTypeBlanks) .EntireRow.Delete; – user2140832

+0

любое решение-im не понятно по полной реализации вашего кода – user2140832

0

попробовать что-то вроде этого:

Rows([INSERT_THE_ROW_YOU_WANT_TO_DELETE_HERE]).EntireRow.Delete; 
+0

добавьте точку перед 'EntireRow': D – chancea

+0

, пожалуйста, это как прослушивание меня до смерти, и я не могу редактировать только 1 символ – chancea

Смежные вопросы