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

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

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

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Помогите !!! автоматическое добавление даты...  (Прочитано 32963 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maxx_d
Участник
**
Offline Offline

Сообщений: 5


« Ответ #15: 27 Июнь 2011, 11:12 »

Спасибо большое! За наводку
немного не туда смотрел - "привязывал" к "запуск приложения", а надо было к "открытию файла".
Записан
Gabit
Новичок
*
Offline Offline

Сообщений: 1


« Ответ #16: 7 Май 2012, 10:50 »

Доброе время суток !

Аналог Worksheet_Change можно сделать только указанным в этой теме методом или есть другой более простой ?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #17: 7 Май 2012, 15:07 »

Добро пожаловать на форум!
Да нет, проще, пожалуй, способа нет... А в чем проблема? Много писать? Или предложенный вариант не работает?
Записан

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

Сообщений: 1


« Ответ #18: 13 Январь 2013, 20:50 »

Вот работающий пример.

а можно ли как то заставить маскрос обслуживать другой столбец ?
потому что замена координаты не работает
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #19: 13 Январь 2013, 21:40 »

В примере RFJ в макросе нужно сделать замены, чтобы, например, отслеживались ячейки "E11:E21", а время писалось в "C6:C16"
Цитата:
...
   For s=10 To 20     REM s задает отследуемые строки  
      oCell = oSheet.getCellByPosition(4,s)    REM 4 задает отследуемый столбец ("E")

...
...
       oCell=oSheet.getCellByposition(c-2,r-5)   REM с-5 задает столбец "C", r-5 задает строки для записи времени


и перезапустить макрос addListener (или закрыть и снова открыть файл).

Весь макрос целиком:
Код:
Sub addListener
oDocument = ThisComponent
oSheet = oDocument.CurrentController.getActiveSheet() 'получаем активный лист
oListener = CreateUnoListener("OOO_", "com.sun.star.chart.XChartDataChangeEventListener")

'Задаем ячейки, которые будем отслеживать (на активном листе), в данном случае "E11:E21"
For s=10 To 20
oCell = oSheet.getCellByPosition(4,s)
oCell.addChartDataChangeEventListener(oListener)
Next
MsgBox "Listener added"
End Sub

Sub OOO_chartDataChanged(oEvent)
r=oEvent.Source.CellAddress.Row
c=oEvent.Source.CellAddress.Column
v=oEvent.Source.String

Now_write(r,c,v)
End Sub

Sub Now_write(r,c,v)
oDoc=ThisComponent
  oSheet=oDoc.Sheets.getByName("Лист1") 'задаем лист для записи текущих даты и времени,
  'может в общем случае не совпадать с листом,
  'на котором были заданы отслеживаемые ячейки!
   oCell=oSheet.getCellByposition(c-2,r-5) 'Пишем время в "C6:C16"

oCell.setValue(Now)

If v="" Then
oCell.setValue(v)
End If
End Sub

PS. Установить для ячеек "C6:C16" нужный формат ячеек (Время)!
« Последнее редактирование: 13 Январь 2013, 21:54 от Hasim » Записан
nik_ko
Участник
**
Offline Offline

Сообщений: 8


« Ответ #20: 24 Март 2014, 21:23 »

Как определить адрес ячейки, если Listener устанавливать не в каждую ячейку, а на диапазон ячеек (D2:d102)?
как-то так:

Sub addListener
   oDocument = ThisComponent
   oSheet = oDocument.CurrentController.getActiveSheet() 'получаем активный лист
   oCell = oSheet.getCellRangeByName("D2:D102")
        oListener = CreateUnoListener("OOO_", "com.sun.star.chart.XChartDataChangeEventListener")
        oCell.addChartDataChangeEventListener(oListener)
End Sub

Sub OOO_chartDataChanged(oEvent)
?
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #21: 25 Март 2014, 14:52 »

Как определить адрес ячейки, если Listener устанавливать не в каждую ячейку, а на диапазон ячеек (D2:d102)?
Здесь к Listener добавляется для отслеживания весь диапазон целиком.
То есть, будет ослеживаться изменение любой ячейки из диапазона, но определить, какая именно ячейка из этого диапазона изменена, нельзя.
Записан
nik_ko
Участник
**
Offline Offline

Сообщений: 8


« Ответ #22: 25 Март 2014, 15:46 »

- можно ли установить Listener по другому - но не перечисляя ячейки?
Проблема такова:
- в таблице 15000 строк и будет больше
- строки и добавляются и вставляются
- после вставки строки Listener подвешивает LOff в Windows XP,  в Linux тормоз не напрягает
- ниже по строкам  перестает срабатывать

Sub OOO_chartDataChanged(oEvent) проверял только на срабатывание, тормозов вроде - бы нет,

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

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


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


WWW
« Ответ #23: 25 Март 2014, 17:39 »

Так, что ли?

[вложение удалено Администратором]
Записан

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

Сообщений: 754


Woe from wit


« Ответ #24: 25 Март 2014, 19:00 »

Так, что ли?
Эта фишка - События листа - есть в новых версиях. В старых ее не было, был только Listener.
И События листа отслеживают все ячейки листа - привязанный макрос срабатывает при изменении любой ячейки на листе.
Поэтому требуется обычно определять адрес этой ячейки, чтобы не запускать макрос, если эта ячейка не должна отслеживаться.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #25: 26 Март 2014, 11:25 »

Да-да, ты абсолютно прав.
И возможность эта совсем новая, поэтому использовать её никак нельзя.
И использование вручную описанного Listener напрочь отсекает возможность исследовать oEvent в отладчике.
И в первых строчках процедуры-обработчика проверить попадает ли ячейка события в проверяемый диапазон (queryIntersection) и ничего не делать в противном случае - моветон: разумеется, если назначить слушатель события на диапазон ячеек, то будет использоваться совершенно другой, гораздо лучший алгоритм.

"Вот Вы нам сейчас это всё рассказали и... что?..." (с) "12"
Записан

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

Сообщений: 8


« Ответ #26: 26 Март 2014, 21:59 »

Спасибо JohnSUN и Hasim!
Таки да, не тормозит и считает и вставку строк проглатывает.
Записан
Yelik
Участник
**
Offline Offline

Сообщений: 11


« Ответ #27: 8 Апрель 2015, 22:52 »

Так, что ли?
Эта фишка - События листа - есть в новых версиях. В старых ее не было, был только Listener.
И События листа отслеживают все ячейки листа - привязанный макрос срабатывает при изменении любой ячейки на листе.
Поэтому требуется обычно определять адрес этой ячейки, чтобы не запускать макрос, если эта ячейка не должна отслеживаться.
У меня не работает.
В примере RFJ в макросе нужно сделать замены, чтобы, например, отслеживались ячейки "E11:E21", а время писалось в "C6:C16"
Цитата:
...
   For s=10 To 20     REM s задает отследуемые строки   
      oCell = oSheet.getCellByPosition(4,s)    REM 4 задает отследуемый столбец ("E")

...
...
       oCell=oSheet.getCellByposition(c-2,r-5)   REM с-5 задает столбец "C", r-5 задает строки для записи времени


и перезапустить макрос addListener (или закрыть и снова открыть файл).

Весь макрос целиком:
Код:
Sub addListener
oDocument = ThisComponent
oSheet = oDocument.CurrentController.getActiveSheet() 'получаем активный лист
oListener = CreateUnoListener("OOO_", "com.sun.star.chart.XChartDataChangeEventListener")

'Задаем ячейки, которые будем отслеживать (на активном листе), в данном случае "E11:E21"
For s=10 To 20
oCell = oSheet.getCellByPosition(4,s)
oCell.addChartDataChangeEventListener(oListener)
Next
MsgBox "Listener added"
End Sub

Sub OOO_chartDataChanged(oEvent)
r=oEvent.Source.CellAddress.Row
c=oEvent.Source.CellAddress.Column
v=oEvent.Source.String

Now_write(r,c,v)
End Sub

Sub Now_write(r,c,v)
oDoc=ThisComponent
  oSheet=oDoc.Sheets.getByName("Лист1") 'задаем лист для записи текущих даты и времени,
  'может в общем случае не совпадать с листом,
  'на котором были заданы отслеживаемые ячейки!
  oCell=oSheet.getCellByposition[b](c-2,r-5)[/b] 'Пишем время в "C6:C16"

oCell.setValue(Now)

If v="" Then
oCell.setValue(v)
End If
End Sub

PS. Установить для ячеек "C6:C16" нужный формат ячеек (Время)!
Как изменить код(c-2,r-5) чтоб писать в В3? Или лучше пользоваться Событиями листа(как?)? Непонимающий
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #28: 9 Апрель 2015, 08:34 »

Привет, Yelik! И добро пожаловать на форум!
Что не работает? Что и как делал? В какой программе?
Как изменить код(c-2,r-5) чтоб писать в В3? Или лучше пользоваться Событиями листа(как?)? Непонимающий
Всегда в В3? Это колонка 1, строка 2 (нумерация строк, колонок, листов, таблиц и почти всего остального в Бэйсике начинается с нуля)
Значит, пишем
Код:
oCell=oSheet.getCellByposition(1,2)
Записан

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

Сообщений: 11


« Ответ #29: 9 Апрель 2015, 10:03 »

Привет JohnSUN,

Libreoffice 4.4.1
Не работает автоматическое добавление даты. Ошибка в строке: r=oEvent.Source.CellAddress.Row


* Макрос дата.jpg (177.26 Кб, 1254x728 - просмотрено 46 раз.)
Записан
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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