Export jako pdf sugerowanie nazwy pliku

Użytkowanie arkusza kalkulacyjnego
koneser69
Posty: 32
Rejestracja: śr mar 16, 2016 8:14 pm

Export jako pdf sugerowanie nazwy pliku

Post autor: koneser69 »

Witam

Czy jest możliwość aby po wybraniu Export jako pdf program sugerował nazwę pliku pobraną z określonej komórki.
Przeglądałem forum. Temat ten już się przewijał. Jednak nie wiem dlaczego nie potrafię wdrożyć tej funkcjonalności.
OpenOffice 4.1.2 Windows 7
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Export jako pdf sugerowanie nazwy pliku

Post autor: Jan_J »

Zapewne trzeba odrobinę programowania. Myślę że coś takiego powinno pomóc:

Kod: Zaznacz cały

sub ZapiszTamGdzieJaChce()
	dokument = thisComponent
	nazwa = dokument.Sheets.getByIndex(0).getCellRangeByName("A1").getString()
	url = convertToURL(nazwa)
	opcje = array()
	dokument.storeAsURL(url, opcje)
end sub
o ile we wskazanej komórce będzie umieszczona ścieżka do pliku.
Z tym że tu zapisuje, nie sugeruje.

Jeśli ma odpalać okno dialogowe, ja bym robił tak:

Kod: Zaznacz cały

sub ZapiszTamGdzieJaChceZPytaniemGdzieToMaByc()
	dokument = thisComponent
	nazwa = dokument.Sheets.getByIndex(0).getCellRangeByName("A1").getString()
	url = convertToURL(nazwa)
	fp = createUnoService("com.sun.star.ui.dialogs.FilePicker")
	dim fpopts(0) as integer
	fpopts(0)=com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
	fp.initialize(fpopts())
	rem NIE ustawia nazwy pliku, a chodzi o to żeby ustawiał!
	fp.setDefaultName(nazwa)
	rem ustawia kartotekę, OK
	fp.setDisplayDirectory(url)
	if fp.execute() then
	   url = convertToURL(fp.Files(0))
	   opcje = array()
	   dokument.storeAsURL(url, opcje)
	endif
	fp.dispose()
end sub
jakoś nie chce mi wpisać nazwy pliku jako domyślnej. Ale bym w tym kierunku drążył.

Nieco inny pomysł, raczej makro sensie wywołanie funkcji interfejsu użytkownika o nazwie ".uno:SaveAs" zamiast funkcji API: https://forum.openoffice.org/en/forum/v ... =9&t=35102
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
koneser69
Posty: 32
Rejestracja: śr mar 16, 2016 8:14 pm

Re: Export jako pdf sugerowanie nazwy pliku

Post autor: koneser69 »

Witam

Nie wiem czemu ale twój pierwszy przykład nie działa. Natomiast drugi tworzy plik ale jak jest to plik pdf to nie można go otworzyć. Wyrzucała błąd pliku.
Udało mi się znaleźć rozwiązanie używam OO 4.1.2 i u mnie to działa. Do pełni szczęścia brakuje tylko aby utworzony plik otwierał się abym mógł go od razu przejrzeć i wydrukować. Czy ktoś z Was wie jak to zrobić?

Kod: Zaznacz cały

sub export_pdf
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Faktura"
args1(0).Value = "$A$1:$M$54"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
  Dim Cel        As Object
  Dim Werkblad    As Object
  Dim Werkmap    As Object
 
  Werkmap=ThisComponent
  Werkblad=Werkmap.Sheets.getByName("Dane do faktury")
  nazwaPliku=Werkblad.getCellByposition(3,4) 'D3
  nazwaKatalogu=Werkblad.getCellByposition(3,2) 'D5


args2(0).Name = "URL"
args2(0).Value = "file:///D:/Documents and Settings/user/Desktop/user/Dokumenty/"& nazwaKatalogu.getString()&"/"& nazwaPliku.getString()&".pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DocumentOpenPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PermissionPassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Selection",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

'sVar = MsgBox( "Utworzono plik "& nazwaKatalogu.getString()&"/"& nazwaPliku.getString()&".pdf" ,256 + 16 + 2,"Utworzono plik")
sVar = MsgBox( "Utworzyć plik "& nazwaKatalogu.getString()&"/"& nazwaPliku.getString()&".pdf ?" ,4,"")

If sVar = 6 then

 	czyPlikIstnieje = FileExists(args2(0).Value) 
 	If czyPlikIstnieje = true then
 		sVar = MsgBox( "Podany plik "& nazwaKatalogu.getString()&"/"& nazwaPliku.getString()&".pdf już istnieje. Czy mam go nadpisać?" ,4,"Informacja")
 		
 		If sVar = 7 then
 			Exit sub 'Jeżeli nie mam nadpisać pliku do wychodzę 
 		End if
 	End if

 dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args2())
End if

end sub
OpenOffice 4.1.2 Windows 7
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Export jako pdf sugerowanie nazwy pliku

Post autor: Jan_J »

Pierwszy: działa o ile dostanie ABSOLUTNĄ ścieżkę docelową. Ale nie pokazuje okna dialogowego, tylko po prostu zapisuje plik.
Drugi: wyrzuca okno dialogowe zapisu pliku, pozwala wybrać albo wpisać nazwę i zatwierdzić. Tylko nie wiem czemu, ale nie wpisuje początkowej nazwy pliku do okna, a na tym ci zależy.
Trzeci: analogiczne rozwiązanie bazujące na narzędziach wyższego poziomu (interfejs aplikacji zamiast funkcji wykorzystywanych w aplikacji).

Twoja propozycja: polecenie Shell(komenda) uruchamia przekazany parametr tak jakby był poleceniem systemowym. W Windows wystarczy absolutna ścieżka (nie URL) do pliku pdf, żeby go "otworzyć" w domyślny sposób. Albo skorzystać z opcji Twojej przeglądarki pdf, żeby nie otwierać tylko od razy drukować.
Przegłądarki są różne (np. Adobe Reader, Foxit, Evince, w W10 jest jakaś wbudowana, Okular itp.). Różnić się mogą opcjami wywoływania. Ale w Windows aplikacje zazwyczaj drukują dokumenty opcją /p, np.
acroread.exe /p sciezka_do_mojego_pdfa.pdf
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ