Makro i problem z funkcją "wklej specjalnie"

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
sebek05
Posty: 6
Rejestracja: pn maja 02, 2011 12:59 pm

Makro i problem z funkcją "wklej specjalnie"

Post autor: sebek05 »

Witam,
nagrałem sobie proste makro, które ma mi skopiować całą zawartość jednego arkusza i wkleić ją bez formuł do innego arkusza.
Poniżej część odpowiedzialna za wklejenie:

Kod: Zaznacz cały

dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVDNT"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())
Niestety makro nie kopiuje mi OBIEKTÓW (np. pól z ptaszkami).
Obiekty są kopiowane dopiero jak zaznaczę żeby kopiowało wszystko, czyli ustawienie Flags - litera A
Ale ja nie chce wszystkiego bo ma mi nie kopiować formuł.
Doszedłem już co oznaczają poszczególne flagi:
S - ciągi znaków
V - liczby
D - data i godzina
N - komentarze
T - formaty
i wiem nawet, że
F - formuły

Niestety nie mam pojęcia jaką flagę mają OBIEKTY. Jak nagrywam makro zaznaczając żeby kopiował same obiekty to nie wstawia mi żadnej flagi. Mam tylko "".

Proszę o jakąś pomoc jak to wykonać lub jak obejść ten problem.
OpenOffice 3.3.0 || Windows XP
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Makro i problem z funkcją "wklej specjalnie"

Post autor: Jan_J »

Tak naprawdę kontrolka nie jest częścią zawartości komórki. Komórka w ogóle nie wie nic o kontrolkach. Wręcz przeciwnie: to kontrolka ma pole Anchor, za pomocą którego jest kotwiczona w komórce. Bezpośrednio za pomocą API umiem chwycić obiekt i przesunąć jego zakotwiczenie:

Kod: Zaznacz cały

d = thisComponent ' bieżący dokument
s = d.Sheets.getByIndex(0) ' pierwszy arkusz
c = s.getCellByPosition(0,0) ' komórka A1
p = s.DrawPage ' strona arkusza
w = p.getByIndex(0) 'pierwsza kontrolka na stronie

rem kotwiczymy kontrolkę w A1
w.Anchor = c
Kod dispatchera wyzwalany przez "uno:insertcontents" zapewne ogarnia to wszystko za pomocą FLAGS? Nie mam pojęcia jak to robi, nie natrafiłem na żaden ślad dokumentacji poza banalnymi przykładami (co nie znaczy, że jej nie ma...). Z doświadczenia własnego nie pomogę, bo dispatchera i nagrywanego kodu unikam jak ognia. Nie wiem czy słusznie.

PS. Ale nawet przez Copy/Paste (special) zakotwiczone kontrolki się nie przenoszą... Tak że nie wiem, czy nie będzie trzeba zejść z poziomu dispatchera do wywołań API.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ