суббота, 30 мая 2015 г.

Наборы операций с данными рабочего листа

В этом посте разберем основные используемые в работе функции рабочего листа, такие как вставка/удаление столбцов/строк, копирование столбцов в другое место, автоширина столбцов, объединение ячеек и др. На каждую функцию будет приведен готовый код, который просто копируется в нужную часть макроса с заменой параметров.

Удаление столбцов:

ThisComponent.Sheets(0).Columns.removeByIndex(0,0) 

Данный код удаляет столбец 1 на листе 1.

Удаление строк:

ThisComponent.Sheets(0).Rows.removeByIndex(0,0) 

В случае когда нужно удалить несколько столбцов (строк) код можно скопировать, не забывая о том что после выполнения верхних строчек кода порядок изменится и нужно удалять столбцы (строки) с учетом оставшихся.
Более простым путем при удалении нескольких смежных столбцов является удаление через явное указание диапазона. следующий код удаляет столбцы с 1 по 3 (А-С) с листа 1:

oSheet = ThisComponent.Sheets (0)
oRangeAddress = oSheet.getCellRangeByName("A1:C65536").getRangeAddress()
oSheet.removeRange(oRangeAddress,  com.sun.star.sheet.CellDeleteMode.LEFT)

Установку оптимальной ширины столбцов лучше проводить через цикл for to, указав в коде необходимый лист и номера стоблцов с ...по который нужно установить автоширину. Например, следующий код устанавливает оптимальную ширину  столбцов с 1 по 6 на листе 1:

For I = 0 To 5
Columns = ThisComponent.Sheets (0).Columns(I)
Columns.OptimalWidth = True
Next I

Копирование столбца в другое место может потребоваться в нескольких случаях. Самый распространенный - некоторые данные нужно поставить вперед предыдущих -  поменять местами столбцы с номером документа и датой документа. Копирование выполняет след код:

Sub Copy_Columns
'Опеределяем столбец для копирования, в данном случае столбец 3 на листе 1
oCol = ThisComponent.Sheets(0).getColumns().getByIndex(2)
' Выбираем его
ThisComponent.getCurrentController().select(oCol)
' Вызываем функцию копирования
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
'Определяем верхнюю ячейку столбца куда хотим скопировать, в данном случае это А1
oCell = ThisComponent.Sheets(0).GetCellbyPosition( 0, 0 )
ThisComponent.CurrentController.Select(oCell)
'Производим вставку
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
End Sub

Объединение ячеек выполняет след. код:

oRange = ThisComponent.Sheets(0).getCellRangeByName("A1:E1")
oRange.merge(True)

В данном случае мы объединили ячейки A1:E1 на  листе 1

Для вставки столбцов/строк вместо функции remove применяется insert, сам код выглядит также:

ThisComponent.Sheets(0).Columns.insertByIndex(0,0) 
ThisComponent.Sheets(0).Rows.insertByIndex(0,0) 

Задача: В файле реестр документов по МХ поменять местами столбцы Номер документа и Дата документа, удалить столбцы Шифр Контрагента, Пользователь и DETAIL применив различные способы.

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

Отправить комментарий