Strona 1 z 1

Wklej specjalnie

: sob wrz 30, 2017 8:18 pm
autor: MarkOpen
W LibreOffice - Calc jest ręcznie obsługiwana operacja "Wklej specjalnie".
Szukam kontaktu z zespołem (programistą), który potrafiłby zautomatyzować tę operację,
zastępując formułą, np. WKLEJ.SP[komórka lub zakres;parametr charakterystyczny]
PASTE.SP[cell or range;characteristic parameter].
Czy ktoś mógłby mi pomóc lub sam przekazać moją sugestię we właściwe ręce?
Takiej formuły EXCEL jeszcze nie ma. W CALC-u byłaby nowością. :)

Re: Wklej specjalnie

: sob wrz 30, 2017 8:51 pm
autor: Jan_J
???
Operacja wklej/ctrl+v działa w chwili, w której jest wyzwalana, wstawiając w środowisku edycyjnym statyczną zawartość zależną od chwilowego stanu pamięci schowka.
Co by dała funkcja paste działająca jako formuła?
1. efekty uboczne -- jak rozumiem, zmiana stanu dotyczyłaby nie komórki z formułą, tylko wskazanego w argumencie adresu; //edit: nie o to chodziło -> 4.
2. efekty uboczne -- jak rozumiem, stan docelowy nie byłby obliczany, tylko statycznie wstawiany skądś;
3. dużą nieprzewidywalność wyników -- co by się miało stać w przypadku operacji ponownego przeliczenia formuł arkusza? wstawiałaby się bieżąca zawartość schowka?
4. (//edit) trzeba by w komórce zapamiętać wartość zamiast reguły jej wyliczenia?

IMO:

Stosunkowo nietrudno jest zaprojektować wyspecjalizowaną operację typu paste special w postaci makropolecenia, tj. funkcji automatyzującej działanie interfejsu/edytora. taką funkcję wywołuje się na żądanie, a efekt może być trwały. Taką operację dałoby się wywoływać automatycznie w określonych okolicznościach, ale to zależy od potrzeb. Tu możesz liczyć na pomoc naszych wolonatriuszy, rzecz jasna w miarę ich czasu i chęci.

Formuły w arkuszu działają wg innej filozofii: budują związki między etapami przetwarzania reprezentowanymi przez osobne komórki albo regiony. Przy tym (w zasadzie) zmiany dotyczą tej komórki/regionu, w której formułę umieszczono. Funkcja naruszająca tę "filozofię" (istnieje dość ohydne słowo "paradygmat") narobiłaby więcej szkody niż pożytku.

Re: Wklej specjalnie

: sob wrz 30, 2017 10:02 pm
autor: MarkOpen
Nieprzypadkowo swoją prośbę umieściłem w dziale "Calc".
Zanim coś się wklei, trzeba to skopiować. Odpowiednikiem operacji Ctrl+c ---> Ctrl+v jest formuła przeniesienia zawartości komórki A1 do B1, wpisana w komórce B1: =A1.
Zawartość komórki B1 jest dynamiczna i zależy od chwilowej zawartości komórki A1.
Jednak nie chodzi tu o prostą funkcję "Wklej" lecz o "Wklej specjalnie"!
Ręczna operacja "Wklej specjalnie" też umożliwia skopiowanie z jednej i wklejenie do drugiej komórki zawartości ale zapisuje ją na stałe, odcinając od źródła.
ad.1. Nie ma efektu ubocznego. Do komórki B1 (z formułą) zostaje przeniesiona zawartość komórki A1 i formuła przestaje działać (zostaje usunięta).
ad.2. Nie ma efektu ubocznego. Tak.
ad.3. Nie. Patrz ad.1.
Makropolecenie - jedna z możliwości. Bardzo interesująca dla mnie laika. Lecz prostsza i wygodniejsza byłaby formuła WKLEJ.SP jw.
Krótko: potrzebuję arkusz kalkulacyjny ułatwiający zestawianie 100 serii pomiarów próbek.
Na początku wiersz przeznaczony do wpisywania wyników: w 1. komórce numer kolejny serii 10 pomiarów, w następnych dziesięciu - uzyskane wyniki.
Dalej tabela 10 kolumn x 100 wierszy. Formuła WKLEJ.SP, po spełnieniu warunku numeru serii, przenosiłaby wyniki do odpowiednich wierszy.
Ot i wszystko.
"Formuły w arkuszu działają wg innej filozofii: [...] dotyczą tej komórki/regionu, w której formułę umieszczono."
I taka jest moja idea.
Dziękuję za zainteresowanie. Mam nadzieję, że zrozumiale przedstawiłem swój pomysł.
I jeszcze przypomnę: "Szukam kontaktu z zespołem (programistą)" w ww. sprawie.

Re: Wklej specjalnie

: pn paź 02, 2017 12:57 pm
autor: Jermor
Po pierwsze zapis w komórce B1: =A1 nie jest odpowiednikiem działania CTRL+C → CTRL+V.
To drugie wykorzystuje schowek systemowy, więc najpierw określona treść zostaje skopiowana do schowka, a potem z niego przeniesiona do wybranego miejsca.
Pierwszy zapis jest formułą odwołującą się bezpośrednio do zawartości komórki A1.
Utworzenie proponowanej funkcji WKLEJ.SP jest bezsensowne, z racji wspomnianych już przez Jana_J.
Jeśli tego nie widzisz, to przeanalizuj Twój problem z tymi stoma zestawami wyników.
Na przykładzie Twego problemu. Dobrze! Niech w B2 będzie formuła (funkcja), którą chciałbyś mieć. W B2, bo w A1 jest numer kolejny serii, a od B1 do K1 dziesięć wyników tej serii. Tych pomiarów jest 1000 (100 x 10), czyli tyle formuł musi zostać umieszczonych w wierszach od 2 do 101. Po każdym wprowadzonym wyniku arkusz dokona przeliczenia, czyli każda formuła zrealizuje swój algorytm. Zgodnie z tym, czego oczekujesz, oznacza to usunięcie formuły.

Dlaczego wobec tego nie możesz po prostu zapisywać kolejnych serii wyników jedną pod drugą?
Jeżeli tak bardzo zależy Ci na oddzielnym obszarze wprowadzania danych, to zbuduj potrzebne nagłówki, np. Nr serii, Próbka1, Próbka2, … Próbka10.
Ustaw aktywną komórkę w dowolnym miejscu nagłówka i wywołaj polecenie „Dane → Formularz”.

Re: Wklej specjalnie

: pn paź 02, 2017 2:14 pm
autor: MarkOpen
Drogi Jermor, nawet nie próbujesz zrozumieć mojego zamiaru osiągnięcia celu jak najszybszym i najprostszym sposobem. Jestem zdany tylko na siebie. Nie mam tysiąca asystentów, którzy jednocześnie wykonaliby pomiary. Opracowałem już wiele arkuszy kalkulacyjnych z tysiącami formuł. Teraz przydałaby mi się WKLEJ.SP. Nie wymagam od Ciebie, ani też nie proszę, abyś ją opracował. Szukam kontaktu z kimś o otwartym umyśle, kto mógłby podjąć wyzwanie. Jak dotąd nic. Jeśli nie możesz pomóc, to napisz.
"Po pierwsze zapis w komórce B1: =A1 nie jest odpowiednikiem działania CTRL+C → CTRL+V."
Otóż - w efekcie końcowym, a taki mnie interesuje - JEST. Ponadto, dzieje się to automatycznie - bez ręcznego kopiowania i wklejania.
"To drugie wykorzystuje schowek systemowy, więc najpierw określona treść zostaje skopiowana do schowka, a potem z niego przeniesiona do wybranego miejsca.
Pierwszy zapis jest formułą odwołującą się bezpośrednio do zawartości komórki A1."
To nie ma dla mnie znaczenia - liczy się EFEKT KOŃCOWY.
To, co się dzieje "po drodze", to właśnie zadanie dla programisty.
Ja przedstawiłem założenia - ideę, cel, który chciałbym osiągnąć.
Programiście z wyobraźnią to wystarczy. Sam znajdzie trudności i je usunie. Jeśli nie - formuła nie powstanie.
"Utworzenie proponowanej funkcji WKLEJ.SP jest bezsensowne, z racji wspomnianych już przez Jana_J."
W poprzednim tekście odrzuciłem racje Jana_J, wystarczająco argumentując. Może mało wnikliwie przeczytałeś moją odpowiedź...
"Jeśli tego nie widzisz, to przeanalizuj Twój problem z tymi stoma zestawami wyników."
Zrobiłem to dużo wcześniej. Czy przedstawiałbym go na forum?
"Na przykładzie Twego problemu. Dobrze! Niech w B2 będzie formuła (funkcja), którą chciałbyś mieć. W B2, bo w A1 jest numer kolejny serii, a od B1 do K1 dziesięć wyników tej serii. Tych pomiarów jest 1000 (100 x 10), czyli tyle formuł musi zostać umieszczonych w wierszach od 2 do 101. Po każdym wprowadzonym wyniku arkusz dokona przeliczenia, czyli każda formuła zrealizuje swój algorytm. Zgodnie z tym, czego oczekujesz, oznacza to usunięcie formuły."
Dokładniej - usunięcie JEDNEJ formuły; tej, która spełni narzucony warunek.
"Dlaczego wobec tego nie możesz po prostu zapisywać kolejnych serii wyników jedną pod drugą?"
Powtórzę: cel chcę osiągnąć jak najszybszym i najprostszym sposobem. Zamiast przewijania arkusza i celowania we właściwą komórkę we właściwym wierszu chcę wpisywać dane w jednym wierszu, tylko raz przed kolejną serią kasować jego zawartość i przechodzić z komórki do komórki przy pomocy klawisza "→". Dodatkowo wyróżniłbym komórki do wpisywania danych kolorem jasnożółtym i otoczył krawędziami.
"Jeżeli tak bardzo zależy Ci na oddzielnym obszarze wprowadzania danych, to zbuduj potrzebne nagłówki, np. Nr serii, Próbka1, Próbka2, … Próbka10.
Ustaw aktywną komórkę w dowolnym miejscu nagłówka i wywołaj polecenie „Dane → Formularz”."
Dziękuję, wypróbuję.
Nawiasem mówiąc, zamiast całego komentarza wystarczyłyby ostatnie 2 zdania bez komentarza:
"Oddzielny obszar wprowadzania danych, możesz utworzyć budując potrzebne nagłówki, np. Nr serii, Próbka1, Próbka2, …, Próbka10.
Ustaw aktywną komórkę w dowolnym miejscu nagłówka i wywołaj polecenie „Dane → Formularz”."
Oraz kontakt, o który prosiłem.
Obawiam się jednak, że Twoja merytoryczna sugestia nie spełni moich oczekiwań.
Co do kontaktu... chyba nie masz.

Re: Wklej specjalnie

: wt paź 03, 2017 8:05 pm
autor: Jermor
Zauważyłem, że jesteś poirytowany odpowiedziami na Twój problem. Zatem krótko
MarkOpen pisze:... osiągnięcia celu jak najszybszym i najprostszym sposobem.
Najprostszym sposobem jest wpisanie pierwszego zestawu danych, a potem, przed wpisaniem każdego następnego, dodanie pustego wiersza przed początkowym wpisem.
Nowe dane będą wpisywane zawsze do tych samych komórek.
Podtrzymuję swoje zdanie, że funkcja nie powstanie.
Może powstać makro wyzwalane zmianą zawartości komórki mniej więcej wg następującego algorytmu:
pobierz numer zestawu i na jego podstawie wylicz nr wiersza w docelowym zestawie danych
Zidentyfikuj numer kolumny, w której zmieniono wpis
Przenieś zawartość zmienionej komórki do odpowiadającej komórki w docelowym zestawie danych.
Kontaktu rzeczywiście nie mam.

Re: Wklej specjalnie

: wt paź 03, 2017 9:20 pm
autor: belstar
MarkOpen pisze:Podtrzymuję swoje zdanie, że funkcja nie powstanie.
Może powstać makro wyzwalane zmianą zawartości komórki
Popieram w 100%
Funkcja nie może modyfikować zawartości innych komórek (patrz wypowiedź Jan_J), tylko te w której się znajduje, to takie sobie zabezpieczenie i bardzo dobrze.
Mogę przyjrzeć się twojemu problemowi, ale potrzebuję plik z dokładnym opisem co, skąd, gdzie, dlaczego to a nie tamto i takie jeszcze tam inne, które mają wpływ na algorytm.
Nie obiecuje szybkiego załatwienia sprawy, bom aktualnie czasowo mało wydolny.
Pozdrawiam

Re: Wklej specjalnie

: wt paź 03, 2017 11:00 pm
autor: MarkOpen
Drogi Jermor, jestem niesłychanie zaskoczony.
Skąd u Ciebie ta skłonność do oceny stanu emocjonalnego rozmówcy?
Czy chcesz mnie sprowokować do nieetycznego zachowania i pozbyć się z forum?
Nie rozumiem ani Twojej postawy, ani Jana_J.

Proszę tylko o pomoc i kontakt z programistą, np. zaangażowanym w doskonalenie pakietu Calc, a nie o ocenę mojego pomysłu. Dla mnie jest SUPER. „Loto mi”, co kto o nim myśli. Prawdopodobieństwo jego realizacji niech określi osoba najlepiej znająca możliwości i ograniczenia ww. pakietu Calc.
Forum ma na celu merytoryczną wymianę doświadczeń.

Wreszcie napisałeś „Kontaktu rzeczywiście nie mam”.
Szkoda, a może ktoś z Twoich znajomych ma?

Moją propozycję – bardzo przydatną do realizacji moich planów, czyli ważną z mojego punktu widzenia oceniasz jako „BEZSENSOWNĄ”. Jan_J, przy błędnych założeniach, też kieruje ją do kosza, bo MOŻE NAROBIĆ WIĘCEJ SZKODY NIŻ POŻYTKU.
O moim małżeństwie teściowa mówiła, że się nie uda. Razem z żoną jesteśmy 45 lat i wciąż nam mało :-)

Otóż, zamiast „gdybania” mądrzej przekazać problem w ręce fachowca, który powie:
„świetny pomysł, czegoś takiego Microsoft nie ma, zaraz biorę się do roboty, może się uda, zanim konkurencja mnie uprzedzi...”, albo: „próbowaliśmy tego - nie wyszło, bo...”.
POLAM i wszystko jasne :-), jak kiedyś w reklamie.

Szukałem kontaktu z kimkolwiek bądź na stronie www LibreOffice. Nie znalazłem.
Przyszedłem tu – na forum. I… jestem rozczarowany Waszą postawą.

Piszesz: „Podtrzymuję swoje zdanie, że funkcja nie powstanie.”
Wybacz, ale nigdzie wcześniej takiego zdania nie napisałeś.
Zaś ja twierdzę, że nigdy nie powstanie funkcja CANDV[…] i podtrzymuję swoje zdanie.
I co Ty na to? Kto jest bliżej prawdy? Robimy zakłady, czy oba zdania nie mają żadnego znaczenia dla meritum?
Po co to piszę? Ano, po to, żeby przed kliknięciem „Wyślij” przeczytać tekst jeszcze raz i usunąć zbędne, nic nie wnoszące treści.

Z kolei ja napisałem prawdę: jestem laikiem w dziedzinie programowania (poza BASIC-iem), czy nawet pisania makr.
Gdybyś uważniej czytał, zauważyłbyś to i nie proponował laikowi tworzenia makra. No, chyba, że chcesz podkreślić swoją wyższość w tej dziedzinie :-). Gratuluję, chylę czoło.
Umiem za to tworzyć skomplikowane formuły, wykorzystując istniejące funkcje, które „pracują” dla mnie :-)
I jeszcze jedno – przez wiele lat byłem projektantem i potrafię docenić dzieło ludzkiego umysłu. Jestem pewien, że w ocenie prostego, praktycznego makro doszlibyśmy do consensusu z jego autorem.

Teraz moja opinia. Przykro mi. Jestem zawiedziony – NIE, NIE FORUM. Pozostaje mi grzebanie w internecie. Najlepiej liczyć na siebie.

Chyba, że… ktoś tu jeszcze zajrzy!? A może jednak Microsoft i Excel? Trochę żal...

Re: Wklej specjalnie

: śr paź 04, 2017 12:27 am
autor: MarkOpen
Przepraszam Cię belstar, ale ja tego nie napisałem: "Podtrzymuję swoje zdanie, że funkcja nie powstanie. Może powstać makro wyzwalane zmianą zawartości komórki".
Napisał to Jermor.

A że "Funkcja nie może modyfikować zawartości innych komórek (patrz wypowiedź Jan_J), tylko te, w której się znajduje", to też prawda. Moja propozycja funkcji WKLEJ.SP[] modyfikuje tylko komórkę, w której się znajduje.
Nie wiem, dlaczego Jan_J przypisał jej inne zadanie? Ale to jego tajemnica :-)

Lejesz miód na moje serce.
Jeśli podałbyś mi swój e-mail, choćby tymczasowy, wyślę Ci arkusz z moją wizją.
Dosyć szczegółowo opisałem ją we wpisie z 30 września 2017 r.
Jak to sobie wyobrażam z nową funkcją (adresy komórek mogą być inne) - arkusz Calc:

A1 – ilość serii (np. 100)
A2 – ilość pomiarów w serii (np. 10)

4 wiersz jest wierszem wpisywania danych

A4 – numer kolejny serii, zwiększający się o 1 po każdym przeniesieniu wszystkich pomiarów do wiersza opisanego numerem serii

np. w A4: JEŻELI(MAX(A6:A105)<A1;MAX(A6:A105)+1;”KONIEC”)

C4, D4, …, L4 – komórki, w które mają być wpisywane wyniki pomiarów (tu 10 komórek)

6 – 105 wiersze (tu 100 wierszy) odpowiadające kolejnym seriom pomiarów

A6, A7, …, A105 – komórki, w których pojawią się kolejne numery serii pomiarów po wpisaniu wszystkich 10 pomiarów i przeniesieniu ich przy pomocy funkcji WKLEJ.SP[] do właściwego wiersza

np. w A6: JEŻELI(LICZ.PUSTE(C6:L6)=0;1;””)

np. w A7: JEŻELI(LICZ.PUSTE(C7:L7)=0;A6+1;””)

itd. aż do

np. w A105: JEŻELI(LICZ.PUSTE(C105:L105)=0;A104+1;””)

C6, D6, …, L6; C7, D7, …, L7; …; C105, D105, …, L105; – komórki, do których będą przenoszone wyniki z 4 wiersza przy pomocy funkcji WKLEJ.SP[]

np. w C6, D6, …, L6: JEŻELI($A$4-A5=1;WKLEJ.SP(C$4);””), JEŻELI($A$4-A5=1;WKLEJ.SP(D$4);::), …, JEŻELI($A$4-A5=1;WKLEJ.SP(L$4);””)

itd. aż do

np. w C105, D105, …, L105: JEŻELI($A$4-A104=1;WKLEJ.SP(C$4);””), JEŻELI($A$4-A104=1;WKLEJ.SP(D$4);””), …, JEŻELI($A$4-A104=1;WKLEJ.SP(L$4);””)

Właśnie o takim zastosowaniu funkcji WKLEJ.SP myślę. To tyle "na gorąco". Nie wykluczam błędów, bo nie mogę tego przetestować :-).
Pozdrawiam.

Re: Wklej specjalnie

: śr paź 04, 2017 9:12 am
autor: Jan_J
Ad kontakt z programistą: na forum o ile wiem nie ma żadnego programisty z zespołu OpenOffice ani LibreOffice. Zdarzają się tłumacze. Jest parę osób mających pojęcie o programowaniu jako takim, nie wiem czy zajmują się tym zawodowo, ale nie są zaangażowani w rozwój AOO/LO.

Zresztą programiści projektu też nie będą skłonni ot tak przejmować pomysłów dot. nowych właściwości. Z różnych powodów. Co do zgłaszania usprawnień, to się robi na Bugzilli:
LibreOffice -- https://bugs.documentfoundation.org/, wyjaśnienie w https://wiki.documentfoundation.org/Dev ... razy_Ideas;
Apache OpenOffice -- http://www.openoffice.org/qa/issue_hand ... ssues.html
pod hasłem "Enhancement".

Ad szkody niż pożytku: spontaniczny, nieukierunkowany rozwój bywa bardzo kreatywny, ale na pewnym stopniu komplikacji często utrudnia funkcjonowanie produktów. Wiem, trzeba by poprzeć tę tezę przykładami, mogłoby być ciekawie, ale nie tu i nie teraz.
A że "Funkcja nie może modyfikować zawartości innych komórek (patrz wypowiedź Jan_J), tylko te, w której się znajduje", to też prawda. Moja propozycja funkcji WKLEJ.SP[] modyfikuje tylko komórkę, w której się znajduje.
Nie wiem, dlaczego Jan_J przypisał jej inne zadanie? Ale to jego tajemnica :-)
Tajemnica, bo w pierwszej lekturze musiąłem się domyślić funkcjonalności na podstawie przykłądu wywołania. Potem zaktualizowałem swoje uwagi (// edit). Ale i tak, byłaby to formuła, która nie tyle generuje wynik, co zmienia status komórki (z formuły na stałą), a to znaczy, że działa poprzez efekt uboczny, a nie przez wartość. Albo przechowuje "gdzieś" poza strukturą komórek wiedzę, co miało być wynikiem. Dla mnie oba warianty są nie do zaakceptowania.

Re: Wklej specjalnie

: śr paź 04, 2017 12:08 pm
autor: MarkOpen
Janie_J, wnioskuję z Twoich słów, że masz pełny nadzór nad programistami projektu:
„Zresztą programiści projektu też nie będą skłonni ot tak przejmować pomysłów dot. nowych właściwości. Z różnych powodów.”
Jednak, dziękując za adresy www, będę dalej próbował. Może trafię na optymistę?
Jeden już jest na forum! Nie wiem, czy programista ale wyczuwam, że wie o co chodzi.

Przypomnij sobie, ile funkcji oferował Calc w pierwszej wersji OpenOffice, a ile oferuje dziś. Ile nowych funkcji przybyło? Z ilu z nich nigdy nie skorzystałeś i nie skorzystasz? Dlaczego programiści projektu okazali się skłonni do ich zaprojektowania, mimo Twojego sceptycyzmu?

Piszesz: „Ale i tak, byłaby to formuła, która nie tyle generuje wynik, co zmienia status komórki (z formuły na stałą), a to znaczy, że działa poprzez efekt uboczny, a nie przez wartość. Albo przechowuje "gdzieś" poza strukturą komórek wiedzę, co miało być wynikiem. Dla mnie oba warianty są nie do zaakceptowania.”

Źródło mojego pomysłu przedstawię na przykładzie:

Calc – do komórki A1 wpisuję różne liczby całkowite
- w komórce B1 umieszczam formułę: =A1+1
- po wpisaniu do A1 liczby klikam na B1, prawym przyciskiem myszy otwieram menu podręczne, klikam „Kopiuj”
- następnie klikam na B2, z menu podręcznego wybieram „Wklej specjalnie...”, zaznaczam określony parametr i → Enter
- liczba z B1 została skopiowana do B2 (wklejona specjalnie).

Do A1 wpisuję inną liczbę i przenoszę w ten sam sposób do komórki B3.
Itd. do B4, B5... aż mnie to znudzi lub myszka odmówi współpracy – wszystko ręcznie.
Ale wszystko działa! Kopiuję i wklejam specjalnie CHWILOWĄ wartość!

I nie można spróbować zastąpić tego jedną formułą? Wpisując w komórkę B2, np. =WKLEJ.SP(B1) z jedną zmienną (adres komórki kopiowanej) lub =WKLEJ.SP(B1;P) z jedną zmienną i parametrem charakterystycznym (jak w menu podręcznym)? Dlaczego a priori stawiasz krzyżyk na pomyśle?
Pozdrawiam.

Re: Wklej specjalnie

: śr paź 04, 2017 3:28 pm
autor: Jan_J
MarkOpen pisze:[...] masz pełny nadzór nad programistami projektu:[...]
Czuję ironię. Zaczynamy dryfować w kierunku, którego wolałbym uniknąć.

Mówiąc poważniej,
praca w dużym projekcie wymaga synchronizacji działań i systemu informowania się o nich. Platforma w stylu bugzilla znacznie lepiej się do tego nadaje niż forum dyskusyjne. Ono ma po prostu inne cele.
Rzecz jasna nieformalne skonsultowanie pomysłu zawsze jest coś warte. Z tym, że z doświadczenia wiadomo, że chętni konsultanci nie będą walić drzwiami i oknami.

Merytorycznie,
jeżeli
Kopiuję i wklejam specjalnie CHWILOWĄ wartość!
to znaczy właśnie że zależy mi na efekcie ubocznym. Tego formuły nie powinny robić. Ale wymyślić narzędzie interfejsu użytkownika, które usprawni tego typu działania -- jak najbardziej.

Co do mojego dalszego udziału w tej dyskusji,
EOT

Re: Wklej specjalnie

: śr paź 04, 2017 4:43 pm
autor: MarkOpen
Przepraszam, Janie_J. Rzeczywiście z tym „pełnym nadzorem” przedobrzyłem.

Jermor doszukuje się irytacji, Ty, Janie_J – ironii.

Ale z Twojego stanowczego stwierdzenia: „Zresztą programiści projektu też nie będą skłonni ot tak przejmować pomysłów dot. nowych właściwości. Z różnych powodów.” jednoznacznie wynika, że dobrze znasz co najmniej 2 programistów tego projektu, ich nastawienie do nowinek i powody ich odrzucania. Chociaż, z drugiej strony, fragment zdania początkowego: „na forum o ile wiem nie ma żadnego programisty z zespołu OpenOffice ani LibreOffice” osłabia to wrażenie. Może dlatego dopatrzyłeś się ironii zrozumiawszy własną niekonsekwencję.

Z Twoimi pozostałymi tezami zgadzam się. Przemawia przez Ciebie doświadczenie.

Chociaż, nie rozumiem dlaczego wciąż wracasz do „efektu ubocznego” w sensie pejoratywnym.
Czy wyrzuca się odpady powstające przy obróbce diamentu? „Efekt uboczny” możne stać się źródłem nowego pomysłu, może innej funkcji, rozszerzeniem funkcji…

Słyszałem o specjalnych programach, które po spełnieniu określonego zadania same się unicestwiają i nie pozostaje po nich w komputerze żaden „efekt uboczny”. Ewentualnie jakiś śmieć do usunięcia CCleanerem, ale to byłaby obraza dla autora.

Dziękuję za pomoc i pozdrawiam.
PS. Ta moja wyobraźnia… Ale dzięki niej, po 20 latach stosowania przez starszych ode mnie projektantów tego samego algorytmu w aranżacjach pewnej francuskiej centrali telefonicznej, gdy przejąłem po nich schedę, spojrzałem – jak to młody – krytycznie i przewróciłem wszystko do góry nogami. Efekt? Dokumentacja ze 160 arkuszy A4 zmalała do 50. I kilka innych pozytywnych efektów ubocznych :).

Re: Wklej specjalnie

: śr paź 04, 2017 8:05 pm
autor: Jan_J
Efekt uboczny to precyzyjne pojęcie z informatyki: sprawdź -- wpis w Wikipedii nie jest bardzo ścisły, ale mniej więcej wyjaśnia o co chodzi.

Re: Wklej specjalnie

: pt paź 06, 2017 9:30 pm
autor: belstar
No i stało się, cała moja dotychczasowa wiedza o tym co mogą a czego nie mogą funkcje (użytkownika) arkuszowe legła w gruzach. Miało być że modyfikacja innych komórek z poziomu funkcji jest nie możliwa a okazuje się że jednak jest możliwa. Poczułem się jak astronom który odkrył planetę zbudowaną z materiału, która według aktualnej stanie wiedzy nie powinien być budulcem takowej.

Kod: Zaznacz cały

Function WKLEJ_SP(pSheetName, pCellName, desCellName)
	theDoc   = ThisComponent
	theSheet = theDoc.Sheets.GetByName(pSheetName)
	theCell  = theSheet.GetCellRangeByName(pCellName)
	DestCell = theSheet.GetCellRangeByName(desCellName)
	DestCell.Value = theCell.Value
End Function
W załączniku plik z przykładem takiego działania, a tu krótki opis.
W Komórce A1 wpisuje jakąś liczbę, w B1 pojawi się wynik przekopiowany za pomocą funkcji:

Kod: Zaznacz cały

=JEŻELI(A1>0;WKLEJ_SP("Arkusz1"; "A1"; "B1");"") 
znajdującej się w komórce B2, a co jeszcze ciekawe jeśli wstawię tą formułę w komórkę B1 to wartość z komórki A1 zostanie wstawiona w B1 a sama formuła zostanie z niej usunięta, choć trzeba zaznaczyć inną komórkę i zaznaczyć ją ponownie, coś z odświeżaniem ekranu. Funkcja JEŻELI() została użyta w celu wymuszenia przeliczania arkusza, bez niej nie przeliczało. Wątek z którego czerpałem wiedzę jest tu. Nazwa funkcji tylko prowizorycznie oddaje swoje działanie bo nie wiem o jakie wklej specjalnie chodzi, założyłem wklej tylko wartości.

Jakie jeszcze mogą być niepożądane efekty jej działania nie wiem, ale może ona stanowić punkt wyjścia po obudowaniu jej w jakieś warunki (funkcje arkuszowe) dla autora tematu. Sam jednak bym się obawiał jej wykorzystywać w zastosowaniach biznesowych, postawiłbym na makro wykorzystujące nasłuch komórki i po zmianie jej stanu podjął odpowiednie działania. Mój system to Ubuntu 16.04, wersja na której testowano: LO 5.1.6.2 z oryginalnych pakietów systemu, a jak na innych nie wiem.

Re: Wklej specjalnie

: pt paź 06, 2017 10:49 pm
autor: MarkOpen
Dziękuję belstar. Jesteś mistrzem, ja nadal laikiem, bo nie wiem gdzie to wpisać, jak utworzyć makro i jak dalej z tego korzystać :(.
Poszukam następnych źródeł wiedzy, które poprowadzą mnie za "rączkę" (łapsko).
Mam nadzieje, że gdy pokonam jedną przeszkodę, z kolejnymi pójdzie łatwiej.
Pozdrawiam i życzę sukcesów na niwie...

Re: Wklej specjalnie

: pt paź 06, 2017 10:51 pm
autor: Jan_J
Tak naprawdę zabezpieczenie w API nie jest szczelne; polega na tym, że argumenty przekazywane do funkcji nie są obiektami arkusza, tylko tablicami wartości. Za pomocą odwołań API, np. poprzez ThisComponent, da się dostać do wielu miejsc i modyfikować ich stan. Już dawno Anderas Säger aka @Villeroy pokazywał na forum anglojęzycznym openoffice'a, jak da się obejść zabezpieczenia.

Twoja funkcja tak naprawdę działa tylko poprzez zmianę stanu globalnego, ale nie generuje wyniku w sensie funkcyjnym. Nie znam specyfikacji StarBasica na tyle, żaby powiedzieć z pamięci, ale sądzę, że w takim przypadku wynikiem jest obiekt pusty (NULL).

Natomiast automatyczne przeliczanie obliczeń bierze się z analizy skierowanego grafu, którego krawędziami są zależności argument-wynik opisane formułami. Po zmianie czegokolwiek w arkuszu modyfikowana jest tylko "strefa zależności" od zmienionych komórek. To jest dobra zasada projektowa, i jest ona jeszcze jednym argumentem, żeby unikać działania poprzez efekty uboczne. Łatwo się sparzyć, i to zapewne w nieoczekiwanym momencie.