[SOLVED] import danych z pliku txt do calca
[SOLVED] import danych z pliku txt do calca
Witam. Potrzebuję makra do importu wybranych danych z pliku txt do calca. Chciałbym zaimportować kilka różnych pozycji z pliku txt do calca. Plik txt to spis pewnych ustawień zapisanych jedne pod drugimi czyli jedna linia to jedna dana. Potrzebuje makro, które pobierze dane z wybranych pozycji pliku np 5-12 i wklei w A1:A8 calca. Dziękuję i prosze o pomoc.
Apache OpenOffice 4.1.5 na Windows 10
Re: import danych z pliku txt do calca
Załączam działający przykład.
Nie mam biegłości w obsłudze plików w Basic-u, przykład jest w Pythonie, bo w nim piszę od ręki. Zalety: nowoczesny i elegancki; wady: brak dedykowanych narzędzi w OpenOffice.
Jakby Python okazał się nie do zaakceptowania, możemy pomyśleć o Basic-u. Zalety: popularność, istnienie dedykowanych narzędzi wewnątrz OpenOffice. Wady: przestarzała filozofia i składnia.
Wypakuj plik o rozszerzeniu .py z załącznika zip.
Znajdź kartotekę swojej osobistej konfiguracji OpenOffice. W Windows XP jest to najprawdopodobniej C:\Documents and Settings\nazwa\Dane Aplikacji\OpenOffice.org/3/User/Scripts
Załóż tam podkartotekę python i wkopiuj do niej załączony plik. Odpal Calca; Narzędzia/Makra/Zarządzaj/Python/moje makra/
Możesz przypisać makro do skrótu klawiatury, do przycisku albo do zdarzenia.
Nie mam biegłości w obsłudze plików w Basic-u, przykład jest w Pythonie, bo w nim piszę od ręki. Zalety: nowoczesny i elegancki; wady: brak dedykowanych narzędzi w OpenOffice.
Jakby Python okazał się nie do zaakceptowania, możemy pomyśleć o Basic-u. Zalety: popularność, istnienie dedykowanych narzędzi wewnątrz OpenOffice. Wady: przestarzała filozofia i składnia.
Wypakuj plik o rozszerzeniu .py z załącznika zip.
Znajdź kartotekę swojej osobistej konfiguracji OpenOffice. W Windows XP jest to najprawdopodobniej C:\Documents and Settings\nazwa\Dane Aplikacji\OpenOffice.org/3/User/Scripts
Załóż tam podkartotekę python i wkopiuj do niej załączony plik. Odpal Calca; Narzędzia/Makra/Zarządzaj/Python/moje makra/
Możesz przypisać makro do skrótu klawiatury, do przycisku albo do zdarzenia.
- Załączniki
-
- przyklad.zip
- (1.26 KiB) Pobrany 461 razy
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: import danych z pliku txt do calca
Dziękuje za zainteresowanie i pomoc. Nie wiem czy sobie z tym poradzę, ale spróbuję...
Apache OpenOffice 4.1.5 na Windows 10
Re: import danych z pliku txt do calca
No niestety nie wiem jak to powiazać....Nie za bardzo wiem w którym miejscu tego makro mam podać scieżkę pliku txt. Jeśli możesz mi zmodowac ten kod zakładając że ścieżka pliku txt to C:/test.txt to będe wdzięczny. Pozdrawiam i czekam na inne propozycje.
Apache OpenOffice 4.1.5 na Windows 10
Re: import danych z pliku txt do calca
Zacznijmy od początku...
Fragment I zawiera wstępny komentarz, ściąga niezbędne biblioteki języka i definiuje okno dialogowe do wyboru pliku. Będzie ono wykorzystane w głównym podprogramie.
Fragment II wstawia listę wpisów (wszystko jedno skąd się wzięła), na wskazany arkusz, począwszy od wskazanego wiersz.
Każdy wpis próbujemy wstawić jako liczbę, a jeżeli się nie da, to jako tekst.
Fragment III: czyta zawartość pliku o podanej nazwie, i wstawia wybraną jego sekcję (pomiędzy wierszami o numerach pierwszy i ostatni) na pierwszy arkusz bieżącego skoroszytu -- o tym powiada getByIndex(0) --, do kolumny kol, począwszy od wiersza wiersz na arkuszu. Zmodyfikuj te parametry, żeby dostroić skrypt do swoich potrzeb.
Fragment IV: czary-mary, czyli składamy wszystko razem. Czytamy dane z pliku, którego nazwę poda użytkownik za pomocą okna dialogowego.
Jeżeli znasz na pamięć ścieżkę do pliku, zastąp ten fragment następującym:
Fragment V, czyli kosmetyka: sprawiamy, by z zewnątrz dla użytkownika był widoczny tylko główny skrypt.
Voila.
Fragment I zawiera wstępny komentarz, ściąga niezbędne biblioteki języka i definiuje okno dialogowe do wyboru pliku. Będzie ono wykorzystane w głównym podprogramie.
Kod: Zaznacz cały
# coding: utf-8
'''
Ten plik zawiera makropolecenie pakietu OpenOfice.org
Umieść plik w katalogu $HOME/.openoffice.org/3/user/Scripts/python/
albo w %userprofile%/Application Data/openoffice.org/3.Scripys/puthon/
albo w odpowiedniej kartotece właściwej dla Twojego systemu operacyjnego
Uruchomienie z poziomu OOo Calc: Narzędzia/Makra/Zarządzaj/Python/Moje makra/[...] [Uruchom]
'''
import os
import urllib
FILEOPEN_SIMPLE = 0
FILESAVE_SIMPLE = 1
def OOoFileOpenDialog(ctx, fname, title):
' definiuje okno dialogowe wyboru pliku via OOo '
picker = ctx.ServiceManager.createInstanceWithContext("com.sun.star.ui.dialogs.FilePicker", ctx)
picker.initialize( (FILEOPEN_SIMPLE, ) )
picker.setDisplayDirectory("file:///" + fname)
picker.setTitle(title)
if picker.execute():
fname = picker.getFiles()[0]
else:
fname = None
picker.dispose()
return fname
Każdy wpis próbujemy wstawić jako liczbę, a jeżeli się nie da, to jako tekst.
Kod: Zaznacz cały
def listaNaArkusz(lista, arkusz, kolumna, wiersz):
' wstawia elementy listy do wybranej kolumny arkusza, począwszy od wskazanego wiersza '
for x in lista:
try: # próba zamiany na liczbę
x = float(x)
arkusz.getCellByPosition(kolumna, wiersz).setValue(x)
except: # jak się nie da liczby, to wstawiamy napis
arkusz.getCellByPosition(kolumna, wiersz).setString(x)
wiersz += 1
Kod: Zaznacz cały
def czytajUstawieniaZPliku(nazwapliku):
''' wczytuje wybrane wiersze ze wskazanego pliku do arkusza
nazwapliku: url czytanego pliku
'''
p = urllib.urlopen(nazwapliku)
zawartosc = p.read().split('\n')
p.close()
# zakres wierszy z pliku do uwzględnienia: zmień stosownie do potrzeb
pierwszy = 3
ostatni = 6
# na który arkusz: zmień nr arkusza (liczbę w nawiasie po getByIndex) stosownie do potrzeb
ark = XSCRIPTCONTEXT.getDocument().Sheets.getByIndex(0)
# w które miejsce arkusza: zmień kol i/lub wiersz stosownie do potrzeb
kol = 0
wiersz = 1
listaNaArkusz(zawartosc[pierwszy:ostatni+1], ark, kol, wiersz)
Kod: Zaznacz cały
def czytajUstawienia():
' wybiera plik przez okno dialogowe i wczytuje z niego wybrane wiersze do arkusza '
ctx = XSCRIPTCONTEXT.getComponentContext()
nazwapliku = OOoFileOpenDialog(ctx, os.getcwd(), u'Czytaj plik')
if nazwapliku:
czytajUstawieniaZPliku(nazwapliku)
Kod: Zaznacz cały
def czytajUstawienia():
czytajUstawieniaZPliku('file:///c:/test.txt')
Kod: Zaznacz cały
g_exportedScripts = (czytajUstawienia, )
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: import danych z pliku txt do calca
Przepisałem na Basic, choć można mieć zastrzeżenia do wydajności.
Narzędzia/Makra/Zarządzaj/Makro/<wybierz poziom>/Nowy moduł/<wklej>
Wyższość jest taka, że teraz możesz sobie eksperymentować samodzielnie z kodem.
Narzędzia/Makra/Zarządzaj/Makro/<wybierz poziom>/Nowy moduł/<wklej>
Wyższość jest taka, że teraz możesz sobie eksperymentować samodzielnie z kodem.
Kod: Zaznacz cały
'const FILEOPEN_SIMPLE = 0
'const FILESAVE_SIMPLE = 1
sub czytajUstawienia()
' wybiera plik przez okno dialogowe i wczytuje z niego wybrane wiersze do arkusza '
nazwapliku = OOoFileOpenDialog("", "Czytaj plik")
if nazwapliku <> "" then
czytajUstawieniaZPliku(nazwapliku)
endif
end sub
function OOoFileOpenDialog(fname, title) as string
' definiuje okno dialogowe wyboru pliku via OOo '
picker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" )
picker.setDisplayDirectory("file:///" & fname)
picker.setTitle(title)
if picker.execute() then
fname = picker.Files(0)
else
fname = ""
endif
OOoFileOpenDialog = fname
end function
sub listaNaArkusz(lista, pierwszy, ostatni, arkusz, kolumna, wiersz)
' wstawia elementy listy do wybranej kolumny arkusza, począwszy od wskazanego wiersza '
for i = pierwszy to ostatni
x = lista(i)
arkusz.getCellByPosition(kolumna, wiersz).setString(x)
wiersz = wiersz + 1
next i
end sub
sub czytajUstawieniaZPliku(nazwapliku)
' wczytuje wybrane wiersze ze wskazanego pliku do arkusza
' nazwapliku: url czytanego pliku
p = FreeFile
open nazwapliku for input as #p
zawartosc = ""
Do While not eof(p)
Line Input #p, msg
zawartosc = zawartosc & msg & "#13"
Loop
close #p
zawartosc = split(zawartosc, "#13")
' # zakres wierszy do uwzględnienia
pierwszy = 3
ostatni = 6
' # na który arkusz
ark = thisComponent.Sheets.getByIndex(0)
' # w które miejsce arkusza
kol = 0
wiersz = 1
listaNaArkusz(zawartosc, pierwszy, ostatni, ark, kol, wiersz)
end sub
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: import danych z pliku txt do calca
Pierwsze podejście i działa!!!! Teraz postaram sie dopasowac to makro do swoich potrzeb. Wersja python wieszała mi arkusz wiec dlatego myslałem że muszę ścieżke pliku podać...Ten sposób jest nawet bardziej wygodny bo mogę w prosty wskazać jeden z kilku plików do pobrania danych. Wielkie dzięki.
Apache OpenOffice 4.1.5 na Windows 10
-
- Posty: 1
- Rejestracja: ndz lis 20, 2011 8:21 am
Re: [SOLVED] import danych z pliku txt do calca
Proszę o pomoc.
potrzebuję napisać makro w calcu, które wczyta mi z 4 plików tekstowych dane do 4 arkuszy.
Każdy plik do osobnego arkusza.
liczby w plikach tekstowych są w kilku kolumnach oddzielonych tabulatorami.
Chciałbym, by skrypt wczytywał pliki automatycznie przy otwarciu skoroszytu ods.
Dziękuję z góry za wszelką pomoc.
potrzebuję napisać makro w calcu, które wczyta mi z 4 plików tekstowych dane do 4 arkuszy.
Każdy plik do osobnego arkusza.
liczby w plikach tekstowych są w kilku kolumnach oddzielonych tabulatorami.
Chciałbym, by skrypt wczytywał pliki automatycznie przy otwarciu skoroszytu ods.
Dziękuję z góry za wszelką pomoc.
OpenOffice 3.3
Re: [SOLVED] import danych z pliku txt do calca
Podpiąłeś się do wątku o czytaniu danych z pliku.
Twój problem wymaga uzupełnienia o 2 szczegóły:
* czytanie z czterech plików uzyskasz albo wywołując cztery razy czynność, za każdym razem z inną nazwą pliku i numem, albo za pomocą pętli przebiegającej nazwy tych czterech plików, i jednocześnie numerację arkuszy;
* automatyzację wykonania makra po otwarciu pliku, co we współczesnych wydaniach OOo/LO w ogóle nie wymaga programowania. Wystarczy użyć Narzędzia → Dostosuj → Zdarzenia ↓ Otwórz dokument → Makro ↓ Zapisz w swoim dokumencie. Może to wymagać dopasowania nagłówka Twojego makra stosownie do wymagań zdarzenia: w tym przypadku nagłówek winien zawierać jeden argument, gdyż taką ich liczbę zdarzenie "open document" przekazuje obsługującemu je podprogramowi.
Twój problem wymaga uzupełnienia o 2 szczegóły:
* czytanie z czterech plików uzyskasz albo wywołując cztery razy czynność, za każdym razem z inną nazwą pliku i numem, albo za pomocą pętli przebiegającej nazwy tych czterech plików, i jednocześnie numerację arkuszy;
* automatyzację wykonania makra po otwarciu pliku, co we współczesnych wydaniach OOo/LO w ogóle nie wymaga programowania. Wystarczy użyć Narzędzia → Dostosuj → Zdarzenia ↓ Otwórz dokument → Makro ↓ Zapisz w swoim dokumencie. Może to wymagać dopasowania nagłówka Twojego makra stosownie do wymagań zdarzenia: w tym przypadku nagłówek winien zawierać jeden argument, gdyż taką ich liczbę zdarzenie "open document" przekazuje obsługującemu je podprogramowi.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)