Поиск текста и копирование нужного диапазона ячеек макросом

Автор dimmon777, 12 ноября 2015, 20:26

0 Пользователи и 1 гость просматривают эту тему.

dimmon777

Добрый день!
Нужна помощь в написании макроса. Есть некая программа результатом которой, создается отчет на листе Calc. Так как таблица на листе размещена в "рандомном" месте, нужно выполнить поиск, найти заглавие таблицы (например "Отчет", находится допустим в ячейке C4), затем скопировать саму таблицу (диапазон А4:F14) и вставить в нужное место, н-р в начало листа (ячейка A1).
PS: При  печати, расположение таблицы на двух листах.
Заранее благодарю! ;)

rami

Цитата: dimmon777 от 12 ноября 2015, 18:26Есть некая программа результатом которой, создается отчет на листе Calc. Так как таблица на листе размещена в "рандомном" месте, нужно выполнить поиск, найти заглавие таблицы (например "Отчет", находится допустим в ячейке C4), затем скопировать саму таблицу (диапазон А4:F14) и вставить в нужное место, н-р в начало листа (ячейка A1).
PS: При  печати, расположение таблицы на двух листах.
С такой постановкой задачи нужно подождать пару десятилетий, пока компьютеры не научатся угадывать мысли...

Если некая программа размещает данные в виде таблицы на чистом листе, то вокруг такой таблицы должны быть пустые строки и/или столбцы. Если их убрать, то таблица станет в угол A1.

Или есть какие то сложности?

dimmon777

Цитата: rami от 12 ноября 2015, 19:00rami
:) Не все так просто... Я описание ОЧЕНЬ упростил. Конечно же на листе имеется несколько данных и простым перемещением таблицы здесь не обойтись.
1- Нужно найти текст
Sub SearchSheet
 Dim oSheet
 Dim oReplace
 oSheet = ThisComponent.Sheets(0)
 oReplace = oSheet.createReplaceDescriptor()
 oReplace.setSearchString("Отчет")
...

Выполнено

2 От ячейки содержащей значение "Отчет" выделяем 10 строк вниз ... ??? ??? ???



dimmon777

#5
Наконец-то добил, получилось примерно следующее, для меня в самый раз: :beer:


Sub SearchSheet
Dim oSheet
Dim oCell    
oSheet = ThisComponent.Sheets(0)
FandR = oSheet.createSearchDescriptor
FandR.setSearchString("Отчет:  ")
oCell = oSheet.findFirst(FandR)
i=oCell.CellAddress.Row

FandR.setSearchString("Итоги")
oCell = oSheet.findFirst(FandR)
i2=oCell.CellAddress.Row
'i1=oCell.CellAddress.Column

source = oSheet.getCellRangeByPosition(0, i, 37,120).getRangeAddress()
destination =  oSheet.getCellByPosition(0,i2+6).getCellAddress()
oSheet.moveRange( destination , source )


s = ThisComponent.CurrentController.getActiveSheet().PageStyle
 oStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(s)
 oStyle.ScaleToPages = 2        'кОЛ-ВО ЛИСТОВ

End Sub