Makro do drukowania i zapisywania pdf

Użytkowanie arkusza kalkulacyjnego

Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Śr cze 23, 2021 10:16 am

Witam,

potrzebuje stworzyć makro, które po uruchomieniu wydrukuje mi arkusz a następnie zapisze arkusz w określonej ścieżce pod nazwą z komórki E02. Jestem totalnym laikiem jeśli chodzi o pisanie makr. Nagrałem sobie coś takiego jak poniżej wiadomości i mam z tym dwa problemy:

1) nie umiem wymuścić na nim żeby zamiast 39954 wstawiał nazwę z tej komórki.

2) Wyrzuca mi pdf w którym jest kilka stron arkuszy a zależy mi tylko żeby była tylko strona 1

Czy ktoś byłby skłonny pomóc o ile to nei jest jakieś skomplikowane i kłopotliwe ?
Z góry dziękuje


-----------------
nagrane makro:





Kod: Zaznacz cały   Rozszerz widokZwiń widok
sub proba1
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 = "ToPoint"
args1(0).Value = "$E$2"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())


rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(2) as new com.sun.star.beans.PropertyValue
args6(0).Name = "URL"
args6(0).Value = "file:///ścieżka/39954.pdf"
args6(1).Name = "FilterName"
args6(1).Value = "calc_pdf_Export"
args6(2).Name = "FilterData"
args6(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("ViewPDFAfterExport",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("AllowDuplicateFieldNames",0,false,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,1,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("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageRange",0,"1",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args6())


end sub
Ostatnio edytowano Pt lip 23, 2021 12:09 am przez Bałuty, łącznie edytowano 4 razy
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Jermor » Śr cze 23, 2021 4:42 pm

Nie wiem, bo już nie pamiętam, jak wygląda eksport do pdf w wersji 4,1,2 (taką wersję masz podaną w stopce).
W wersji 7.0.6 można w oknie eksportu zaznaczyć chęć zapisania tylko zaznaczonego obszaru.
Zrzut ekranu 2021-06-23 161544.png

A jeśli chodzi o nazwę pliku, to zmień w makrze zapis
Kod: Zaznacz cały   Rozszerz widokZwiń widok
args6(0).Value = "file:///ścieżka/39954.pdf"
na
zależny od tego co masz wpisane w E2 oraz w jakim arkuszu znajduje się ta komórka z nazwą pliku
Kod: Zaznacz cały   Rozszerz widokZwiń widok
args6(0).Value = "file:///ścieżka/"&ThisComponent.Sheets(0).getCellRangeByName("E2").string&".pdf"

w tym przykładzie przyjąłem, że komórka E2 zawiera tylko nazwę pliku (bez rozszerzenia) i znajduje się w pierwszym arkuszu twojego skoroszytu. W makrach arkusze są liczone od 0. Pierwszy arkusz w skoroszycie ma zawsze przypisany numer 0, tzn., że gdy ten arkusz np. o nazwie "Arkusz1" przeniesiesz w inne miejsce, to numer 0 będzie przypisany do tego arkusza, który jest teraz pierwszy na liście.
Jeśli chciałbyś jednak wskazać, z jakiego arkusza ma zostać pobrana zawartość komórki, to w miejsce Sheets(n) wpisz
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Sheets.getByName("Nazwa arkusza")
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1545
Dołączył(a): So paź 12, 2013 11:09 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Cz cze 24, 2021 12:47 pm

Wpisałem kod który mi dałeś i wywala mi taki komunikat:

"Błąd uruchomieniowy języka BASIC.
Nieprawidłowa wartość właściwości"

i jest to niezależne od tego czy dałem kod w takiej formie (z nazwą arkusza):

args6(0).Value = "file:///F:/TRZMIEL/m/m/dla%20Moniki/"&ThisComponent.Sheets.getByName("dd1").getCellRangeByName("E2")&".pdf"

czy takiej (arkusz do pdf jest 4 arkuszem w pliku)

args6(0).Value = "file:///F:/TRZMIEL/m/m/dla%20Moniki/"&ThisComponent.Sheets(4).getCellRangeByName("E2").string&".pdf"



Jeśli chodzi o to ten zapis do pdf. Okno eksportu wygląda identycznie. Jak ogarniam cały proces bez użycia makra zaznaczam zakres jako storna 1 i to na tej podstawie libre tworzy mi plik, tylko odpowiednią stroną. Ewentualnie mógłby być to zakres (A1 : J67 w arkuszu dd1). Efekt pewnie byłby ten sam. Skrypt który się nagrał zapisuje mi pdf bez wyświetlania okna dialogowego (z automatu tworząc pdf z ponad setką stron). Najlpeij by było jakby ogarniał to tylko z tą pierwszą stroną, ewentualnie otwierał okno dialogowe gdzie mógłbym wybrać str 1.


Jeszcze raz bardzo dziękuje za pomoc
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Jermor » Cz cze 24, 2021 5:21 pm

Jeżeli chodzi o błędy wykonania:
Pierwszy kod nie zawiera właściwości "string".
Drugi kod. Czwarty arkusz skoroszytu ma numer 3, napisałem o tym, że numeracja arkuszy zaczyna się od 0. Jeżeli twój skoroszyt ma cztery arkusze, to instrukcją Sheet(4) odwołujesz się do nieistniejącego arkusza.
Możliwość wybrania zakresu ogranicza się do wyboru
  • "wszystko" - to cię nie interesuje.
  • "strony" - to mogłoby cię interesowac gdyby interesująca strona miała zawsze taki sam numer. To jest mało prawdopodobne skoro arkusz, z którego chcesz drukować, jest czwartym z kolei. Poprzedzające arkusze mogą zapewne, zmieniając swoją objętość, powodować "pływanie" numeru potrzebnej strony.
  • "Zaznaczenie" - drukuje albo aktualnie zaznaczony arkusz, albo zaznaczony obszar z jakiegoś arkusza. To jest opcja dla ciebie.
Zaznacz sobie obszar w arkuszu, który ma zostać wydrukowany i nadaj mu nazwę.
Teraz nagraj ponownie makro, tyle że na początku zarejestruj wybranie zaznaczonego obszaru a dopiero potem wybieraj eksport do pdf i jego opcje.
Nie wiem, jakie masz doświadczenia z nazwami. Szybki wybór nazwanego obszaru wykonasz (zarejestrujesz) otwierając okienko jak na ilustracji i wskazując potrzebną nazwę.
Zrzut ekranu 2021-06-24 171545.png
Zrzut ekranu 2021-06-24 171545.png (6.27 KiB) Przeglądane 843 razy

W końcu zmodyfikuj kod, w taki sposób, jaki ci podałem.
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1545
Dołączył(a): So paź 12, 2013 11:09 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Pt cze 25, 2021 9:29 am

Ze stringiem pojawiał się błąd z tą wartością ".pdf" ale zrobiłem sobie komórkę w której podałem nazwę docelowego pliku łącznie z rozszerzeniem i poszło.

Jeśli chodzi o ten drugi temat zrobiłem w sumie najprostszą rzecz jaką się dało. Ustaliłem zakres druku tylko dla tego jednego arkusza a pozostałe usunąłem w całym dokumencie co w praktyce zakończyło temat


Dziękuję wielkie za wskazówki.
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Wt cze 29, 2021 6:56 am

Makro działa ale chciałem zapytać jeszcze o jedną modyfikację.

Czy jest możliwość aby na sam koniec pod exporcie do pdfa makro usuwało obrazek, które wstawiło? Nie za bardzo wiem jak zapisać w kodzie sam wybór obrazka, który ma być usunięty. Nagrywanie również nie pomaga w niczym?





Cały kod poniżej:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
sub wydruk
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 args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$B$38"

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


rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = "file:///S:/Trzmielu/do%20dokumentow/"&ThisComponent.Sheets(4).getCellRangeByName("B1").string
args1(1).Name = "FilterName"
args1(1).Value = "<Wszystkie formaty>"
args1(2).Name = "AsLink"
args1(2).Value = false

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = "file:///F:/TRZMIEL/m/m/dla%20Moniki/"&ThisComponent.Sheets(4).getCellRangeByName("A1").string
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("ViewPDFAfterExport",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("AllowDuplicateFieldNames",0,false,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,1,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("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

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




end sub
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Jermor » Wt cze 29, 2021 1:29 pm

Z twojego kodu wynika, że grafikę wstawiasz do komórki B3. Wydaje mi się, że powinna wystarczyć ta instrukcja:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
ThisComponent.Sheets(4).getCellRangeByName("B3:koniec").clearContents(com.sun.star.sheet.CellFlags.OBJECTS)

Zamiast słowa "koniec" musisz wpisać adres komórki, w której znajduje się prawy dolny róg grafiki. Zakres komórek musi obejmować wszystkie komórki, w których znajduje się choćby fragment grafiki.
Jeżeli obiekt graficzny został wstawiony do komórki z opcją: "Dopasuj do rozmiarów komórki", to wskazanie zakresu jako B3 albo B3:B3 może nie wystarczyć, gdyż granica obiektu znajdująca się na granicy komórki jest traktowana jako leżąca już poza obszarem, w którym należy usunąć obiekty.
Możesz zaznaczyć większy obszar. To polecenie usuwa z zaznaczonego obszaru tylko obiekty, nie usuwa niczego innego z komórek objętych tą instrukcją.
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1545
Dołączył(a): So paź 12, 2013 11:09 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Wt cze 29, 2021 1:45 pm

działa. Dziękuje bardzo jeszcze raz.
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Pt lip 23, 2021 12:23 am

Przepraszam odgrzebę jeszcze kotleta trochę ponieważ makro w między czasie przeszło drobną ewolucją mam kilka pytań:

Ponieważ makro służy mi do wydruku zamówień z określonej daty postanowiłem zrobić sobie tabelkę (osobny arkusz w calcu) tworzącą numery zamówienie wprowadzone do systemy w określonym dniu i rzucić działające makro w pętle która drukowałaby i zapisywała do pdf wszystkie zamówienia z listy i teraz tak:

- args13 - powinno pobierać wartość "1" z komórki M1
- args14 - powinno pobierać ilość zamówień z danego dnia z N1
(sprawdziłem numer arkuszy i komórki są tam prawidłowo dane)

Kod: Zaznacz cały   Rozszerz widokZwiń widok
sub petla
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 args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "ToPoint"
args13(0).Value = ThisComponent.Sheets(7).getCellRangeByName("M1").string

dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "ToPoint"
args14(0).Value = ThisComponent.Sheets(7).getCellRangeByName("N1").string

dim args3(0) as new com.sun.star.beans.PropertyValue

dim args1(2) as new com.sun.star.beans.PropertyValue

dim args2(2) as new com.sun.star.beans.PropertyValue

dim args5(0) as new com.sun.star.beans.PropertyValue

dim args7(0) as new com.sun.star.beans.PropertyValue

For args13(0).Value = ThisComponent.Sheets(7).getCellRangeByName("M1").string to args14(0).Value = ThisComponent.Sheets(7).getCellRangeByName("N1").string


rem ----------------------------------------------------------------------

args3(0).Name = "ToPoint"
args3(0).Value = "$B$38"

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


rem ----------------------------------------------------------------------

args1(0).Name = "FileName"
args1(0).Value = "file:///S:/Trzmielu/do%20dokumentow/"&ThisComponent.Sheets(4).getCellRangeByName("B1").string
args1(1).Name = "FilterName"
args1(1).Value = "<Wszystkie formaty>"
args1(2).Name = "AsLink"
args1(2).Value = false

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())

rem ----------------------------------------------------------------------

args2(0).Name = "URL"
args2(0).Value = "file:///F:/TRZMIEL/m/m/dla%20Moniki/"&ThisComponent.Sheets(4).getCellRangeByName("A1").string
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("ViewPDFAfterExport",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("AllowDuplicateFieldNames",0,false,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,1,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("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

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


ThisComponent.Sheets(4).getCellRangeByName("A1:JJ666").clearContents(com.sun.star.sheet.CellFlags.OBJECTS)


args5(0).Name = "ToPoint"
args5(0).Value = "$E$2"

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

rem ----------------------------------------------------------------------

args7(0).Name = "StringName"
args7(0).Value = ThisComponent.Sheets(4).getCellRangeByName("C1").string

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args7())


Next args13(0).Value

end sub




1) "Pętla" działa ale nie zatrzymuje się po osiągnięciu wartość args14 tylko leci dalej pobierając kolejne dane

2) nie rozumiem do końca czemu mimo iż definuje args13 i args14 na początku calc wymusza na mnie żeby pomiędzy for ... to .. ponownie podawać wartość dla args13 i args14 (bez tych dopisków program nie chciał działać)

3) czy jest możliwy zapis w którym poporstu podaje że pętla ma działać np 10 razy ? (chciałem przetestować czy kod pobiera mi prawidłową wartość args14 i zatrzyma się po 10 pętlach ale
For args13(0).Value = ThisComponent.Sheets(7).getCellRangeByName("M1").string to 10 z tego co się zorientował nie chce działać w ogóle

Z góry dziękuje
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Jermor » Pt lip 23, 2021 8:08 pm

Instrukcja For ... Next wymaga, aby wartościami zakresu pętli były liczby. Tu używasz takiej konstrukcji:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
args14(0).Value = ThisComponent.Sheets(7).getCellRangeByName("N1").string

To oznacza, że do zmiennej args14(0).Value wstawiany jest ciąg.
Tak w ogóle, skoro znalazłeś sposób na pobranie wartości z komórek M1 i N1, to prościej byłoby wpisać ich wartości do zmiennych, np. tak:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
i= ThisComponent.Sheets(7).getCellRangeByName("N1").value
j = ThisComponent.Sheets(7).getCellRangeByName("N1").value

I w instrukcji For zapisać:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
For k=i to j
a skoro i tak pierwszym indeksem pętli jest 1, to wystarczy podać tylko wartość z komórki N1, czyli
Kod: Zaznacz cały   Rozszerz widokZwiń widok
For i=1 to j

Ponadto jeśli twoim zasadniczym makrem jest to, które wykonywałeś wcześniej, niech ma nazwę "ABC", to twoje makro "Petla" mogłoby miec postać:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
Sub petla
j = ThisComponent.Sheets(7).getCellRangeByName("N1").value
If j <=1 then Stop 'Przerywa makro, gdy w N1 jest 0 lub liczba ujemna.
For i=1 to j
    abc
Next i
End Sub
AOO 4.1.10, LO 7.1.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1545
Dołączył(a): So paź 12, 2013 11:09 am

Re: Makro do drukowania i zapisywania pdf

Postprzez Bałuty » Wt lip 27, 2021 10:14 am

Dzieki po urlopie sprawdze czy zadziała to wszystko
Libre Office Wersja: 4.2.0.4 / win7
Bałuty
 
Posty: 7
Dołączył(a): Śr cze 23, 2021 10:10 am


Powrót do Calc

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 6 gości