В этом посте разберем основные используемые в работе функции рабочего листа, такие как вставка/удаление столбцов/строк, копирование столбцов в другое место, автоширина столбцов, объединение ячеек и др. На каждую функцию будет приведен готовый код, который просто копируется в нужную часть макроса с заменой параметров.
Удаление столбцов:
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 применив различные способы.
Удаление столбцов:
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 применив различные способы.
Комментариев нет:
Отправить комментарий