LINUX.ORG.RU

LibreOffice Calc как создать макрос

 


0

1

Делаю для себя словарик в LibreOffice Calc. В первой колонке слова, далее тип глагола и его перевод. Выбрал слово, например falar. Надо сделать кнопку на панели, чтобы при нажатии на нее запускалась программа просмотра eom (глаз мате) и ей передавался файл с именем глагола falar.png, в котором таблица его склонений. Все файлы глаголов png хранятся там же, где и файл словарика. Никогда не работал с макросами, да и с офисом собственно мало, все больше TeX. В програмировании не силен. Пытался читать как это сделать и утонул в объеме информации. Может кто подскажет, кто уже знает как это делается.

Вот тебе рыба:

Sub verb

Dim oCell As Object		' Текущая ячейка

	oCell = ThisComponent.getCurrentSelection()
	If oCell.getImplementationName() <> "ScCellObj" Then Exit Sub	' Это не ячейка - диапазон или объект
	Shell("eom file://" + oCell.Formula + ".png", 1)

End Sub
Основу взял с http://forumooo.ru/index.php/topic,2384.0.html.
Вставлять сам код, а затем кнопку, нужно через меню Сервис/Макросы/Управление макросами/LibreOffice Basic.... Надеюсь, разберёшся.

pS ()
Последнее исправление: pS (всего исправлений: 1)

Прежде всего рекомендую книги Эндрю Питоньяка «OpenOffice.org Macros Explained» или чуть покороче и не такую подробную с примерами «OpenOffice Macro Information» (русский перевод одной из версий второй книги) с сайта автора. Ещё есть офицлальное руководство для начинающих «OpenOffice.org 3.2 BASIC Guide», хотя и не самое новое.

grem ★★★★★ ()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от pS

Спасибо. Работает, но только если вместо file:// вставить полный путь к директории, где лежат файлы png. А какой оператор берет путь где лежит сам файл ods?

rustamych ★★ ()
Ответ на: комментарий от rustamych

Такой код:

...
Dim sURL As String
Dim oDoc As Object
	oDoc = ThisComponent
	If (oDoc.hasLocation()) Then
		sURL = oDoc.getURL()
	End If
...
Понятно, файл до этого должен быть сохранён хотя бы один раз! sURL будет вместе с именем файла. Его надо обрезать.

pS ()
Последнее исправление: pS (всего исправлений: 3)
Ответ на: комментарий от pS

Вру! Правильно использовать не getURL(), а getLocation() и ничего обрезать не нужно.

pS ()
Ответ на: комментарий от pS

Вот чёрт! Сейчас сам проверил и не работает!
Правильный вариант: sURL = oDoc.URL вместо sURL = oDoc.getURL(). Нужно обрезать имя.

pS ()
Последнее исправление: pS (всего исправлений: 1)
Ответ на: комментарий от rustamych

Вот стопудово работающий вариант:

Sub Verb

Dim oDoc As Object		' Текущий документ
Dim oCell As Object		' Текущая ячейка
Dim sLocation As String		' Расположение файла

	oDoc = ThisComponent
	oCell = oDoc.getCurrentSelection()
	If (oCell.getImplementationName() <> "ScCellObj") Then Exit Sub	' Это не ячейка - диапазон или объект
	If (Not oDoc.hasLocation()) Then Exit Sub			' Не документ / ни разу не сохранён
	If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
		GlobalScope.BasicLibraries.LoadLibrary("Tools")
	End If
	sLocation = Tools.Strings.DirectoryNameoutofPath(oDoc.URL, "/")	+ "/"
	Shell("eom " + sLocation + oCell.Formula + ".png", 1)

End Sub
Удачи!

pS ()
Ответ на: комментарий от pS

Вы не смогли бы мне помочь еще с другой проблемой. Как сделать так, чтобы при наведении мыши на ячейку допустим К26 появлялась подсказка (примечание) в котором был бы номер ячейки А26 (в той же строке). Поясню нужду: веду учет студентов на занятиях. В столбце А есть или номер студента или его фамилия. Количество лекций велико и столбец А уходит из окна влево и чтобы найти ячейку студента приходится водить долго пальцем по экрану. Я решил проблему тем, что добавил примечание в каждую ячейку с номер соответствующей ячейки. Трудоемко, но сделал и теперь просто копирую столбец в каждый новый день. Примечания копируются автоматически. Но может есть какая глобальная настройка?

rustamych ★★ ()
Ответ на: комментарий от greenman

Спасибо большое. Это то что надо. Всю жизнь пользуюсь техом, но вот в этих случаях лучше офис.

rustamych ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.