Wydobycie informacji z zagnieżdżonych komórek [SOLVED]

Użytkowanie arkusza kalkulacyjnego

Wydobycie informacji z zagnieżdżonych komórek [SOLVED]

Postprzez zak2828 » Wt mar 24, 2020 1:31 pm

Dzień dobry,
Obecnie w pliku np. w komórce B2, C2 i D2 "siedzą" dane, które są jakby zagnieżdżone.
Gdy chcę, żeby pojawiły się w wierszach używając formuły "Tekst jako kolumny" to uzupełnia mi w dół dane, ale nadpisuje mi komórki B3, C3 i D3.
Czy jest jakiś sposób, żeby wydobyć te dane nie nadpisując innych informacji?
Dla przykładu dałem plik z dwoma wierszami danych, ale docelowo mam około 4000 takich wierszy.
Z góry dziękuję za pomoc.
Załączniki
przykład.ods
(16.99 KiB) Pobrane 4 razy
Ostatnio edytowano Pt mar 27, 2020 11:24 am przez zak2828, łącznie edytowano 1 raz
OpenOffice 4.1.2 na Windows 10
zak2828
 
Posty: 5
Dołączył(a): So cze 03, 2017 5:44 pm

Re: Wydobycie informacji z zagnieżdżonych komórek

Postprzez Jan_J » Wt mar 24, 2020 3:09 pm

W helpie opis operacji „tekst jako kolumny” dotyczy sytuacji przekształcania pojedynczego wpisu o złożonej strukturze na wiersz/rekord obszaru komórek. Ani słowa o tym, że jeścli separatorem jest Enter, to transformacja powoduje powstawianie nowych wierszy. Z tego punktu widzenia jest to zachowanie nieudokumentowane; a czy przewidziane – sądzę że tak. Ale tylko sądzę.

W każdym razie

* jeżeli chcesz stworzyć nowe kolumny zamiast nowych wierszy, to w zaznaczonej kolumnie/kolumnach/obszarze wykonaj Znajdź i Zamień: \n (czyli koniec wiersza) na ; (jakiś sensowny separator – ważne żeby być to znak nie występujący w Twoich danych). Potem „Tekst na kolumny” podzieli Twoje dane rozszerzając je poziomo.

* możesz też zaznaczyć pojedynczą kolumnę jak jest, z Enterami w komórkach, i wykonać na niej „Tekst jako kolumny”. Wtedy zwiększy się liczba wierszy, ale nie zauważyłem, by któreś dane zostały nadpisane. Nie wiem co się stanie jeśli tym sposobem przekroczysz maksymalną dopuszczalną liczbę wierszy (10^20, jest to całkiem sporo). Ale to prawdopodobnie jest to, co próbowałeś robić.
JJ
LO 6.2 ∙ AOO 4.1.7 ∙ Python (3.8|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 4096
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wydobycie informacji z zagnieżdżonych komórek

Postprzez Jermor » Wt mar 24, 2020 4:52 pm

Jan_J ma rację. Fakt użycia kodu ENTER jako separatora nie jest opisany. Ale zastosowane rozwiązanie jest sensowne, działa bowiem tak, jak wstawianie tekstu z zewnętrznego źródła. W tych sytuacjach znak ENTER jest traktowany jak koniec rekordu. Nadpisywanie, o którym piszesz następuje tylko wówczas gdy przekształcasz tylko jedną komórkę.
Jeśli zależy ci na przekształceniu tej tabelki w rekordy danych, to sposób podany przez @Jan_J jest bardzo dobry. Jedynym problemem będzie pierwsza kolumna, gdyż ona zawiera kod dla całej grupy oznaczeń w komórkach kolumn B, C i D.
Jeżeli twój skromny opis tych danych dotyczy wszystkich zapisów, to oznaczałoby, że każda grupa danych składa się z 17 wierszy, które zostaną podzielone na poszczególne rekordy. Wówczas po przekształceniu zawartości kolumn B, C i D w pojedyncze rekordy, dodaj nową kolumnę A, do której w komórce A2 wpisz formułę:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=PRZESUNIĘCIE($B$1;ZAOKR.GÓRA((WIERSZ()-1)/17;0);0)

i skopiuj ja do końca. W ten sposób powielisz kod znajdujący się w kolumnie B do odpowiadających wartości. Potem zamień wyniki na wartości i usuń kolumnę B. No ale to zadziała tylko wtedy, gdy każda komórka zawiera 17 "zagnieżdżonych" danych.
AOO 4.1.7, LO 6.3.4 (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 ktoś podał rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1023
Dołączył(a): So paź 12, 2013 11:09 am

Re: Wydobycie informacji z zagnieżdżonych komórek

Postprzez zak2828 » Śr mar 25, 2020 12:02 pm

Faktycznie "tekst jako kolumny" zadziałał, wmówiłem sobie, że nadpisuje dane ta funkcja, a one jedynie je przesuwa. Także dziękuję za potwierdzenie :)
Pojawił się jednak inny problem. Zagnieżdżone komórki posiadają różna liczbę wierszy w sobie, raz 17, raz 4, a raz 2, itp.
Udało mi się doprowadzić do sytuacji, że mam plik z pewnymi danymi, ale rozłożone w kolumnach.
Czy jest jakiś sposób, żeby zadziałało coś na takiej zasadzie:
Do kolumny T z pliku przykład2 wpisuj dane z każdych kolejnych wierszy między kolumnami A a R, jeżeli te kolumny są niepuste.
Chce doprowadzić do sytuacji, że każdy wiersz ma się skopiować z transponowaniem do kolumny T, ale nie wchodzi w grę robienie tego ręcznie dla każdego wiersza.
Z góry dziękuję za pomoc.
Załączniki
przykład2.ods
(55.56 KiB) Pobrane 4 razy
OpenOffice 4.1.2 na Windows 10
zak2828
 
Posty: 5
Dołączył(a): So cze 03, 2017 5:44 pm

Re: Wydobycie informacji z zagnieżdżonych komórek

Postprzez Jan_J » Śr mar 25, 2020 12:30 pm

Szkoda zachodu na formuły. Są rzeczy, któwe łatwiej wykonać w pliku txt/csv niż w arkuszu.

Ja bym zrobił kopiuj region / wkleił do dobrego edytora nieformatującego (dla użytkowników windows polecam Notepad++), tam zamienił* tabulatory (\t) na entery (\n), skopiował całość i wkleił jako niesformatowany tekst do kolumny w Calcu.

[*] włącz wyrażenia regularne podczas zamiany. Wcześniej może zajść potrzeba usunięcia pustych wpisów. Zrobisz to zamieniając ciągi tabulatorów na tabulator \t+ na \t, a potem ew. usuwając tabulatory stojące na końcu wiersza: \t$ na pusty tekst.

Chyba że ta obróbka musi być przeprowadzana regularnie, np. co tydzień. Wtedy warto się zastanowić nad automatem.
JJ
LO 6.2 ∙ AOO 4.1.7 ∙ Python (3.8|2.7) ∙ Unicode 12 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Fedora|CentOS|SUSE)
Jan_J
 
Posty: 4096
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wydobycie informacji z zagnieżdżonych komórek

Postprzez Jermor » Cz mar 26, 2020 8:32 am

Kluczowym jest pytanie zadane przez @Jan_J, czy cała ta akcja ma charakter jednorazowy i jej celem jest uzyskanie układu tych danych w postaci rekordów bazy. Jeśli tak jest, to przedstawię rozwiązanie z wykorzystaniem formuł.
@zak2828 uściślił, że w poszczególnych wierszach tej tabeli będą różne ilości "zagnieżdżonych" wartości. Zakładam, że będą one jednakowe w obrębie jednego wiersza.
Potrzebne będą dwie dodatkowe kolumny. Dla przedstawionego przykładu problemem jest jedynie kolumna A, która zawiera pojedyncze wpisy.
Wstawiłem dwie nowe kolumny, przez co oryginalne dane przesunęły się w prawo.
Do komórki A2, w tej nowej kolumnie wstawiłem formułę macierzową:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=MAKS(DŁ(D2:F2)-DŁ(PODSTAW(D2:F2;ZNAK(10);"")))

Wylicza ona ile maksymalnie znaków ENTER zostało wstawionych w komórkach od D2 do F2. Funkcja MAKS została użyta po to, aby uzyskać wynik w jednej komórce.
Do komórki B2 wstawiłem taką formułę:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=C2&POWT(ZNAK(10)&C2;A2)

Tworzy ona odpowiednia ilość powtórzonych wartości.
Formułę z komórki A2, ze względu na to, że jest to formuła macierzowa, należy skopiować do kolejnych komórek w dół metodą "Skopiuj i wklej". Formułę z komórki B2 można skopiować także metoda przeciągania.
Teraz należy skopiować komórki B2:B4000 i wkleić je już jako wartości na siebie same. Po tej operacji można usunąć kolumnę C (zawierającą po jednej wartości) oraz kolumnę A. Otrzymane kolumny przekształcić w kolumny. W przypadku kolumny B zawierającej naprzemiennie liczby i teksty warto podczas przekształcenia wymusić przekształcenie na teksty.
W załączeniu przykład z wprowadzonymi już formułami.
Załączniki
zak2828 przykład.ods
(13.59 KiB) Pobrane 4 razy
AOO 4.1.7, LO 6.3.4 (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 ktoś podał rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1023
Dołączył(a): So paź 12, 2013 11:09 am

Re: Wydobycie informacji z zagnieżdżonych komórek [SOLVED]

Postprzez zak2828 » Pt mar 27, 2020 11:25 am

Dziękuję Jermor, te rozwiązanie bardzo mi pomogło.
Pozdrawiam
OpenOffice 4.1.2 na Windows 10
zak2828
 
Posty: 5
Dołączył(a): So cze 03, 2017 5:44 pm

Re: Wydobycie informacji z zagnieżdżonych komórek [SOLVED]

Postprzez Jermor » Pt mar 27, 2020 11:41 am

Ciesze się, że pomogło. Uzupełnię tylko, że użycie formuły macierzowej nie było konieczne. Zastosowałem ją aby znaleźć ilość najwięcej postawionych znaków ENTER w wierszu. Zastanawiałem się wówczas nad ewentualnym znormalizowaniem wszystkich komórek w wierszu, w taki sposób aby miały tyle samo "linijek". Jednak gdy w wierszu we wszystkich komórkach jest tyle samo "linijek", to taka formuła jest zbędna i można ją zastąpić formułą tradycyjną:
Kod: Zaznacz cały   Rozszerz widokZwiń widok
=DŁ(D2)-DŁ(PODSTAW(D2;ZNAK(10);""))
AOO 4.1.7, LO 6.3.4 (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 ktoś podał rozwiązanie.
Avatar użytkownika
Jermor
 
Posty: 1023
Dołączył(a): So paź 12, 2013 11:09 am

Re: Wydobycie informacji z zagnieżdżonych komórek [SOLVED]

Postprzez zak2828 » So mar 28, 2020 3:14 pm

Liczba "zagnieżdżonych" wierszy w danym wierszu niestety nie zawsze jest taka sama, zależy od kolumny, i dlatego potrzebowałem rozbite te wszystkie dane na wiersze, żeby widzieć, jakie id, przy jakim size_id ma puste code_producer i code_external.

Na pewno jednak kolumna "/sizes/size@id" determinuje ile wierszy powinno być we wszystkich.

Czyli nawet jeśli w kolumnach innych niż size_id jest mniej zagnieżdżonych wierszy to i tak powinno n-wierszy z id, n-wierszy z code_producer i n-wierszy z code_external. Nawet jeśli te wiersze będą puste, gdzie n to liczba zagnieżdżonych wierszy size_id

Czyli chciałbym uzyskać taki podział wierszy i kolumn.
21 U [puste] LSO117
21 X 425611111111 [puste]
21 Y 425677333333 LSO117.6

Wtedy widzę, jaką konkretnie rzecz muszę poprawić w pewnej bazie.

Tak czy siak poprzedni sposób znacząco mi pomógł, także jeszcze raz dziękuję.
OpenOffice 4.1.2 na Windows 10
zak2828
 
Posty: 5
Dołączył(a): So cze 03, 2017 5:44 pm


Powrót do Calc

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 11 gości