[SOLVED] wstaw plik

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
pruszko
Posty: 38
Rejestracja: czw lip 29, 2010 9:26 am

[SOLVED] wstaw plik

Post autor: pruszko »

Witam,
w ramach lenistwa i wygody próbuję sobie usprawnić pracę i oto kolejny gadżet:

Kod: Zaznacz cały

sub Main2
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Name"

dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args2())
FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker") 
FP.SetDisplayDirectory("C:\Documents and Settings\PiotrP\Moje dokumenty\WSTAW\") 
FP.appendFilter("All files", "*.*") 
X = FP.Execute() 
If X = 1 Then 
End if
end sub
makro to po naciśnięciu przycisku ma otworzyć pole (w wybranym katalogu "WSTAW") i umożliwić użytkownikowi wybór pliku, którego treść ma być wstawiona do dokumentu. Dajmy na to że w tym katalogu mamy zbiór adresów i żeby dobie ułatwić prace to taki bajer pomaga.
Wszystko działa tzn po uruchomieniu makra otwiera się katalog, wtedy klikam na plik , wstawia się jego treść no i.... ponownie otwiera się katalog - nie potrzebnie. Czegoś tu nie dopisałem pewnie hmmm :?
Można prosić mądrzejszych ode mnie o pomoc ? :)
Ostatnio zmieniony pt sty 27, 2012 11:16 pm przez quest-88, łącznie zmieniany 2 razy.
Powód: zmiana znacznika [color] --> [code]
OpenOffice 3.2 na Windows XP/Vista
Jan_J
Posty: 4576
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: wstaw plik

Post autor: Jan_J »

Źle działa, bo jest bez sensu.

Po pierwsze, że najpierw by trzeba wiedzieć jak się nazywa plik, a potem go wstawiać. Czyli że jak uno:InsertDoc jest już wykonane, to jest za późno na pytanie o nazwę za pomocą FP.
Po drugie, że uno:InsertDoc w domyślnej konfiguracji, kiedy nie wie jaki plik ma wstawić, sam odpala okno dialogowe. To jest to ,,ponownie otwiera się katalog'' o którym piszesz.
Spróbuj

Kod: Zaznacz cały

Sub Test1()
  document = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args(1) as new com.sun.star.beans.PropertyValue
  dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args())
End Sub
Do prostych zastosowań Ci wystarczy. Jeżeli nie, to musisz najpierw wywołać FilePickera, odebrać od niego nazwę/nazwy, i przekazać je dispatcherowi jako argumenty dla operacji InsertDoc. Jakoś tak:

Kod: Zaznacz cały

Sub Test2()
  document = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
  FP.SetDisplayDirectory("C:\Documents and Settings\PiotrP\Moje dokumenty\WSTAW\")
  FP.appendFilter("All files", "*.*")
  if FP.Execute() then
    dim args(1) as new com.sun.star.beans.PropertyValue
    args(0).Name = "Name"
    args(0).Value = FP.Files(0)
    dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args())
  endif
End Sub
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
pruszko
Posty: 38
Rejestracja: czw lip 29, 2010 9:26 am

Re: wstaw plik

Post autor: pruszko »

Witaj i dziękuję za szybką odpowiedź :)

W końcu zrobiłem tak:

może komuś się przyda:

Kod: Zaznacz cały

sub wstaw
 document = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args(1) as new com.sun.star.beans.PropertyValue
  dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args())
dim SetDisplayDirectory("C:\Documents and Settings\PiotrP\Moje dokumenty\WSTAW\")

End Sub
i w ten oto cudowny sposób za przyciśnięciem jednego przycisku można wstawić treść z pliku

dzięki serdeczne!
Ostatnio zmieniony śr lis 03, 2010 11:43 pm przez quest-88, łącznie zmieniany 1 raz.
Powód: Dodanie BBCode, poprawa błędów
OpenOffice 3.2 na Windows XP/Vista
Jan_J
Posty: 4576
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: wstaw plik

Post autor: Jan_J »

Instrukcja
dim SetDisplayDirectory("C:\Documents and Settings\PiotrP\Moje dokumenty\WSTAW\")
nic sensownego nie robi. Możesz ją spokojnie wywalić.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
pruszko
Posty: 38
Rejestracja: czw lip 29, 2010 9:26 am

Re: wstaw plik

Post autor: pruszko »

No tak, właściwie chodziło mi o to:

Kod: Zaznacz cały

Sub Test2()
  document = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
  FP.SetDisplayDirectory("C:\Documents and Settings\PiotrP\Moje dokumenty\WSTAW\")
  FP.appendFilter("All files", "*.*")
  if FP.Execute() then
    dim args(1) as new com.sun.star.beans.PropertyValue
    args(0).Name = "Name"
    args(0).Value = FP.Files(0)
    dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args())
  endif
End Sub
wtedy wymusi konkretną lokalizację
OpenOffice 3.2 na Windows XP/Vista
michal.s
Posty: 86
Rejestracja: pn sty 23, 2012 6:55 pm

Re: wstaw plik

Post autor: michal.s »

Ciekawy temat :-)
Zastosowałem go u siebie i działa (z jednym małym zastrzeżeniem).
Jeżeli otwiera się okno i wybiorę plik z innej lakalizacji to po ponownym uruchomieniu makra otwiera się ostatnia lokalizacja.
Czy można zmienić makro tak aby pamiętało za każdy razem wpisany w makrze adres do pliku.

Pozdrawiam Michał
Pozdrawiam Michał
OpenOffice3.3 na Windows 7
Jan_J
Posty: 4576
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: wstaw plik

Post autor: Jan_J »

Pamiętać w trakcie sesji: deklaracja GLOBAL zmiennej typu string, w której będziemy przechowywać ostatnio wybraną ścieżkę.
W SetDisplayDirectory zamiast stałej winniśmy użyć tej właśnie zmiennej. Nie zapomnijmy też zaktualizować jej po dokonaniu wyboru pliku.

Pamiętać z sesji na sesję: tu już będzie potrzebny jakiś mechanizm przechowywania konfiguracji w pliku.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
michal.s
Posty: 86
Rejestracja: pn sty 23, 2012 6:55 pm

Re: wstaw plik

Post autor: michal.s »

Czy mógłbyś napisać trochę jaśniej. Jestem początkującym w temacie makr i nie do końca wiem jak to odczytać, a temat bardzo mnie interesuje. Mam jeszcze jedno pytanie, czy jest jakaś strona na której można znaleźć podstawy do nauki pisania makr w OO? Z góry dziękuje za pomoc i przepraszam, że zwracam głowę takimi banałami.
Pozdrawiam Michał
OpenOffice3.3 na Windows 7
Jan_J
Posty: 4576
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: wstaw plik

Post autor: Jan_J »

Jakoś tak (modyfikuję na żywca kod od pruszko; mogą być błędy)

Kod: Zaznacz cały


global sciezka as string

Sub wstawDoDokumentu()
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
rem tu zmiana
FP.SetDisplayDirectory(sciezka)
FP.appendFilter("All files", "*.*")
if FP.Execute() then
  dim args(1) as new com.sun.star.beans.PropertyValue
  args(0).Name = "Name"
  args(0).Value = FP.Files(0)

  rem tu zmiana
  sciezka = FP.DisplayDirectory
  
  dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args())
endif
End Sub

Sub inicjujSciezke()
  sciezka = "" ' wpisz sensowną wartość początkową ścieżki
End Sub

JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
michal.s
Posty: 86
Rejestracja: pn sty 23, 2012 6:55 pm

Re: wstaw plik

Post autor: michal.s »

Dziękuję Bardzo za Pomoc Janie_J.
Jestem Twoim dłużnikiem :-)

Pozdrawiam michal.s
Pozdrawiam Michał
OpenOffice3.3 na Windows 7
ODPOWIEDZ