Automatyzacja zapisu - plik tekstowy, jeden arkusz
Automatyzacja zapisu - plik tekstowy, jeden arkusz
Witam
Czy jest możliwość zapisania jednego arkusza jednym kliknięciem do pliku tekstowego z rozszerzeniem np ###?
Mam świetnie przygotowany plik z kilkoma arkuszami... arkusz z dziesiątka przeliczę i tak dalej ... ale dla maszyny potrzebny jest plik tylko z jednego arkusza, zwykły tekstowy z informacjami oddzielonymi spacjami w odpowiednim katalogu ...
Czy można dodać do arkusza guzik który szybko by zapisał plik wcześniej ustalony w odpowiednim miejscu z odpowiednim rozszerzeniem? jeśli tak to jak to zrobić?
Z góry dziękuje za odpowiedź lub choćby małą podpowiedź w czym tego szukać...
Czy jest możliwość zapisania jednego arkusza jednym kliknięciem do pliku tekstowego z rozszerzeniem np ###?
Mam świetnie przygotowany plik z kilkoma arkuszami... arkusz z dziesiątka przeliczę i tak dalej ... ale dla maszyny potrzebny jest plik tylko z jednego arkusza, zwykły tekstowy z informacjami oddzielonymi spacjami w odpowiednim katalogu ...
Czy można dodać do arkusza guzik który szybko by zapisał plik wcześniej ustalony w odpowiednim miejscu z odpowiednim rozszerzeniem? jeśli tak to jak to zrobić?
Z góry dziękuje za odpowiedź lub choćby małą podpowiedź w czym tego szukać...
OpenOffice 3.1 na Windows Vista
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Można to zrobić wybierając "Zapisz jako" i wskazując typ "Tekst CSV". Ten sposób zapisuje tylko aktywny arkusz.
W dalszych określanych parametrach należy podać sposób kodowania znaków i separatory pól i wierszy.
Całą procedurę można zarejestrować jako makro i przypisać do przycisku.
W dalszych określanych parametrach należy podać sposób kodowania znaków i separatory pól i wierszy.
Całą procedurę można zarejestrować jako makro i przypisać do przycisku.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Nagraną procedurę można wykorzystać jako szkielet do stworzenia lepszego rozwiązania, bo w tym przypadku nie pozbędziemy się okienka dialogowego, co zmusi nas do klikania, wciskania klawisza.Jermor pisze:Całą procedurę można zarejestrować jako makro i przypisać do przycisku.
Cały kod mógłby wyglądać tak:
Kod: Zaznacz cały
Sub ZapiszJakoTekstCSV
Dim FileProperties(1) as new com.sun.star.beans.PropertyValue
Dim sUrl As String
Dim oDoc As Object
oDoc = ThisComponent
sUrl = ConvertToUrl("C:\Twójkatalog\ZapisanyCSV.txt")' home/ty/dokumenty/ZapisantCSV.txt <- to jest linux
FileProperties(0).Name = "FilterName"
FileProperties(0).Value = "Text - txt - csv (StarCalc)"
FileProperties(1).Name = "FilterOptions"
FileProperties(1).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
oDoc.storeAsURL(sUrl, FileProperties())
End Sub
Na koniec wstaw przycisk jak kolega wyżej zaproponował.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Świetnie to działa
A jak można dodać by nazwa pliku była zawartością jakiejś komórki? (np data z nazwiskiem lub numer kolejny)
Dzięki serdeczne
A jak można dodać by nazwa pliku była zawartością jakiejś komórki? (np data z nazwiskiem lub numer kolejny)
Dzięki serdeczne
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Dopisz coś takiego
Jeśli w F3 będzie pełna nazwa, z rozszerzeniem, to wszystko.
Jeśli tylko pierwsza część nazwy, napisz instrukcję tak
Mam nadzieję, że się nie pomyliłem.
Kod: Zaznacz cały
Dim sPath As String
Dim sFileName as String
sPath = "C:\Twójkatalog\"
sFileName = thisComponent.getSheets.getByName("Arkusz1").getCellRangeByName("F3").getString ' to jest przykładowy adres
sURL = ConvertToURL(sPath & sFileName)
Jeśli tylko pierwsza część nazwy, napisz instrukcję tak
Kod: Zaznacz cały
sURL=ConvertToURL(sPath&sFileName&".txt")
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Fantastycznie dokładnie o to chodziło !!!
Ale mam mały problemik innej natury
Chciałbym by nazwa zawierała zawartość trzech komórek. W jednej IMIE w kolejnej NAZWISKO i w ostatniej DATA potem wszystko razem umieszczam w komórce jednej stosując:
=Zamówienie.H2&" - "&Zamówienie.I8&" - "&(Zamówienie.$I$1)
i wyświetla mi się zamiast daty rząd cyfr...
Ale mam mały problemik innej natury
Chciałbym by nazwa zawierała zawartość trzech komórek. W jednej IMIE w kolejnej NAZWISKO i w ostatniej DATA potem wszystko razem umieszczam w komórce jednej stosując:
=Zamówienie.H2&" - "&Zamówienie.I8&" - "&(Zamówienie.$I$1)
i wyświetla mi się zamiast daty rząd cyfr...
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Data jesr w rzeczywistości liczbą, która mówi ile dni minęło od 31.12.1899 r. a ułamek odpowiada części doby.
Musisz skorzystać z funkcji DZIEŃ, MIESIĄC i ROK DZIEŃ(I1)&"-"&MIIESIĄC(I1)&"-"&ROK(I1)
Musisz skorzystać z funkcji DZIEŃ, MIESIĄC i ROK DZIEŃ(I1)&"-"&MIIESIĄC(I1)&"-"&ROK(I1)
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Fantastycznie
A można zrobić coś by dodawana była automatycznie zawsze zwiększona o jeden numeracja ?
Samo zamówienie zawsze będzie otwierane zawsze z jednego pliku tylko do odczytu który będzie jak szablon natomiast reszta będzie już tylko zapisem wypełnionych pól... no ale numeracja co jeden była by świetna...
A można zrobić coś by dodawana była automatycznie zawsze zwiększona o jeden numeracja ?
Samo zamówienie zawsze będzie otwierane zawsze z jednego pliku tylko do odczytu który będzie jak szablon natomiast reszta będzie już tylko zapisem wypełnionych pól... no ale numeracja co jeden była by świetna...
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Wygląda na to, że to my napiszemy tę procedurę. A przecież belstar podał gdzie znaleźć literaturę.
Wybierz komórkę, w której umieścisz liczbę początkową. np F5 i zmodyfikuj tworzoną nazwę pliku
Uzupełnij procedurę w obszarze definicji:
na końcu, po zapisaniu pliku txt dopisz to:
Wybierz komórkę, w której umieścisz liczbę początkową. np F5 i zmodyfikuj tworzoną nazwę pliku
Uzupełnij procedurę w obszarze definicji:
Kod: Zaznacz cały
Dim NrKolejny as Integer 'typ zmiennej Integer przechowuje wartości od -32767 do 32767
Dim dokument as object
Dim wykonawca as object
Kod: Zaznacz cały
NrKolejny= thisComponent.getSheets.getByName("Arkusz1").getCellRangeByName("F5").getValue ' to jest przykładowy adres
if NrKolejny > 32766 then
NrKolejny = 0
End if
thisComponent.getSheets.getByName("Arkusz1").getCellRangeByName("F5").setValue(NrKolejny+1)
Rem Poniższa procedura odpowiada wykonaniu skrótu CTRL+S, czyli zapisuje plik Twojego szablonu z nową wartością w F5
dokument = ThisComponent.CurrentController.Frame
wykonawca = createUnoService("com.sun.star.frame.DispatchHelper")
wykonawca.executeDispatch(dokument, ".uno:Save", "", 0, Array())
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Może to co napiszę będzie bezczelne choć nie do końca ale zwyczajnie chce się usprawiedliwić ...
Miej nadzieje że karma istnieje bo jeśli tak i trafisz na forum stolarskie to rozpiszę dla Ciebie kuchnie na formatki lub trafisz na formu CNC to napiszę dla Ciebie skrypt dla PikoCNC... Wiem że marne to pocieszenie ale Serdecznie dziękuje za podpowiedzi a raczej całe składniki
Miej nadzieje że karma istnieje bo jeśli tak i trafisz na forum stolarskie to rozpiszę dla Ciebie kuchnie na formatki lub trafisz na formu CNC to napiszę dla Ciebie skrypt dla PikoCNC... Wiem że marne to pocieszenie ale Serdecznie dziękuje za podpowiedzi a raczej całe składniki
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Nie czuję się urażony, po prostu myślałem, że jesteś bardziej zorientowany w makrach.
Tu odpowiadam (podpowiadam) Ci na Twoje pytanie w innym wątku. Chodzi o listę plików.
Wiesz już jak wstawić kolejny numer pliku. Jeśli numeracja będzie zaczynała się od 1 i narastała kolejno, możesz go wykorzystać jako numer wiersza.
Załóż w swoim dokumencie nowy arkusz, np Archiwum.
W nim, po zapisaniu pliku TXT, umieścisz w kolejnym wierszu utworzoną nazwę, datę i te dane, które są Ci potrzebne.
Numerem wiersza może być np jakaś stała+NrKolejny z makra. Wykorzystaj strukturę instrukcji
I wpisz je po instrukcji pobierania zmiennej NrKolejny, przed If. W tych instrukcjach
w układzie adresowania byPosition pierwsza liczba to kolumna druga to wiersz. Pierwsza kolumna w arkuszu i pierwszy wiersz w arkuszu sa oznaczone liczbą 0.
Wykorzystując naprzemian instrukcję pobierania i wstawiania wypełnisz arkusz Archiwum potrzebnymi danymi.
Dopiero po tych operacjach zapisz plik.
Teraz Twoje archiwum będzie razem z podstawowym plikiem.
Tu odpowiadam (podpowiadam) Ci na Twoje pytanie w innym wątku. Chodzi o listę plików.
Wiesz już jak wstawić kolejny numer pliku. Jeśli numeracja będzie zaczynała się od 1 i narastała kolejno, możesz go wykorzystać jako numer wiersza.
Załóż w swoim dokumencie nowy arkusz, np Archiwum.
W nim, po zapisaniu pliku TXT, umieścisz w kolejnym wierszu utworzoną nazwę, datę i te dane, które są Ci potrzebne.
Numerem wiersza może być np jakaś stała+NrKolejny z makra. Wykorzystaj strukturę instrukcji
Kod: Zaznacz cały
Dim Zmienna
thisComponent.getSheets.getByName("Archiwum").getCellRangeByPosition(0,NrKolejny).setValue(NrKolejny) 'wstawia numer kolejny w pierwszej kolumnie wiersza NrKolejny+1, bo numerowanie wierszy startuje od 0
Zmienna=thisComponent.getSheets.getByName("Arkusz1").getCellRangeByName("adres komórki").getValue 'tą strukturą pobierasz zawartość komórki
thisComponent.getSheets.getByName("Archiwum").getCellRangeByPosition(1,NrKolejny).setValue(Zmienna) ' tą strukturą wstawiasz do komórki
- setValue wstawia wartości liczbowe, setString - ciągi tekstowe ( np nazwę pliku)
getValue pobiera wartość z komórki, getString - pobiera ciąg tekstowy
w układzie adresowania byPosition pierwsza liczba to kolumna druga to wiersz. Pierwsza kolumna w arkuszu i pierwszy wiersz w arkuszu sa oznaczone liczbą 0.
Wykorzystując naprzemian instrukcję pobierania i wstawiania wypełnisz arkusz Archiwum potrzebnymi danymi.
Dopiero po tych operacjach zapisz plik.
Teraz Twoje archiwum będzie razem z podstawowym plikiem.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
W mailu, który mi przysłałeś na priva, host Twojego adresu zwrotnego jest odrzucany przez system poczty, jako nieznany
Sorry, I couldn't find any host named mikrotech.net.pl. (#5.1.2)
Sorry, I couldn't find any host named mikrotech.net.pl. (#5.1.2)
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Panowie niestety zaczynam wchodzić na nieznane sobie wody a nałyka całego pakietu na potrzeby jednego arkusza to zły pomysł.
Zwracam się więc z pytaniem czy ktoś miałby trochę wolnego czasu i zrobił dla mnie taki arkusz a raczej dokończył oczywiście za jakieś rozsądne wynagrodzenie.
Potrzebne mi jeszcze rzeczy to:
- odczyt plików i umieszczenie kilku informacji na listach.
- możliwość zapisania kilku danych w tych plikach bez ich otwierania (znaczy mogą się otwierać i zamykać byle działo się to automatycznie...
mam nadzieje że ktoś pomorze. Czekam na maila na marekmitonski@op.pl i podeślę to co mam do tej pory zrobione.
Zwracam się więc z pytaniem czy ktoś miałby trochę wolnego czasu i zrobił dla mnie taki arkusz a raczej dokończył oczywiście za jakieś rozsądne wynagrodzenie.
Potrzebne mi jeszcze rzeczy to:
- odczyt plików i umieszczenie kilku informacji na listach.
- możliwość zapisania kilku danych w tych plikach bez ich otwierania (znaczy mogą się otwierać i zamykać byle działo się to automatycznie...
mam nadzieje że ktoś pomorze. Czekam na maila na marekmitonski@op.pl i podeślę to co mam do tej pory zrobione.
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Mam taki problem
Chce wypełnić z macra pewną formułą komórkę i robię to tak jak poniżej i co dziwne mam trzy takie pozycje a działa tylko pierwsza... mało tego komórki dostają formule ale nic nie wyświetlają.
Co może być przyczyną
Dodam że próby z dodaniem (1) i tak dalej nic nie zmieniają i dział tak jak gdyby ich nie było
Chce wypełnić z macra pewną formułą komórkę i robię to tak jak poniżej i co dziwne mam trzy takie pozycje a działa tylko pierwsza... mało tego komórki dostają formule ale nic nie wyświetlają.
Co może być przyczyną
Dodam że próby z dodaniem (1) i tak dalej nic nie zmieniają i dział tak jak gdyby ich nie było
Kod: Zaznacz cały
sub OdczytPliku
rem ----------------------------------------------------------------------
rem define variables
dim document as object
Dim Sheet As Object
Dim Cell As Object
dim dispatcher as object
Dim NextFile As String
Dim AllFiles As String
Dim sLinkBaza As String
Dim bMode as Boolean
Dim wiersz as Integer
Dim wynik as String
oDocument = ThisComponent
CompatibilityMode( True ) 'set mode
CompatibilityMode( False) 'clear mode
oDocument = ThisComponent
bMode = CompatibilityMode()
Doc = ThisComponent
Sheet = Doc.Sheets(0)
AllFiles = ""
sLinkBaza = thisComponent.getSheets.getByName("Ustawienia").getCellRangeByName("LinkBaza").getString ' "C:\Twójkatalog\"
NextFile = Dir(sLinkBaza, 0)
wiersz = 7 rem pierwsza pozycja w kolumnie
While NextFile <> ""
Cell = Sheet.getCellRangeByName("AA"&wiersz)
Cell.String = NextFile
Cell(0) = Sheet.getCellRangeByName("E"&wiersz) '
Cell(0).Formula(0) = "=DDE("& Chr(34)& "soffice"& Chr(34)& ";"& Chr(34)& sLinkBaza & NextFile & Chr(34)& ";"& Chr(34)& "DataZamowienia"& Chr(34)& ")" 'wyswietla normalnie
Cell(1) = Sheet.getCellRangeByName("B"&wiersz)
Cell(1).Formula(1) = "=DDE("& Chr(34)& "soffice"& Chr(34)& ";"& Chr(34)& sLinkBaza & NextFile & Chr(34)& ";"& Chr(34)& "ZamawiajacyFirma"& Chr(34)& ")" 'komorki maja wstawiona formue ale nic nie wywietlaja
Cell(2) = Sheet.getCellRangeByName("F"&wiersz)
Cell(2).Formula(2) = "=DDE("& Chr(34)& "soffice"& Chr(34)& ";"& Chr(34)& sLinkBaza & NextFile & Chr(34)& ";"& Chr(34)& "StanZamowione"& Chr(34)& ";2)" 'dodanie na koncu 2 przerabia na tekst ale i tak nie dziala
oDocument.Sheets.getByName("STAN").getCellRangeByName("A"&wiersz).setValue(NextFile)
AllFiles = AllFiles & Chr(13) & NextFile
NextFile = Dir
wiersz = wiersz + 1
Wend
MsgBox " Znalezione pliki " & Chr(13) & Chr(13) & AllFiles
rem print AllFiles
rem oDocument.Sheets.getByName("Zamówienie").getCellRangeByName("M20").setValue(NextFile)
End Sub
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Przyglądając się twojej procedurze pierwsze co mi się rzuca w oczy to zmienna obiektowa Cell, w jednym miejscu jest to zmienna obiektowa a w drugim już tablica obiektów, i deklaracja zmiennej nie deklaruje tablicy:
itd.
Musisz przyjąć jednakową konwencje, albo zmienna
itd
albo tablica
itd.
Nie testowałem tego kodu lecz tylko przejrzałem, może chodzi o coś innego.
Kod: Zaznacz cały
Cell
...
Cell(0)
...
Cell(1)
...
Musisz przyjąć jednakową konwencje, albo zmienna
Kod: Zaznacz cały
Cell
..
Cell1
...
albo tablica
Kod: Zaznacz cały
Cell(0)
...
Cell(1)
...
Nie testowałem tego kodu lecz tylko przejrzałem, może chodzi o coś innego.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Próbowałem tak i tak i nic...
Co dziwne do arkusza jest wklejona procedura którą wypluwa cell z makro a mimo tego nie widać działania.
Wrzucam pliki. Działam na windows a całość była bezpośrednio na C
Proszę o pomoc bo dziwne to dla mnie...
Co dziwne do arkusza jest wklejona procedura którą wypluwa cell z makro a mimo tego nie widać działania.
Wrzucam pliki. Działam na windows a całość była bezpośrednio na C
Proszę o pomoc bo dziwne to dla mnie...
- Załączniki
-
- Ciecie.zip
- Plik rozpakować trzebna bezpośrednio na dysku C w windows
- (124.83 KiB) Pobrany 193 razy
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
A może ktoś to tylko uruchomić w celu sprawdzenia. Może po prostu to coś na moim pc... Bo dla mnie to nie logiczne.
Mam jeszcze inne pytanie czy dla arkusza do wprowadzania danych można zrobić taki mały interfejs jak np w base... ?
Mam jeszcze inne pytanie czy dla arkusza do wprowadzania danych można zrobić taki mały interfejs jak np w base... ?
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Dodaj funkcję ConvertToUrl()
U mnie działa, choć projekt bardzo chaotyczny, wymagający głębokiego szlifu. Chwali się tobie że chociaż próbujesz. Wszystkie procedury można skrócić, powtarzające się zamienić na funkcje, wywołania dispatcher-a zamienić API i czy nie lepiej stworzyć to base.
Co do drugiego pytania, pewno chodzi ci o formularz - można i tak, można też skorzystać z dialogów. Jeden i drugi sposób wymaga programowania.
Tak czy inaczej próbuj dalej, powodzenia.
Kod: Zaznacz cały
sLinkBaza = ConvertToUrl(thisComponent.getSheets.getByName("Ustawienia").getCellRangeByName("LinkBaza").getString)
Co do drugiego pytania, pewno chodzi ci o formularz - można i tak, można też skorzystać z dialogów. Jeden i drugi sposób wymaga programowania.
Tak czy inaczej próbuj dalej, powodzenia.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Za diabła mi to nie działa wyświetla się tylko data która tak czy inaczej jest zmieniana na aktualna a nie z pliku (prawdopodobnie kopiuje formue i ja wykonuje)
W komórkach innych jest umieszczana procedura ale nie zostaje wykonana... tak jak gdyby nie było nic w komórce
Może dało by się to tak poprawić by zostały wypluwane dane w komórki a nie procedury odczytujące... mmm
W komórkach innych jest umieszczana procedura ale nie zostaje wykonana... tak jak gdyby nie było nic w komórce
Może dało by się to tak poprawić by zostały wypluwane dane w komórki a nie procedury odczytujące... mmm
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Sprawdź menu Narzędzia -> Zawartość komórki, czy masz zaptaszkowane Oblicz automatycznie. Kiedy jest nie zaznaczone formuła nie wyświetla wyniku, dopiero po wciśnięciu F9.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Dziwna sprawa :/ ale nidy wszystko ustawione ale nic nie działa...
Moze sprawdzę po powrocie na innych PC.
Tobie to działa normalnie w innych komórkach niż tych z datą?
Moze sprawdzę po powrocie na innych PC.
Tobie to działa normalnie w innych komórkach niż tych z datą?
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Działa, spróbuj standardową diagnostykę.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Co masz na myśli z tą diagnostyką bo klikam i klikam i nic nie widzę tu ... Może ... No nie wiem .
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Apache Office 4.0.1
Windows XP Pro SP3
Windows XP Pro SP3
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
mmm dziwne zrobiłem wszystko włącznie z przeinstalowaniem i nic się nie zmieniło... może to coś z PC no nic będę musiał sprawdzić jak wrócę za kilka dni
EDIT............
Zadziałało
I tu robi mi się inny problem...
Mianowicie skrypt ma zapisywać dwa pliki w rożnych miejscach.
Jeden plik z tym co jest na ekranie
dróg plik zawiera nieco mniej informacji ale zawiera nr o jeden większą i ma się zapisać z inną nazwą ale problem jest taki...
Pliki są zapisane w różnych miejscach ale zawierają to samo... co dziwne drógi plik zostaje nadpisany przez pierwszy dopiero na końcu bo w połowie wykonywania sprawdzałem i jest poprawny...
EDIT............
Zadziałało
Kod: Zaznacz cały
REM ***** BASIC *****
Sub ZapiszJakoTekstODS
rem sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
Dim NrKolejny as Integer 'typ zmiennej Integer przechowuje wartości od -32767 do 32767
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
Dim sPath As String
Dim sFileName as String
Dim FileProperties (2) as new com.sun.star.beans.PropertyValue
Dim sUrl As String
Dim oDoc As Object
sPath = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C12").getString' "link do zapisu plikow bazy
oDoc = ThisComponent
sFileName = thisComponent.getSheets.getByName("ROZ").getCellRangeByName("A1").getString 'nazwa pliki
' sURL(1) = ConvertToURL(sPath(1) & sFileName(1))
FileProperties(0).Name = "FilterName"
FileProperties(0).Value = "calc8"
FileProperties(1).Name = "Overwrite"
FileProperties(1).Value = True
FileProperties(2).Name = "FilterOptions"
FileProperties(2).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
sURL=ConvertToURL(sPath & sFileName & ".ODS")
oDoc.storeAsURL(sUrl, FileProperties())
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
msgbox "Plik ODS z danymi oraz czysty plik został zapisany zapisany-------------baza"
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$8:$G$57"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$I$3:$I$5"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$I$10"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())
rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args6())
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "ToPoint"
args7(0).Value = "$I$12"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())
rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Flags"
args8(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args8())
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$I$16"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())
rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "Flags"
args10(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args10())
rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = "$I$25"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())
rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "Flags"
args14(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args14())
rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$I$14"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())
rem ----------------------------------------------------------------------
dim args16(0) as new com.sun.star.beans.PropertyValue
args16(0).Name = "Flags"
args16(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args16())
rem ----------------------------------------------------------------------
dim args17(0) as new com.sun.star.beans.PropertyValue
args17(0).Name = "ToPoint"
args17(0).Value = "$I$34"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args17())
rem ----------------------------------------------------------------------
dim args18(0) as new com.sun.star.beans.PropertyValue
args18(0).Name = "Flags"
args18(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args18())
rem ----------------------------------------------------------------------
dim args19(0) as new com.sun.star.beans.PropertyValue
args19(0).Name = "ToPoint"
args19(0).Value = "$I$36"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args19())
rem ----------------------------------------------------------------------
dim args20(0) as new com.sun.star.beans.PropertyValue
args20(0).Name = "Flags"
args20(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args20())
rem ----------------------------------------------------------------------
dim args21(0) as new com.sun.star.beans.PropertyValue
args21(0).Name = "ToPoint"
args21(0).Value = "$k$10"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args21())
rem ----------------------------------------------------------------------
dim args22(0) as new com.sun.star.beans.PropertyValue
args22(0).Name = "Flags"
args22(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args22())
rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "ToPoint"
args23(0).Value = "$k$12"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args23())
rem-----------------------------------------------------------------------
NrKolejny= thisComponent.getSheets.getByName("Zamówienie").getCellRangeByName("I2").getValue ' to jest przykładowy adres
if NrKolejny > 32766 then
NrKolejny = 0
End if
thisComponent.getSheets.getByName("Zamówienie").getCellRangeByName("I2").setValue(NrKolejny+1)
Rem Poniższa procedura odpowiada wykonaniu skrótu CTRL+S, czyli zapisuje plik Twojego szablonu z nową wartością w F5
dokument = ThisComponent.CurrentController.Frame
wykonawca = createUnoService("com.sun.star.frame.DispatchHelper")
wykonawca.executeDispatch(dokument, ".uno:Save", "", 0, Array())
rem-------------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim sPath1 As String
Dim sFileName1 as String
Dim FileProperties1 (2) as new com.sun.star.beans.PropertyValue
Dim sUrl1 As String
Dim oDoc1 As Object
sPath1 = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C14").getString' "katalog glowny dla pliku Ciecie
oDoc1 = ThisComponent
sFileName1 = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C16").getString 'nazwa czystego pliku ciecia
FileProperties1(0).Name = "FilterName"
FileProperties1(0).Value = "calc8"
FileProperties1(1).Name = "Overwrite"
FileProperties1(1).Value = True
FileProperties1(2).Name = "FilterOptions"
FileProperties1(2).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
sURL1=ConvertToURL(sPath1 & sFileName1 & ".ODS")
oDoc1.storeAsURL(sURL1, FileProperties1())
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
msgbox "Plik ODS z danymi oraz czysty plik został zapisany zapisany"
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
End Sub
Mianowicie skrypt ma zapisywać dwa pliki w rożnych miejscach.
Jeden plik z tym co jest na ekranie
dróg plik zawiera nieco mniej informacji ale zawiera nr o jeden większą i ma się zapisać z inną nazwą ale problem jest taki...
Pliki są zapisane w różnych miejscach ale zawierają to samo... co dziwne drógi plik zostaje nadpisany przez pierwszy dopiero na końcu bo w połowie wykonywania sprawdzałem i jest poprawny...
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Panowie choć mała podpowiedź w czym może tkwi problem że plik zostaje napisany skoro zmieniam ustawienia? może jakiś rejestr powinienem wyczyścić czy coś...
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Nikt nie miał z czymś takim odczynienia nigdy?
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Może po prostu kod jest zbyt rozwlekły i niezachęcający do analizy, by komuś chciało się go zgłębiać?
Mnie osobiście odrzuca niejednolitość środków: raz wywołania API (doc.StoreAsURL), raz makra UNO (.executeDispatch(dokument, ".uno:Save", ...). Mając ograniczone zasoby czasu wolę się zaangażować w rozwiązanie czytelniejszych problemów. Patrz m.in. https://forum.openoffice.org/pl/forum/v ... 6#regula05
Mnie osobiście odrzuca niejednolitość środków: raz wywołania API (doc.StoreAsURL), raz makra UNO (.executeDispatch(dokument, ".uno:Save", ...). Mając ograniczone zasoby czasu wolę się zaangażować w rozwiązanie czytelniejszych problemów. Patrz m.in. https://forum.openoffice.org/pl/forum/v ... 6#regula05
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
mmm Niestety składam skrypt z tego co uda mi się znaleźć i z tego co uda mi się nagrać w makrach...
A problem polega na tym że mimo zmian między dwoma plikami które są zapisywane w jednym cyklu oba pliki są takie same i zawierają te same informacje co w pliku zapisanym podczas drugiego zapisu ma być... (pierwszy plik jest najpierw poprawnie zapisany następnie nadpisany...)
Kod uproszczony to:
Sub ZapiszJakoTekstODS
rem sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
Dim NrKolejny as Integer 'typ zmiennej Integer przechowuje wartości od -32767 do 32767
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
Dim sPath As String
Dim sFileName as String
Dim FileProperties (2) as new com.sun.star.beans.PropertyValue
Dim sUrl As String
Dim oDoc As Object
sPath = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C12").getString' "link do zapisu plikow bazy
oDoc = ThisComponent
sFileName = thisComponent.getSheets.getByName("ROZ").getCellRangeByName("A1").getString 'nazwa pliki
' sURL(1) = ConvertToURL(sPath(1) & sFileName(1))
FileProperties(0).Name = "FilterName"
FileProperties(0).Value = "calc8"
FileProperties(1).Name = "Overwrite"
FileProperties(1).Value = True
FileProperties(2).Name = "FilterOptions"
FileProperties(2).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
sURL=ConvertToURL(sPath & sFileName & ".ODS")
oDoc.storeAsURL(sUrl, FileProperties())
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
msgbox "Plik ODS z danymi oraz czysty plik został zapisany zapisany-------------baza"
REM ............ TU znajdują się zmiany w pliku czyli usunięcie zawartości kilku komórek oraz zmiana nr w jednej komórce ... kilku komórek i ponowne zapisanie pliku o innej nazwie w innym katalogu a mimo tego pierwszy plik zostaje nadpisany
rem-----------------------------------------------------------------------
NrKolejny= thisComponent.getSheets.getByName("Zamówienie").getCellRangeByName("I2").getValue ' to jest przykładowy adres
if NrKolejny > 32766 then
NrKolejny = 0
End if
thisComponent.getSheets.getByName("Zamówienie").getCellRangeByName("I2").setValue(NrKolejny+1)
Rem Poniższa procedura odpowiada wykonaniu skrótu CTRL+S, czyli zapisuje plik Twojego szablonu z nową wartością w F5
dokument = ThisComponent.CurrentController.Frame
wykonawca = createUnoService("com.sun.star.frame.DispatchHelper")
wykonawca.executeDispatch(dokument, ".uno:Save", "", 0, Array())
rem-------------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim sPath1 As String
Dim sFileName1 as String
Dim FileProperties1 (2) as new com.sun.star.beans.PropertyValue
Dim sUrl1 As String
Dim oDoc1 As Object
sPath1 = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C14").getString' "katalog glowny dla pliku Ciecie
oDoc1 = ThisComponent
sFileName1 = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C16").getString 'nazwa czystego pliku ciecia
FileProperties1(0).Name = "FilterName"
FileProperties1(0).Value = "calc8"
FileProperties1(1).Name = "Overwrite"
FileProperties1(1).Value = True
FileProperties1(2).Name = "FilterOptions"
FileProperties1(2).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
sURL1=ConvertToURL(sPath1 & sFileName1 & ".ODS")
oDoc1.storeAsURL(sURL1, FileProperties1())
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
msgbox "Plik ODS z danymi oraz czysty plik został zapisany zapisany"
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
End Sub
Mam nadzieje że teraz łatwiej będzie przebrnąć przez to.
A problem polega na tym że mimo zmian między dwoma plikami które są zapisywane w jednym cyklu oba pliki są takie same i zawierają te same informacje co w pliku zapisanym podczas drugiego zapisu ma być... (pierwszy plik jest najpierw poprawnie zapisany następnie nadpisany...)
Kod uproszczony to:
Sub ZapiszJakoTekstODS
rem sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
Dim NrKolejny as Integer 'typ zmiennej Integer przechowuje wartości od -32767 do 32767
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
Dim sPath As String
Dim sFileName as String
Dim FileProperties (2) as new com.sun.star.beans.PropertyValue
Dim sUrl As String
Dim oDoc As Object
sPath = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C12").getString' "link do zapisu plikow bazy
oDoc = ThisComponent
sFileName = thisComponent.getSheets.getByName("ROZ").getCellRangeByName("A1").getString 'nazwa pliki
' sURL(1) = ConvertToURL(sPath(1) & sFileName(1))
FileProperties(0).Name = "FilterName"
FileProperties(0).Value = "calc8"
FileProperties(1).Name = "Overwrite"
FileProperties(1).Value = True
FileProperties(2).Name = "FilterOptions"
FileProperties(2).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
sURL=ConvertToURL(sPath & sFileName & ".ODS")
oDoc.storeAsURL(sUrl, FileProperties())
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
msgbox "Plik ODS z danymi oraz czysty plik został zapisany zapisany-------------baza"
REM ............ TU znajdują się zmiany w pliku czyli usunięcie zawartości kilku komórek oraz zmiana nr w jednej komórce ... kilku komórek i ponowne zapisanie pliku o innej nazwie w innym katalogu a mimo tego pierwszy plik zostaje nadpisany
rem-----------------------------------------------------------------------
NrKolejny= thisComponent.getSheets.getByName("Zamówienie").getCellRangeByName("I2").getValue ' to jest przykładowy adres
if NrKolejny > 32766 then
NrKolejny = 0
End if
thisComponent.getSheets.getByName("Zamówienie").getCellRangeByName("I2").setValue(NrKolejny+1)
Rem Poniższa procedura odpowiada wykonaniu skrótu CTRL+S, czyli zapisuje plik Twojego szablonu z nową wartością w F5
dokument = ThisComponent.CurrentController.Frame
wykonawca = createUnoService("com.sun.star.frame.DispatchHelper")
wykonawca.executeDispatch(dokument, ".uno:Save", "", 0, Array())
rem-------------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dim sPath1 As String
Dim sFileName1 as String
Dim FileProperties1 (2) as new com.sun.star.beans.PropertyValue
Dim sUrl1 As String
Dim oDoc1 As Object
sPath1 = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C14").getString' "katalog glowny dla pliku Ciecie
oDoc1 = ThisComponent
sFileName1 = thisComponent.getSheets.getByName("USTAWIENIA").getCellRangeByName("C16").getString 'nazwa czystego pliku ciecia
FileProperties1(0).Name = "FilterName"
FileProperties1(0).Value = "calc8"
FileProperties1(1).Name = "Overwrite"
FileProperties1(1).Value = True
FileProperties1(2).Name = "FilterOptions"
FileProperties1(2).Value = "32,34,76,1,,0,false,true,true,false" 'parametry filtra pobierz z nagranej procedury
sURL1=ConvertToURL(sPath1 & sFileName1 & ".ODS")
oDoc1.storeAsURL(sURL1, FileProperties1())
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
msgbox "Plik ODS z danymi oraz czysty plik został zapisany zapisany"
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Undo", "", 0, Array())
End Sub
Mam nadzieje że teraz łatwiej będzie przebrnąć przez to.
LibreOffice 6.1.2.1 na Windows 10
Re: Automatyzacja zapisu - plik tekstowy, jeden arkusz
Bez wnikania w szczegóły, mogę się mylić.
Dwa razy wywołujesz oDoc.storeAsURL, za każdym razem z inną nazwą -- OK. Ale co robi w wierszu 55Moim zdaniem zapisuje bieżący (zmieniony!) dokument pod bieżącą (niezmienioną!) nazwą.
Dwa razy wywołujesz oDoc.storeAsURL, za każdym razem z inną nazwą -- OK. Ale co robi w wierszu 55
Kod: Zaznacz cały
wykonawca.executeDispatch(dokument, ".uno:Save", "", 0, Array())
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)