Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

9 Март 2021, 10:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Вставить строку в диапазон [РЕШЕНО]  (Прочитано 4799 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aleksandr H.
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Wild West Ukraine
Сообщений: 96

glory to nation


WWW
« Стартовое сообщение: 16 Ноябрь 2014, 11:59 »

Это спинофф соседнено топика

2. До Питоньяка так и не добрался? См.  5.23.2. Copy Spreadsheet Cells Without The Clipboard и  5.23.1. Copy Spreadsheet Cells With The Clipboard.
В первом из них приблизительно такой код:
Код:

Код:
Sub exampleCopyRange
Dim oSheet As Variant
Dim aRangeAddress As New com.sun.star.table.CellRangeAddress
Dim aCellAddress As New com.sun.star.table.CellAddress
oSheet = ThisComponent.getSheets().getByIndex(0) ' Первый лист книги (он есть всегда, не ошибемся)
aRangeAddress = oSheet.getRows().getByIndex(7).getRangeAddress() ' Адрес всей восьмой строки, на всю длину
aCellAddress = oSheet.getCellByPosition(0, 22).getCellAddress() ' Адрес первой ячейки в 23 строке
oSheet.copyRange(aCellAddress, aRangeAddress) ' Копирование
End Sub

На самом деле Oliver Brinzing там чуть запутаннее написал: сначала взял адрес всего диапазона, куда будет копировать, потом взял адрес его первой ячейки... Реально для копирования нужно знать адрес диапазона, из которого копируем (лист, первая и последняя колонка, первая и последняя строка), и адрес ячейки, в которую копируем (лист, колонка, строка).
(Друг мой, вообще-то этот твой вопрос хоть и в продолжение темы, но все-таки совершенно самостоятельный. На форуме есть правило - новый вопрос = новая тема. Так незарегистрированным читателям проще отыскивать ответы на свои вопросы. Учти на будущее, ОК?)

Этот код я видел, только он копирует строку и строку вставляет, в одно место. А как вставить эту строку в диапазон? см. видео

* RangeCOpies.avi (638.87 Кб - загружено 9 раз.)
« Последнее редактирование: 16 Ноябрь 2014, 21:31 от Aleksandr H. » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 16 Ноябрь 2014, 12:11 »

Это тот самый FillAuto, про который я раньше намекал - щёлк и всё...
Код:
oSheet.getCellRangeByName("A1:F24").fillAuto(com.sun.star.sheet.FillDirection.TO_TOP, 1)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #2: 16 Ноябрь 2014, 12:25 »

Это тот самый FillAuto,
...который Aleksandr H. уже использовал в коде.


Присваивать значения можно только равным по размерности объектам: или от ячейки к ячейке, или от массива к такому же по размерности массиву. В коде:
Код:
oSheet.copyRange(aCellAddress, aRangeAddress) ' Копирование
копирование происходит не в ячейку aCellAddress, а по адресу aCellAddress
Записан

JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 16 Ноябрь 2014, 12:40 »

Цитата:
Это тот самый FillAuto,
...который Aleksandr H. уже использовал в коде.
Где?  Шокирован Это ты про последний вариант? Не вижу я там FillAuto...

Aleksandr H., по поводу видео... Да, размножение данных через копи-паст штука привычная. Но вот для такой операции - не перенос данных-формул-форматов, а просто для растягивания образца на целый диапазон - лучше использовать Правка-Заполнить: в принципе делается всё то же самое, но чуть-чуть лучше...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #4: 16 Ноябрь 2014, 12:48 »

Где? Шокирован
Шокирован Шокирован Шокирован


* Снимок выделенного.png (122.78 Кб, 894x377 - просмотрено 21 раз.)
Записан

JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 16 Ноябрь 2014, 12:54 »

Ага, спасибо... какой-то я рассеянный сегодня: скопировал код из сообщения в редактор Бэйсика, просмотрел, ничего нового не увидел... Оказывается, скопировал самый первый вариант, sub Cos.  Да уж...
Кстати, Aleksandr H., а почему такое название? Вроде бы тут тригонометрией и не пахнет...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Aleksandr H.
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Wild West Ukraine
Сообщений: 96

glory to nation


WWW
« Ответ #6: 16 Ноябрь 2014, 20:04 »

Кстати, Aleksandr H., а почему такое название? Вроде бы тут тригонометрией и не пахнет...
Да, ты прав, тригонометрией и не пахнет. Кто называет процедуры Proc1, кто asdf, кто дает сразу осмысленное название на англ. языке, я же, в силу работы с нашими самими близкими соседями, временные процедуры называю просто coś (smthg - на 2 символа длиннее  Подмигивающий)

просто для растягивания образца на целый диапазон - лучше использовать Правка-Заполнить: в принципе делается всё то же самое, но чуть-чуть лучше...
Я надеюсь что смогу сам найти программную реализацию этого. Подскажи, это ведь возможно?
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #7: 16 Ноябрь 2014, 20:35 »

Я надеюсь что смогу сам найти программную реализацию этого. Подскажи, это ведь возможно?
Возможно, если обратить внимание Шокирован на красную рамку на снимке экрана (Я уже второй раз сегодня выкладываю этот снимок)
Это и есть "Правка-Заполнить"


* Снимок выделенного.png (122.78 Кб, 894x377 - просмотрено 18 раз.)
Записан

JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #8: 16 Ноябрь 2014, 20:58 »

А быстрее макрос в таком виде работать уже вряд ли будет. Эксперимента ради, попробуй на этих 9к строк тот приём, что в видео показал - тормоза начинаются здесь, от макроса уже ничего не зависит. Это Calc пересчитывает эту кучу формул, некоторые из которых требуют работы с 9000 значений.
Вообще-то, ускорить можно... Но придется пересмотреть последовательность действий.
Тут какие соображения: 9000 формул считаться будут по-любому дольше, чем 1000. Поэтому, наверное, можно было бы на первом этапе только пометить строки, которые понадобятся позже. То есть вставить пока только формулу в колонку C.
Когда она посчитается, выбрать только те строки, с которыми нужно работать дальше, и перенести их в новый лист.
Это, пожалуй, и будет ответом на первоначальный вопрос задачи, про удаление лишних строк...
Только потом, после сокращения исходных данных, переводить значения температур в числа, считать средние, отбирать по одному из вычисленных значений и, наверное, копировать в еще один новый лист...
Вроде бы должно немного ускориться.
У тебя в формуле всё ещё фигурирует 9000 (в формуле в колонке E). Не хочешь и туда (lastrow+1) вставить?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Aleksandr H.
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Wild West Ukraine
Сообщений: 96

glory to nation


WWW
« Ответ #9: 16 Ноябрь 2014, 21:31 »

rami, спасибо за подсказку.

JohnSUN, ты прав - если вручную на 9k записей повторить прием из видео, то это займет ~140 сек, так само как и работа макроса.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!