[Решено]Установка макросов в системе.

Автор Massaraksh7, 21 мая 2024, 04:08

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

Massaraksh7

Есть необходимость создать что-то типа инсталлятора макросов.
Хранится ли где-нибудь путь до каталога с макросами?
У меня в Windows он, к примеру, такой:
C:\Users\%user%\AppData\Roaming\LibreOffice\4\user\basic\Standard\Module1.xba
Но ведь вряд ли его можно ли рассматривать, как нечто постоянное?
И как с этим в Linux?

bigor

Распрострагить макросы в LO можно через экспорт библиотеки или заморочиться полноценным расширением с кнопочками, меню итп.
Каталоги с макросами прописаны, но макросы там в несколько изменённом виде и напрямую писать их туда плохая идея
Поддержать наш форум можно здесь

Massaraksh7

Цитата: bigor от 21 мая 2024, 06:45Каталоги с макросами прописаны
Где прописаны?
Цитата: bigor от 21 мая 2024, 06:45но макросы там в несколько изменённом виде и напрямую писать их туда плохая идея
Я вижу, что они изменены, и вижу, как они изменены. Вообще не проблема - вставить xml-обрамление, и заменить ' " < > & и т.д. на &apos; и т.д.

economist

Либу на Basic/Python можно сохранить в oxt и без кнопочек, будет ставиться, обновляться и работать на Win/Lin/Mac.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7


bigor

Только не стандартную, нужно создать свою и потом её можно выгрузить в oxt
Поддержать наш форум можно здесь

Massaraksh7

Что-то не получается. Создал библиотеку VLibrary, записал туда макрос. Экспортировал в srv.oxt. Стёр макрос. Добавил в расширения. А дальше что? Работать перестало.

Massaraksh7

Может, лучше скажете, как добраться до пути с макросами, а дальше я уже сам.

bigor

Цитата: Massaraksh7 от 21 мая 2024, 08:05как добраться до пути с макросами
Сервис - Параметры - LibreOffice - Пути смотрим например где резервные копии лежат, рядом будет папка basic  с макросами, точнее с описанием библиотек и макросов и т.д.
Поддержать наш форум можно здесь

economist

Макросы могут быть в 3-х стандартных местах (включая сам док) и загружаться из произвольного (включая Интернет). У Питоньяка все есть.

Чтобы oxt работало, его макросы должны быть самодостаточными и написан аккуратно. Начать надо с хелловорлда, поискать в системе куда он встал, запомнить. Привычка ОС ныкать все по углам (особенно Linux) не позволяет все это упомнить, документируйте.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Massaraksh7


Massaraksh7

Сделал обновление макросов простым способом, о котором написал в посте #2.
Работает. Надо будет ещё проверку версий организовать, ну это мелочи.
Если кому интересно - код на Lazarus, где можно понять логику обновления. Если никому не интересно - снесите.
function ChangeSomeSymb(s:string):string;
var i,k:integer;c:string;
begin
Result:='';
for i:=1 to Utf8Length(s) do
   begin
   k:=0;
   c:=Utf8Copy(s,i,1);
   if c='''' then begin Result:=Result+'&apos;';inc(k);end;
   if c='"' then begin Result:=Result+'&quot;';inc(k);end;
   if c='<' then begin Result:=Result+'&lt;';inc(k);end;
   if c='>' then begin Result:=Result+'&gt;';inc(k);end;
   if c='&' then begin Result:=Result+'&amp;';inc(k);end;
   if k=0 then Result:=Result+c;
   end;
end;

//---Обновление скрипта
function UpdateMacro(fn:string):Boolean;
var path,fs,appdata,s:string;
lso,lsi:TStringlist;i:integer;
begin
{$IFDEF UNIX}
path:='~/.config/libreoffice/4/user/basic/Standard/Module1.xba';
{$ENDIF}
{$IFDEF WINDOWS}
appdata:=SysUtils.GetEnvironmentVariable('APPDATA');
path:=appdata+'\libreoffice\4\user\basic\Standard\Module1.xba';
{$ENDIF}

lsi:=TStringlist.Create;
lso:=TStringlist.Create;
lso.Add('<?xml version="1.0" encoding="UTF-8"?>');
lso.Add('<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">');
lso.Add('<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">');
lsi.LoadFromFile(fn);
for i:=0 to lsi.Count-1 do
   begin
   s:=ChangeSomeSymb(lsi[i]);
   lso.Add(s);
   end;
lso.Add('</script:module>');
lso.SaveToFile(path);
lso.Free;
lsi.Free;
Result:=True;
end;