Wypełnianie tabeli ale w Write

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
wicy
Posty: 9
Rejestracja: wt sty 03, 2012 11:33 am

Wypełnianie tabeli ale w Write

Post autor: wicy »

Czy da się odwołać do poszczególnych komórek tabeli, ale zrobionej w Write nie w Calc?
Mam prostą ewidencję z lp, data, numer.
1) Chciałbym po otworzeniu pliku zwiększyć lp i ustawić kursor w nowym, ostatnim wierszu tabeli.
2) Kolejny problem to jak dodać nazwę autora do numeru wprowadzonego w lp i zapisanie go w odrębnym polu tabeli (lub tylko pokazanie w wyskakującym oknie).
Jak się za to zabrać?
OpenOffice 3.1 Windows XP
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wypełnianie tabeli ale w Write

Post autor: Jan_J »

Nie odpowiem, przynajmniej na razie. Musi dojrzeć. Może dałoby się bez pisania makr?

Ale w związku z problemem ogólniejsza refleksja. Nie moja, choć z wrocławskiego podwórka: http://staryzgred.blogspot.com/2012/11/ ... -word.html
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
wicy
Posty: 9
Rejestracja: wt sty 03, 2012 11:33 am

Re: Wypełnianie tabeli ale w Write

Post autor: wicy »

Ewidencja ma być używana przez wielu użytkowników, na wielu komputerach.
Dodanie nowego wiersza, auto numeracja pierwszej kolumny (lp), ustawienie kursora w pierwszym polu do edycji, ułatwi znacznie pracę i ograniczy możliwość popełnienia błędów. To samo ma uczynić wygenerowanie numeru pisma na podstawie inicjałów użytkownika.
Dobra, nie czekam na gotowca, nie znam OOBasic ale będę to sobie rozgryzał sam.
Udało mi się już przestawić kursor na ostatni wiersz tabeli.

Kod: Zaznacz cały

Tables = ThisComponent.getTextTables()
Table = Tables.getByIndex(0)
oCell = Table.getCellByName("A2")
oText = ThisComponent.Text
VCurs = ThisComponent.CurrentController.ViewCursor
Table = Tables.getByIndex(0)
oCell = Table.getCellByposition(0,table.rows.count-1)
Teraz muszę dodać nowy i zwiększyć numerację pierwszej kolumny (lp)
OpenOffice 3.1 Windows XP
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wypełnianie tabeli ale w Write

Post autor: Jan_J »

wicy pisze:Ewidencja ma być używana przez wielu użytkowników, na wielu komputerach.
W takim razie dlaczego dokument tekstowy, a nie baza danych?
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
wicy
Posty: 9
Rejestracja: wt sty 03, 2012 11:33 am

Re: Wypełnianie tabeli ale w Write

Post autor: wicy »

Z powodu ograniczeń sieciowych, braków dostępów i niechęci informatyków, etc... Musi być dokument typu Write z powodu ogólnej tępoty użytkowników, którzy tylko Writera z grubsza ogarniają. Musi być OO z powodu braków w licencyjnych w MSO. Inaczej dawno bym sobie z tym poradził i nie błądził jak dziecko we mgle w OO Basicu.
OpenOffice 3.1 Windows XP
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wypełnianie tabeli ale w Write

Post autor: Jan_J »

Można napisać instrukcję, jak jeździć traktorem do sklepu po piwo. I nawet można z niej codziennie korzystać. Tylko że traktory w zasadzie służą do czego innego.

Załóż nową bazę danych. W niej załóż tabelę z polami lp, imię, itd. Wymuś żeby pole lp było kluczem głównym. Ustaw w opcjach, by wpis do pola lp był wymagany. Tyle wystarczy, by lp sama się numerowała.

Uwaga: to nie znaczy, że numeracja będzie zawsze po kolei. Każdy wpis zyska raz nadany numer, który nie będzie się zmieniał przy usuwaniu.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
wicy
Posty: 9
Rejestracja: wt sty 03, 2012 11:33 am

Re: Wypełnianie tabeli ale w Write

Post autor: wicy »

Jan_J pisze:Załóż nową bazę danych
Hehe... jak? Czym? Nie mam narzędzi ani uprawnień.

To by było dopiero wytaczanie działa na komara.

Poradziłem sobie już prawie, sklecając taki oto kod:

Kod: Zaznacz cały

Dim Rows As Object
Dim tcurs As Object
Dim oCell As Object

Tables = ThisComponent.getTextTables()
Table = Tables.getByIndex(0)
oCell = Table.getCellByName("A2")
oText = ThisComponent.Text
VCurs = ThisComponent.CurrentController.ViewCursor
Table = Tables.getByIndex(0)
oCell = Table.getCellByposition(0,table.rows.count-1)
tcurs = oCell.createTextCursor()

VCurs.gotoRange(oCell.Text.Start, False)
VCurs.gotoEndOfLine(False)
tcurs.string = table.rows.count-1	

table.rows.insertbyindex(table.rows.count, 1)

pokoj = "001"
inicjaly="AA"

MsgBox "Twój numer pisma to:  "+"numer_pisma/"+tcurs.string+"/"+pokoj+"/2013-"+inicjaly, MB_OK, "Numer pisma"
end sub
Prosiłbym jeszcze o dwie podpowiedzi
1) jak przed dodaniem wiersza w drugiej kolumnie wstawić bieżącą datę
2) jak pod "inicjały" podstawić nazwę użytkownika/autora otwierającego dokument?
OpenOffice 3.1 Windows XP
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wypełnianie tabeli ale w Write

Post autor: Jan_J »

wicy pisze:Hehe... jak? Czym? Nie mam narzędzi ani uprawnień.
To by było dopiero wytaczanie działa na komara.
OpenOffice.org Base wbudowana w pakiet. Do tego, co opisałeś, wystarczy.
Nie jest to armata na komara, tylko właściwe narzędzie do rejestrowania wpisów. Prostsze niż pisanie makra symulującego tabelę bazodanową w dokumencie tekstowym.
Prosiłbym jeszcze o dwie podpowiedzi
1) jak przed dodaniem wiersza w drugiej kolumnie wstawić bieżącą datę
2) jak pod "inicjały" podstawić nazwę użytkownika/autora otwierającego dokument?
@1 datę pobierzesz jako wartośćtypu variant/date: d = date()
albo w postaci tekstu d = str(date()). Dalej pozostaje wstawić ją do pola; utwórz w polu tabeli kursor tekstowy i napisz nim tekst, ale to już umiesz.

@2 właściwości thisComponent.DocumentInfo.author oraz thisComponent.DocumentInfo.ModifiedBy. W przypadku, kiedy dokument nie był modyfikowany, możesz dostać błędne dane. Trzeba by raczej poszukać tej nazwy w konfiguracji pakietu; jakoś nie widzę tego w dokumentacji...
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ