Hyperlink /starDesktop

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Hyperlink /starDesktop

Post autor: mariuszelectro »

Witam szanownych użytkowników
To mój pierwszy wpis , a za razem pierwsze makro w basic.
Napotkałem 2 problemy których nie potrafię obecnie rozwiązać , a także nie znalazłem rozwiązania w necie.
1) jak pobrać w firmie stringa adres url ( ”filie:/// " jest to adres do pliku - osobny plik w openoffice)
Dodam iż adres ten jest wynikiem działania formuły który składa teksty, z innych komórek i tworzy odnośnik do pliku.
Reguła wygląda miej więcej tak =jeżeli(c7>1;hiperłącze(złącz.teksty(...........);"moja nazwa linku");"nic")
Umiem jedynie pobrać "moja nazwa linku" .......

2) używam metody StarDestop() od otwierania dokumentów które odczytuje z linków i to działa prawie dobrze....
Dokumnety wskazane linkiem otwierają się jednakże nie aktualizują wartości z innych dokumnetów.
(Jak totwieram klikając na link w dokumencie źródłowym to działa poprawnie , Klikam i się aktualizują odnośniki z innych dokumnetów), wiec podejrzewam iż w parametrach wywołania StarDesktop() mają być przekazane jakieś parametry (arguments),
Niestety nie znalazłem jakie ( a czytałem dokumentację )
Lub używam niewłaściwej metody..... Może jest jakaś inna co otwiera dokumenty openoffice w nowym oknie wg parametrów ze string.
3) czy jest jaka metoda zawracająca w formie stringa, adres zaznaczonej komórki (oCell) np ”c7"

Proszę o wyrozumiałość za brak doświadczenia
Mam zerowe doświadczenie w basic natomiast umiem programować w innych językach.....
Dziękuje za jakiekolwiek porady.
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

1.

Kod: Zaznacz cały

sString = oCell.String
2,
Sprawdzam
3.

Kod: Zaznacz cały

Sub AdresZaznaczonejKom
   'Dwie możliwości
	'Z poniższego stringu możesz wydobyć sobie tylko adres komórki (bez nazwy arkusza) używając wbudowanych funkcji basica
	Print ThisComponent.getCurrentSelection().AbsoluteName
	'lub, indeksy zaczynają się od 0
	'więc komórka A1 w pierwszym od lewej arkuszu
	'będzie miała indeksy
	' wiersz 0 kolumna 0 w arkudzu 0
	Print "Kolunna o indeksie " & ThisComponent.getCurrentSelection().getCellAddress().Column
	Print "Wiersz o indeksie " & ThisComponent.getCurrentSelection().getCellAddress().Row
	Print "Arkusz o indeksie " & ThisComponent.getCurrentSelection().getCellAddress().Sheet 
End Sub
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

Sprawdź co masz zaznaczone w opcjach.
łącza.png
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

mam zaznaczone "na żądanie"
Prz ręcznym klikaniu na link w arkuszu pojawia się okno dialogowe "czy chcę aktualizować...."
przy otwieraniu makrem tego nie ma, i łącza się nie aktualizują..... chciałby aby tak pozostało gdyż są to ogólne opcje dla wszystkich arkuszy.
Dla potrzeb wiedzy mogę sprawdzić czy ta po zaznaczeniu "zawsze" łącza będą się aktualizowały" ale jeśli nawet to nie rozwiązuje to problemu.....

odnośnie pkt 1 twoja metoda zwraca string ale nie url tylko "nazwę użytkownika" także problem nadal jest...
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

1.Wstaw formułę i to co zwraca formuła.
2. Wstaw to makro
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

proszę
formuła:

Kod: Zaznacz cały

=JEŻELI(C7=1;HIPERŁĄCZE(ZŁĄCZ.TEKSTY("file:///users/mariuszslonina/desktop/fakturowanie/faktury/faktura ";B7;".xls");"link-kliknij");ZŁĄCZ.TEKSTY("-";" "))
komórka c7=1
wynik wyświetlany w arkuszu
link-kliknij


i to mi właśnie zwraca ta metoda
a tu jest moje makro podpiete do przycisku na formularzu

Kod: Zaznacz cały

Sub Main

'Sub ZmienWartoscKomorki
Dim oDocument As Object, oSheet As Object, oCell As Object
Dim oRow(), oRows(), oCells()
Dim iRow As Integer
Dim Zmienna1 As Integer
Dim ZmiennaUrl As String
Dim oTextField
Dim NazwaCeli As String 

oDocument=ThisComponent 'wybór obiektu(w VBA odpowiednikiem będzie Selection)
oSheet=oDocument.Sheets.getByName("Arkusz1") 'wyróżnienie arkusza nr1
'oCell.xecuteDispatch(document, ".uno:Open", "", 0, Array())


Zmienna1=0
oCell=oSheet.getCellByPosition(0,0)
oCell.setValue("Liczę")
wait(2000)

'oCells = oSheet.getCellRangeByName("C7:C35")
'oRows() = oCells.getData()
'For iRow = LBound(oRows()) To UBound(oRows())
'       oRow() = oRows(iRow)
For iRow=6 To iRow+50
	oCell = oSheet.getCellByPosition(2,iRow)
	If oCell.getValue()=1 Then 
	Zmienna1=Zmienna1+1 
	oCell=oSheet.getCellByPosition(0,0)
	oCell.setValue(Zmienna1)
	wait(50) 
	oCell=oSheet.getCellByPosition(0,iRow)
	NazwaCeli = oCell.String
'	NazwaCeli=	oCell.getCellName()
	NazwaCeli=ThisComponent.getCurrentSelection(oCell).AbsoluteName
	'NazwaCeli=ThisComponent.getCurrentSelection().getCellAddress().Sheet
	oCell = oSheet.getCellRangeByName(NazwaCeli)
		RunUrlLink(oCell.String)
	
	'oCell.getCellByPosition(0,iRow)
	
	'FollowHyperlink(oCell(0,iRow).getValue())' As Hyperlink)
	Endif
Next
Print "Sprwadz otwarte dokumnety -> " & Zmienna1
oCell=oSheet.getCellByPosition(0,0) 'wyróżnienie komórki A1
oCell.setValue(Zmienna1) 


'If x(iRow, iCol)>0 Then 
'Zmienna1=Zmienna1+1       
'Next

'oCell=oSheet.getCellByPosition(0,0) 'wyróżnienie komórki A1
'oCell.setValue(Zmienna1)

'Dim TheSum As Double
'     Dim iRow As Integer
'     Dim iCol As Integer
'    TheSum = 0.0
'    If NOT IsMissing(x) Then
'      If NOT IsArray(x) Then
'         If x > 0 Then TheSum = x
'      Else
'        For iRow = LBound(x, 1) To UBound(x, 1)
'          For iCol = LBound(x, 2) To UBound(x, 2)
'            If x(iRow, iCol) > 0 Then TheSum = TheSum + x(iRow, iCol)
'Next Next
'End If End If
'    PositiveSum = TheSum

'oCell=oSheet.getCellByPosition(0,0) 'wyróżnienie komórki A1
'oCell.setValue(23658) 'wpisanie wartości liczbowej do wyróżnionej komórki
'oCell.NumberFormat=2 'określenienie sposobu prezentacji liczby (23658,00)
'oCell.SetString("oops") 'wpisanie łańcucha tekstowego do wyróżnionej komórki
'oCell.setFormula("=FUNCTION()") 'wpisanie formuły do wyróżnionej komórki
'oCell.IsCellBackgroundTransparent = TRUE 'określenienie ...?
'oCell.CellBackColor = RGB(255,141,56) 'określenienie koloru dla tła w komórce
End Sub

Function RunUrlLink(param As String)
 
Dim SysShell As Object  
	'param="file:///users/mariuszslonina/desktop/fakturowanie/faktury/faktura ESW.xls"
   'SysShell = createUNOService("com.sun.star.system.SystemShellExecute",param)
   StarDesktop.loadComponentFromURL(param,"_blank",0,Array())
   'SysShell.execute("Macintosh HD/Programy/OpenOffice.app",0,0)
End Function
jest troche balaganu ale to moj pierwszy raz
OpenOffice 4.1 na OS X / Windows 8/10/Vista
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

Idea makra jest nastepująca
po jego wywołaniu ma w pętli for przjrzeć wskazany zakres komórek i tam gdzie znajdzie jedynkę , z tego samego wiersza (z innej kolumny) ma pobrać wygenerowany link (wg formuły) i odpalić wskazany dokument w nowym oknie, a ten dokument (odpalony) ma zaciągnąc dane z innego dokumentu
mam problemy tak jak napisałem w pierwszym poście
pkt 1,2,3
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

No to jest ciekawe, rzeczywiście oCell.String zwraca to co jest w komórce i to jest prawidłowe. Ale np.

Kod: Zaznacz cały

Sub H_Link
  Print ThisComponent.getSheets().getByName("Arkusz1").getCellRangeByName("A4").Hyperlink
End Sub
powinno zwrócić link jaki jest zaszyty w formule, a zwraca pusty ciąg.

Na ten czas spróbuj wykorzystać to:

Kod: Zaznacz cały

Sub H_Link
  Print ThisComponent.getSheets().getByName("Arkusz1").getCellRangeByName("A4").getFormula()
End Sub
i wyodrębnij sobie adres funkcjami basica, ja zaś przyjże się temu bliżej.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

dla wiedzy. ustawienie opcji aby zawsze uaktualniał łącza w opcjach ogólnych nie pomogła, a to jest dla mnie najważniejszy problem.....
OpenOffice 4.1 na OS X / Windows 8/10/Vista
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

Poradziłem sobie z problemem nr 3, problem 1 jest do obejścia innymi drogami,
Natomiast problem nr2 jest dla mnie palący.....
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

mariuszelectro pisze:Poradziłem sobie z problemem nr 3
No to się pochwal, inni skorzystają.
mariuszelectro pisze:Natomiast problem nr2 jest dla mnie palący.....
Co się stanie jak po otwarciu dokumentu wciśniesz Ctrl+Shift+F9, czy łącza są aktualizowane?
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Hyperlink /starDesktop

Post autor: Jan_J »

Mówiąc z pamięci, API struktury dokumentu winno mieć funkcję aktualizacji linku. Być może, o ile nie da się inaczej, trzeba jakimś iteratorem przejrzeć linki w dokumencie i po kolei je aktualizować. A być może API wyższego poziomu, związane z interfejsem programu, ma taką funkcję gotową.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

Spróbuj dwóch opcji, zamiast funkcji jest procedura, ale myślę że to nie problem:

Kod: Zaznacz cały

Sub RunUrlLink(param As String)

Dim SysShell As Object 
  ' param="/home/slav/Dokumenty/Calc/test łącza.ods"
  ' param = ConvertToUrl(param)
   'SysShell = createUNOService("com.sun.star.system.SystemShellExecute",param)
   otestLink = StarDesktop.loadComponentFromURL(param,"_blank",0,Array())
   'SysShell.execute("Macintosh HD/Programy/OpenOffice.app",0,0)
   'reLinks(otestLink)
   reLinks_1(otestLink)
End Sub

sub reLinks(oObject)
	rem ----------------------------------------------------------------------
	rem define variables
	dim document   as object
	dim dispatcher as object
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = oObject.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	'dispatcher.executeDispatch(document, ".uno:EditLinks", "", 0, Array())
	dispatcher.executeDispatch(document, ".uno:UpdateLinks", "", 0, Array())
end sub

Sub reLinks_1(oObject)
	oIter = oObject.ExternalDocLinks.createEnumeration
	while oIter.hasMoreElements
		oLink = oIter.NextElement
		oLink.refresh
	wend
	
	oIter = oObject.DDELinks.createEnumeration
	while oIter.hasMoreElements
		oLink = oIter.NextElement
		oLink.refresh
	wend
End Sub
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

belstar pisze:
mariuszelectro pisze:Poradziłem sobie z problemem nr 3
No to się pochwal, inni skorzystają.

poniważ robię to czysto amatorsko wany jest dla mnie skutek zastosowałem inna metodę dosteępu

Kod: Zaznacz cały


	oCell=oSheet.getCellByPosition(0,iRow)
	RunUrlLink(oCell.String)

gdzie iRow jest incremntowane w pętli for

Kod: Zaznacz cały


Function RunUrlLink(param As String)
 
Dim SysShell As Object  
   
   If(InStr(param,"file:///")>0) Then
   	StarDesktop.loadComponentFromURL(param,"_blank",0,Array())
   Else
	Print "to nie jest link"	   
   Endif

End Function

mariuszelectro pisze:Natomiast problem nr2 jest dla mnie palący.....
Co się stanie jak po otwarciu dokumentu wciśniesz Ctrl+Shift+F9, czy łącza są aktualizowane?
Ponieważ używam Mac to tam sa chyba inne kombinacje klawiszy (nie znam ich)
Ale jak użyję :
Edytuj->Łącza->Aktualizuj (wskazuje plik źródłowy) to działa prawidłowo i aktualizują się dane.....
Jan_J pisze:Mówiąc z pamięci, API struktury dokumentu winno mieć funkcję aktualizacji linku. Być może, o ile nie da się inaczej, trzeba jakimś iteratorem przejrzeć linki w dokumencie i po kolei je aktualizować. A być może API wyższego poziomu, związane z interfejsem programu, ma taką funkcję gotową.
nie mogę ta zrobić ponieważ dokumenty w których są odnośniki do dokumentu źródłowego nie mogą zawierać makr (no nie powinny), a poza tym jest ich ok 100 .... (obecnie)
belstar pisze:Spróbuj dwóch opcji, zamiast funkcji jest procedura, ale myślę że to nie problem:

Kod: Zaznacz cały

Sub RunUrlLink(param As String)

Dim SysShell As Object 
  ' param="/home/slav/Dokumenty/Calc/test łącza.ods"
  ' param = ConvertToUrl(param)
   'SysShell = createUNOService("com.sun.star.system.SystemShellExecute",param)
   otestLink = StarDesktop.loadComponentFromURL(param,"_blank",0,Array())
   'SysShell.execute("Macintosh HD/Programy/OpenOffice.app",0,0)
   'reLinks(otestLink)
   reLinks_1(otestLink)
End Sub

sub reLinks(oObject)
	rem ----------------------------------------------------------------------
	rem define variables
	dim document   as object
	dim dispatcher as object
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = oObject.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	'dispatcher.executeDispatch(document, ".uno:EditLinks", "", 0, Array())
	dispatcher.executeDispatch(document, ".uno:UpdateLinks", "", 0, Array())
end sub

Sub reLinks_1(oObject)
	oIter = oObject.ExternalDocLinks.createEnumeration
	while oIter.hasMoreElements
		oLink = oIter.NextElement
		oLink.refresh
	wend
	
	oIter = oObject.DDELinks.createEnumeration
	while oIter.hasMoreElements
		oLink = oIter.NextElement
		oLink.refresh
	wend
End Sub
dziękuję, jutro wypróbuję i dam znać czy pomogło.....
OpenOffice 4.1 na OS X / Windows 8/10/Vista
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Hyperlink /starDesktop

Post autor: Jan_J »

Makro nie musi być osadzone w dokumencie, którego dotyczy.
@belstar zaproponował zgrabne podprogramy, których funkcjonalność opisałem wyżej: iterator wywołujący funkcje OpenDocument API oraz wykorzystanie dispatchera UNO do aktualizacji wskazanego dokumentu.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

witam ponownie.
jak rozumiem te procedury wklejam do swojego makra i wywołuje je w swojej funkcji jako reLinks() lub reLinks_1
tak zrobiłem i w obu procedurach linki nie aktualizują się.
przy w reLinks_1 czym zgłasza problem "nie znaleziono metody refresh" na linijce kodu:

oLink.refresh

nie jestem expertem (zajmuję się tym od zaledwie 1h) ale nie widzę deklaracji zmiennych lub obiektów
typu:
oIter, oLink, otestLink

nie wie m jak jest w tym języku, czyżby zmienne/obiektu były powoływane lokalnie i typ zmiennej był nadawany przez pierwsze podstawienie ....?
tak to wygląda....
OpenOffice 4.1 na OS X / Windows 8/10/Vista
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

może problemem aktualizacji linków jest to iż otwierane dokumenty odwołują się do dokumentu z którego jest wywoływane makro? (tam są dane źródłowe)
OpenOffice 4.1 na OS X / Windows 8/10/Vista
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

ciekawym jest fakt iż przy tradycyjnym klikaniu na link, jak się otwiera dokument to jest okno dialogowe informujące o możliwości aktualizacji, a przy wywołaniu makrem tego nie ma....
jutro spróbuję zrobić ekstra dokument gdzie źródłem danych będzie inny plik.....

zrobiłem test dziś, też nie działa.......
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

Być może problem z błędami wynika z tego że ja używam LO a ty według podpisu OO. Jutro sprawdzę na OO, a pliki wstaw będzie pomocne.
mariuszelectro pisze:nie jestem expertem (zajmuję się tym od zaledwie 1h) ale nie widzę deklaracji zmiennych lub obiektów
typu:
oIter, oLink, otestLink
Nie ma to znaczenia, bo basic sam je deklaruje jako Variant
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

mariuszelectro pisze:przy w reLinks_1 czym zgłasza problem "nie znaleziono metody refresh" na linijce kodu:
U mnie na linuxie z AOO 4.0.1 ze stworzonymi do testów plikami działa, także czekam na twoje pliki.

Tymczasem odkomentuj sobie:

Kod: Zaznacz cały

dispatcher.executeDispatch(document, ".uno:EditLinks", "", 0, Array())
powinno to otwierać okno edycji linków, z możliwością ich aktualizacji.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

witam ponownie zrobiłem specjalnie pliki dla demonstracji (są wykastrowane do minimum) i na OsX u mnie nie działają
załączam do przejrzenia

dokumentem źródłowym jest testmacro, a dokumentem linkowanym jest "faktura nic1.xls"

w dokumnecie źródlowym są trze metody tworzenia linków
1) jako formatowanie warunkowe metodą złącz teksty z nazwą użytkownika również składaną jako taksy (nie udaje się pobrać adresu url a jedynie nazwę użytkownika
2) w tej metodzie nazwa użytkownika jest składany tak samo jak link źródłowy, tu udaje sie pobrac link i otworzyć dokument.
3) klasyczny lik do pliku utworzony poprzez wstaw hiperlącze.


makro jest natomiast troche posiekane ale poniewż chodzi o tu o zasad aktualizacji linków więc jest na sztywno wpisany docelowy dokument (" z palca")

swoją drogą przetestuję to na innym systemie operacyjnym i dam znać jak wyniki testów się powiodły
Załączniki
testMacro.zip
(8.62 KiB) Pobrany 179 razy
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

Nie ma żadnych makr w tych plikach.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

tak własnie zauważyłem, nie wiem jak dodać takie makra do pliku, oraz nie wiem gdzie są one przechowywane na dysku.....
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

Problem w tym że zapisujesz plik z makrem jako xls.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

tzn iz muszę zapisac to makro w natywnym formacie openoffice - wtedy będzie przenoszalne jako jeden plik ?
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

Przejrzyj te pliki może coś ci z tego wyjdzie. Rzeczywiście po otwarciu pliku excela dokument nie ma metody Refresh a więc pozostaje wykonywać makro dispatchera UNO czyli reLinks(), przynajmniej do czasu wyjaśnienia sytuacji (jutro powalczę). Opcja druga zapis do .ods
Załączniki
Hyper_Link.zip
(23.4 KiB) Pobrany 166 razy
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

przetestowałem po windows,nie działa.
załączam pliki zawierające makro (zapisane w ods)
w makro jest na sztywno zapisana scieżka którą trzeba zmodyfikować wg własnego położenia folderu.
Załączniki
testMacro.zip
(22.44 KiB) Pobrany 199 razy
OpenOffice 4.1 na OS X / Windows 8/10/Vista
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

belstar pisze:Przejrzyj te pliki może coś ci z tego wyjdzie. Rzeczywiście po otwarciu pliku excela dokument nie ma metody Refresh a więc pozostaje wykonywać makro dispatchera UNO czyli reLinks(), przynajmniej do czasu wyjaśnienia sytuacji (jutro powalczę). Opcja druga zapis do .ods
twoje makra działają,

będę to analizował, dzięki za materiał do dalszej pracy
OpenOffice 4.1 na OS X / Windows 8/10/Vista
mariuszelectro
Posty: 22
Rejestracja: pn lut 29, 2016 1:53 pm

Re: Hyperlink /starDesktop

Post autor: mariuszelectro »

Bardzo dziękuję za pomoc.

Przeanalizowałem twój kod (sporo się nauczyłem)
zastosowałem do do swojego makra i działa

okazuje się iż na moje początki pracy z makrami rzutują inne języki programowania, i miałem niewłaściwą konstrukcję całego dokumentu(makra) procedury wewnątrz procedur (jestem zbyt początkujący)
co zauważyłem analizując prawidłowy kod.........

mam jeszcze jedno pytanko.
jak przechwycić zdarzenie iż np wskazany (w linku) dokument nie istnieje lub nie da się otworzyć?
oraz jak po przechwyceniu takiego wyjątku powrócić do wykonywania makra?
jak przekazać parametr do linkowanego dokumentu aby aktualizacja była automatyczna, a nie ręczna?

dziękuję jeszcze raz za pomoc i cierpliwość
OpenOffice 4.1 na OS X / Windows 8/10/Vista
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Hyperlink /starDesktop

Post autor: belstar »

mariuszelectro pisze:jak przechwycić zdarzenie iż np wskazany (w linku) dokument nie istnieje
Przed próbą otwarcia wykonać np. takie makro i podjąć odpowiednią decyzje.

Kod: Zaznacz cały

Sub oPlikIstnieje
	Dim oFromFile
	Dim oFromURL
		oFromFile = "C:\temp\test.csv"	
		oFromURL = ConvertToUrl(oFromFile)
		If FileExists(oFromURL) then
			MsgBox( oFromFile & " Istnieje", 0, "Plik istnieje")
		else
			MsgBox( oFromFile & " Nie istnieje", 0, "Uwaga !!")
		End If
End Sub
mariuszelectro pisze:lub nie da się otworzyć?
Obsługa błędów:
https://wiki.openoffice.org/wiki/Docume ... r_Handling
mariuszelectro pisze:oraz jak po przechwyceniu takiego wyjątku powrócić do wykonywania makra?
Np. to co wyżej, sekcja: The Resume Command
mariuszelectro pisze:jak przekazać parametr do linkowanego dokumentu aby aktualizacja była automatyczna, a nie ręczna?
Jeśli jest xls to chyba tylko ręczna, przy ods można powalczyć tzn. wykonać makro z metodą refresh to co powodowało wyjątek
LibreOffice 5.1.2.2 Ubuntu 16 LTS
ODPOWIEDZ