Очень часто в документах на одном листе необходимо удалить несколько строк данных с разными значениями по нескольким параметрам. Если строк в документе на так много, а налаживать программно множество фильтров нецелесообразно можно удалить такие строки при помощи цикла for to next. Он удаляет данные построчно и работает чуть медленнее классических фильтров, но все же удобен в небольших документах.
Рассмотрим пример кода на конкретной задаче - из файла Реестр документов по МХ нам нужно удалить данные "Название контрагента" - "Производство, Пекарня, Столовая для персонала", т.е. оставив только цеха фасовки:
Sub Delete_for
' Обозначаем текущий активный диапазон листа (первая левая верхняя - последняя нижняя
' правая ячейка) - стандартная функция
oSheet = ThisComponent.CurrentController.getActiveSheet()
myrows=oSheet.getrows
oCellCursor = oSheet.createCursor()
oCellCursor.GotoStartOfUsedArea(True)
oCellCursor.GotoEndOfUsedArea(True)
Start_Row = oCellCursor.getRangeAddress.StartRow+1
End_Row = oCellCursor.getRangeAddress.EndRow + 1
For i=End_Row To Start_Row step -1
' Вводим переменную text1 и указываем в каком столбце нужно будет искать ее значения
' В данном случае в 6-м столбце (5,i)
text1 = osheet.getcellbyposition(5,i).String
'Вводим условие if then - какие значения нам нужно искать, если значений несколько они 'соединяются оператором OR. Функция Left - дает нам строку из указанного к ней в скобках
' количества симоволов, например для слова Производство - это 12 символов
If Left(text1,12) = "Производство" OR Left(text1,7) = "Пекарня" OR Left(text1,22) = "Столовая для персонала" Then
'Говорим функции, что сделать с найденными строками - в данном случае удалить
myrows.removebyindex(i,1)
'Закрываем условный оператор и цикл:
End if
Next i
End Sub
Задача: В Файле Реестр документов по МХ, в колонке Название типа операции удалить программно циклом подтипы Производство АР, Утиль производства ГМ, Питание персонала
Комментариев нет:
Отправить комментарий