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

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

20 Июнь 2019, 22:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Собрать данные из нескольких книг в один XLS  (Прочитано 2554 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kompilainenn
Мастер
*****
Online Online

Сообщений: 2 674



« Ответ #30: 20 Декабрь 2018, 12:32 »

Я для создания расширения использую тоже расширение. Называется BasicAddonBuilder_LibreOffice_0.5.2.oxt.
Единственно, у меня оно нормально работает в Либре 5.2.7 и не новее. У меня есть специальная отдельная портативная сборка Либры с установленным данным расширением.
Скачать само расширение можно отсюда http://calc-info.de/files/BasicAddonBuilder_LibreOffice_0.5.2.oxt
После установки появится отдельный минитулбар с одной кнопкой или надписью, после нажатия на который появляется диалог, в котором достаточно просто разобраться.
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Mike_B
Участник
**
Offline Offline

Сообщений: 27


« Ответ #31: 20 Декабрь 2018, 13:43 »

Санта уже прибыл? У нас 22-го в город заглянет. )))

Создать расширение не сложно, "как два байта переслать". Alt+F11, Управление, вкладка Библиотеки, Создать...
Первая часть вышла, создал библиотеку, назвал LibExport.

Вкладка Модули, перетаскиваешь модуль с макросом из Standard в новую библиотеку (можно с зажатым Ctrl, чтобы не перемещать, а создать копию). Опять вкладка Библиотеки, выделяешь библиотеку и кнопка Экспорт... Почему так сложно? А просто для библиотеки Standard эта кнопка не активна
А вот дальше не идет. Потом понял - Standard не перенести. Создал еще один модуль в LibExport, назвал его Work и руками скопировал в этот модуль нашу процедуру CreateComplexBook. Вот теперь экспортировал, обозвав ExtLib.oxt

Получается, я должен им передать ExtLib.oxt и template.ots со ссылками на листы? (полная книга на все 52 листа, их при создании положил в тот же каталог, чтобы с путями не возиться. Хотя в настройках Либры стоят относительные пути, проверил). И как тогда будет строка вызова выглядеть?

Вот что у меня сейчас.

Код:
Sub CreateComplexBook(Optional x1 As String, Optional x2 As String)
   If IsMissing(x1) Or IsMissing(x2) Then Exit Sub

   Dim TEMPLATE_NAME as String, RESULT_NAME as String

   TEMPLATE_NAME = x1
   RESULT_NAME   = x2
   Dim cDoc As Variant, oSheets As Variant, i As Long
   GlobalScope.BasicLibraries.LoadLibrary("Tools")

   If Not FileExists(TEMPLATE_NAME) Then Exit Sub
   oDoc = OpenDocument(ConvertToURL(TEMPLATE_NAME), Array())
   oSheets = oDoc.getSheets()
   For i = 0 To oSheets.getCount() - 1
       oSheets.getByIndex(i).setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
   Next i

   Dim Args(0) As New com.sun.star.beans.PropertyValue
   Args(0).Name = "FilterName"
   Args(0).value = "MS Excel 97"

   oDoc.StoreAsURL(ConvertToURL(RESULT_NAME), Args())
   oDoc.close(True)
End Sub

Запуск:

Код:
"C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --norestore "macro:///Standard.Module1.CreateComplexBook("""D:\Work\Libre\template.ots""","""D:\Work\Libre\print_d.xls""")"

С кавычками повозился, но это работает. Улыбка
Записан
Mike_B
Участник
**
Offline Offline

Сообщений: 27


« Ответ #32: 20 Декабрь 2018, 14:03 »

Йес! Переименовал в "Мои макросы - Standard" подпрограмму - теперь не запускается.
Запустил один раз ExtLib.oxt и импортировал. Запустил:

Код:
"C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --norestore "macro:///LibExport.Work.CreateComplexBook("""D:\Work\Libre\template.ots""","""D:\Work\Libre\print_d.xls""")"

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

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


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


WWW
« Ответ #33: 20 Декабрь 2018, 16:33 »

Санта уже прибыл? У нас 22-го в город заглянет. )))
А! Я всё перепутал! Это был не Санта Клаус, а его тёзка, Святой Николай... Ну, значит, 22-ого (и 25-ого) нужно будет повторить  Смеющийся
Вкладка Модули, перетаскиваешь модуль с макросом из Standard в новую библиотеку...
...Standard не перенести.
Точно! Библиотеку Standard не перенести. А вот модуль из Standard в другую библиотеку перетащить можно.
Получается, я должен им передать ExtLib.oxt и template.ots со ссылками на листы?
Ну да. И - в довесок - короткая инструкция: "если какие-то данные не подтягиваются, то войти в меню Файл-Шаблоны-Открыть шаблон, выбрать этот OTS, войти в Правка-Связи и для всех плохих ссылок нажать Изменить и выбрать нужную книгу. Закрыть с сохранением" Как по мне, то sapienti sat

Код вполне достойный, обязан работать. Ну, разве что можно было написать чуть короче, просто отказавшись от TEMPLATE_NAME и RESULT_NAME, сразу использовать x1 и x2.
Код:
"C:\Program Files\LibreOffice 5\program\soffice.exe" --headless --norestore "macro:///Standard.Module1.CreateComplexBook("""D:\Work\Libre\template.ots""","""D:\Work\Libre\print_d.xls""")"
С кавычками повозился, но это работает. Улыбка
Брррр... От кавычек в глазах зарябило... Ну, это загадочный виндоватый синтаксис, под Линуксом - ИМХО! - будет достаточно только одной пары кавычек вокруг всей части с macro...
А! И будь готов к тому, что они будут забрасывать вопросами о сообщениях об ошибках... Типа, "работает, файл создаётся, но в терминале куча сообщений на тему ...expected minor version=2;real minor version=2;expected subminor version=25;real subminor version=26... Не аккуратненько..." В этом случае можешь смело посылать их сюда или просто пообещать "Будет исправлено в 6.1.5."
Записан

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

Сообщений: 27


« Ответ #34: 20 Декабрь 2018, 16:52 »

короткая инструкция: "если какие-то данные не подтягиваются
Оно должно подтягиваться, ибо в текущем каталоге. Если хотят иначе - править шаблон. Об этом написал.

чуть короче, просто отказавшись от TEMPLATE_NAME и RESULT_NAME, сразу использовать x1 и x2.
Намеренно, вдруг вернемся к старому варианту по какой-то причине, так чтоб не воссоздавать имена. А код достойный благодаря Вам! Огромное спасибо, я б такое не наваял. Это надо кучу литературы перелопатить.

От кавычек в глазах зарябило...
Между прочим, у Питоньяка тоже есть в начале книжки. А вот что в винде хорошо - часто (хотя и не всегда) можно заменить на апострофы: 'path_to/file' и понимается. Удобно, когда надо в кавычки вставить. Здесь попробовал такое - нет, тогда приходит в апострофах и не понимается, считает параметр missing.

И будь готов к тому, что они будут забрасывать вопросами о сообщениях об ошибках...
Надеюсь, не увидят ))), в cron вставят и спать по ночам. Кстати, вычитал, что есть ключ --invisible, но у меня не сработал, все равно окошко Либры есть. Ну и ладно.

Версии - стоит 5.4.4, потому что на XP версия 6.1.3 не встала, хочет Win 7 SP1 и выше. А лицензий нет, на работе мы, как Остап Бендер - свято чтим уголовный кодекс. Чего там на юниксах у них - выясню.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #35: 20 Декабрь 2018, 16:59 »

Слушай, кончай "выкать" - не первый день знакомы  Смеющийся Опять же "ты не прав" пишется проще и быстрее, чем "Вы заблуждаетесь"  Смеющийся

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

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

Сообщений: 27


« Ответ #36: 20 Декабрь 2018, 17:36 »

Слушай, кончай "выкать" - не первый день знакомы   Опять же "ты не прав" пишется проще и быстрее, чем "Вы заблуждаетесь"
Улыбка))

Про кавычки цитирую Питоньяка:

OOo 1.1.0 не поддерживал двойные кавычки внутри строки. OOo 2.0, интерпретирует две
смежных двойные кавычки в строке как одну двойную кавычку, содержащуюся в строке; это
кажется усложненным, но в действительности очень просто. Чтобы вставить символ двойной
кавычки в строку, поместите два символа двойной кавычки в строку, как показано ниже:

S = "Она сказала ""Привет""" REM Она сказала "Привет"

Мне нужно было получить путь к файлу, обрамленный кавычками, при этом еще закавычить всю строку. Программно это проще собрать так:

strS = "macro:///Standard.Module1.CreateComplexBook(" & Chr(34) & "D:\Work\Libre\template.ots" & Chr(34) & "," & Chr(34) & "D:\Work\Libre\print_d.xls" & Chr(34) & ")"

То есть вокруг путей пишутся кавычки. В винде заключение в кавычки нужно, когда в пути есть пробел: C:\WINDOWS\system32\drivers\etc\hosts, но "C:\Program Files\LibreOffice 5\program\soffice.exe".

Я у себя обычно функцию самописную вставляю: Sq2(x), она вернет x, если в строке x пробелов нет, и "x", если есть. Любой путь через нее прогоняю и не задумываюсь.

А вот чисто теоретиццки теперь такой вопрос интересен: можно ли исполнить макрос из произвольного файла и что для этого нужно? Вот есть у меня файл tab1.ods, в нем по пути tab1.ods - Standard - XLS_mod есть Sub TestParam().

Код:
Sub TestParam ' Тестируем процедуру с и без параметров
Call CheckParam()
Call CheckParam("test")
Call CheckParam("/home/someuser/path1", "D:\Work\template\")
end sub
Sub CheckParam(Optional x1 As String, Optional x2 As String) ' собственно процедура
If IsMissing(x1) Then x1 = "<Missing>"
If IsMissing(x2) Then x2 = "<Missing>"
MsgBox "Param 1 = " & x1 & chr(10) & "Param 2 = " & x2
end sub


Пробовал по-всякому:

Код:
"C:\Program Files\LibreOffice 5\program\soffice.exe" --norestore D:\Work\Libre\tab1.ods "macro://file://D:/Work/Libre/tab1/Standard.XLS_mod.TestParam"
"C:\Program Files\LibreOffice 5\program\soffice.exe" --norestore D:\Work\Libre\tab1.ods "macro://D:/Work/Libre/tab1/Standard.XLS_mod.TestParam"
"C:\Program Files\LibreOffice 5\program\soffice.exe" --norestore D:\Work\Libre\tab1.ods "macro://D:\Work\Libre\tab1/Standard.XLS_mod.TestParam"

Т.е. с \ и / и через file:// - но не выходит каменный цветок. )))
« Последнее редактирование: 20 Декабрь 2018, 17:45 от Mike_B » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #37: 20 Декабрь 2018, 17:45 »

Да, удвоение кавычек - это ещё куда не шло... Но ты же пишешь, что сработала строка с тройными кавычками?

По вызову макроса. Ещё раз - после двойного слэша после слова macro ни путь, ни расширение НЕ НУЖНЫ.
Ты же в курсе - два файла с одним именем одновременно открыть нельзя. Даже если они их разных папок. То есть в памяти всегда только один файл вот именно с этим вот именем. А значит и поиски макроса будут однозначными, если указать только имя.
Попробуй убрать лишние буквы - должно работать...
Записан

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

Сообщений: 27


« Ответ #38: 20 Декабрь 2018, 17:49 »

Да, удвоение кавычек - это ещё куда не шло... Но ты же пишешь, что сработала строка с тройными кавычками?
Тройные - чтобы потом всю строку macro:///Standard.Module1.CreateComplexBook... закавычить.

после двойного слэша после слова macro ни путь, ни расширение НЕ НУЖНЫ
Это было первое, что пробовал. Вчерашнее сообщение ведь читал. Но та же песня - Calc открывается и все, сообщений от макроса нет.

Судя по инету, и не выйдет, безопасность. Там еще вещи типа
Код:
soffice "vnd.sun.star.script:Library1.Macro1?language=Basic&location=application"
обсуждают (https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=8232), но это уж заумно. )))
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #39: 20 Декабрь 2018, 18:23 »

Но та же песня - Calc открывается и все, сообщений от макроса нет.
Уточни, плз - открывается офис (с пустым документом) или документ tab1? Тут ведь что могло случиться - сам D:\Work\Libre\tab1.ods мог не загрузиться, а значит и макрос не был найден и выполнен.
Кстати, ты папку D:\Work\Libre\ в "доверенные источники" добавил?

Там еще вещи типа
Код:
soffice "vnd.sun.star.script:Library1.Macro1?language=Basic&location=application"
обсуждают, но это уж заумно. )))
Ну, не очень-то и заумно - мы тут, на форуме, с ребятами несколько раз это обсуждали, расковыряли в конце концов, ничего там сложного нет - просто синтаксис непривычный.
Можешь глянуть, например, здесь
Ха! Так ты по-английски читаешь?!! А чего ж Чернова взял? Брал бы сразу оригинал - там за годы прошедшие с перевода кой-чего новое появилось
Записан

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

Сообщений: 27


« Ответ #40: 20 Декабрь 2018, 21:50 »

Уточни, плз - открывается офис (с пустым документом) или документ tab1?
Открывается tab1.ods

Кстати, ты папку D:\Work\Libre\ в "доверенные источники" добавил?
Я нашел это, добавлял, но перед тестом удалил. Выходит, без того никак? Пришел я к человеку с макросами - а пока у него выбранный каталог не внесу в доверенные, никак не запустить? Наверно, проще тогда безопасность в совсем низкую поставить? Иначе же привязка к месту получается?

расковыряли в конце концов, ничего там сложного нет
Как сказал участник той темы - без поллитры не понять. )) По крайней мере сразу.

Ха! Так ты по-английски читаешь?!! А чего ж Чернова взял?
Естественно, любой программер читает по-английски. Но по-русски все же быстрее читает. Лучше Чернова с тех пор ничего не появилось? Он меня радовал: "холодная линейка" и "первые 128 характеров". )))

Писал-то я немало сам и с коллегами -- ассемблер, Fortran, Clipper, Си, VBA (Excel, Access, Word), AutoIt (система мониторинга на 196 тыс. ПК стояла), чуток SQL и Java, и понять можно, что тут через пакеты этой Явы, но вот с юниксом чуток лишь работал. В Либре концепции другие, нежели MS Office, и как понять, какой UNO и когда надо писать GlobalScope.BasicLibraries.LoadLibrary, а когда не надо - это не сообразишь...
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 407


« Ответ #41: 20 Декабрь 2018, 21:58 »

Ставить у клиента совсем низкую безопасность - это ... опасно.
Всё же вариант с расширениями - самый правильный для раздачи макросов.
Записан

С уважением,
Михаил Каганский
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #42: 20 Декабрь 2018, 22:16 »

Наверно, проще тогда безопасность в совсем низкую поставить?
Да стрёмно как-то... О явных вирусах на Бэйсике слышать не приходилось, но кое-что похожее на этом форуме обсуждалось...
Иначе же привязка к месту получается?
А это плохо? Отнесись к этой особенности реализации как к "противоугонке" - сопрут файл, а использовать не смогут  Смеющийся
Писал-то я немало сам и с коллегами -- ассемблер, Fortran, Clipper, Си, VBA (Excel, Access, Word), AutoIt (система мониторинга на 196 тыс. ПК стояла), чуток SQL и Java...
Понятно, ещё один ветеран предпенсионного возраста... А я-то удивляюсь - откуда чёткость слога и ясность мысли?  Всё хорошо

"когда надо писать GlobalScope.BasicLibraries.LoadLibrary, а когда не надо" - это у Питоньяка.

Насчет UNO, архитектуры и прочих хитрых штуковин - установи MRI. Мало того, что все свойства и методы объекта показывает, позволяет эти методы выполнять и рассматривать результаты, глубже и глубже, так ещё и все твои действия кодом записывает - просто копируешь в новый макрос, слегка логику подправляешь и получаешь работающую программу.


* MRI в работе.png (33.56 Кб, 706x570 - просмотрено 6 раз.)
Записан

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

Сообщений: 27


« Ответ #43: 20 Декабрь 2018, 23:28 »

Всё же вариант с расширениями - самый правильный для раздачи макросов.
Согласен. Мне вариант понравился. После объяснения @JohnSUN расширение создал.

О явных вирусах на Бэйсике слышать не приходилось
В MS это частая штука. Drive by download.

откуда чёткость слога и ясность мысли?
Без того нам никуда. Языки учатся, а логика либо есть, либо нет. И обязательно хорошее владение хотя бы одним натуральным языком - доносить мысли до клиента.

Насчет UNO, архитектуры и прочих хитрых штуковин - установи MRI.
Понял, типа инспектора объектов в VBA + Win32API.txt или "The Portable Script Center.chm" для VBS. )) Но к нему надо питона ставить? Упоминается там.
Записан
Rafik
Форумчанин
***
Offline Offline

Сообщений: 90


« Ответ #44: 21 Декабрь 2018, 07:55 »

К-хм. Прошу прощения за вклинивание в беседу.
Но к нему надо питона ставить
MRI написан на питоне.
Записан
Страниц: « 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!