Kopia danych z kilkunastu plików do jednego zbiorczego

Użytkowanie arkusza kalkulacyjnego
joski
Posty: 2
Rejestracja: pt lis 16, 2018 9:59 am

Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: joski »

Witam serdecznie,
bardzo prosiłbym o pomoc. Mianowicie mam około 400 plików calc gdzie w jednym arkuszu mam dane klienta: dane os,nr telefonu,maila. Jakim sposobem wszystkie te dane skopiować do jednego pliku? Oczywiście chodzi mi o jakąś szybką metodę, a nie mozolne otwieranie każdego pliku z osobna. Będę wdzięczny za pomoc.
OpenOffice 3.1 na Windows Vista
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: Jan_J »

Makro w Calcu albo krótki programik w języku wyposażonym w bibliotekę czytającą skoroszyty ods.
Wg schematu
załóż plik wynikowy;
dla każdego z plików z danymi {
otwórz go;
skopiuj to co trzeba w odpowiednie miejsce pliku wynikowego;
zamknij go;
}
zapisz i zamknij plik wynikowy.

Pisanie kodu na ogół jest ciekawsze niż klikanie; ja bym się w to bawił nawet gdyby narzędzie miało być użyte tylko raz. Mogę pomóc (zapewne nie tylko ja). Ale...

...iIe jest tych plików: 400 (jak w poście) czy kilkunastu (jak w tytule)?
Różnica niby żadna, ale jeżeli plików jest mało, może się okazać, że kilkanaście operacji Ctr+C/Ctrl+V potrwa krócej niż napisanie, przetestowanie i uruchomienie programu.

Napisanie prostej wersji takiego programu zajmie od 2 godzin do 1 dnia pracy.
Uruchomienie w celu transferu danych, to zależy, ale myślę że łączny czas będzie podobny.

Nie warto podawać kodu póki nie są znane szczegóły, co, skąd, w jakiej kolejności kopiować, z ilu stron, a także dokąd: na jeden arkusz czy osobne.
W rodzaju: dane są tylko w pierwszym arkuszu, w kolumnach od A do C.

Problemy mogą wystąpić, jeżeli dane były zapisywane w sposób chaotyczny, raz tak, a raz siak. Wtedy samo zgromadzenie wszystkiego w jednym miejscu to dopiero początek poważniejszej pracy nad ujednoliceniem formatu. Ale to już zmartwienie właściciela danych.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
joski
Posty: 2
Rejestracja: pt lis 16, 2018 9:59 am

Re: Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: joski »

Dzięki za odzew. Chętnie pobawię się w marco tylko jestem trochę zielony jak trawa na wiosnę. Przechodzą do sedna... na chwilę obecną mam do skopiowania 1650 plików do jednego pliku. Wszystkie mają taki sam układ jak w załączniku. Chciałbym aby w docelowym pliku kolumna A było to imie, kolumna B nazwisko, C miejsowość itd.

Odchodząc od tematu czy da się zrobić coś takiego, że calc będzie mi przypominał o kontakcie z klientem. np ustawiam że mam się z nim skontaktować 25.11 i calc mi wyskakuje tego dnia z informacją, że mam się skontaktować z klientem?
Załączniki
Dane klienta_1.ods
(10.78 KiB) Pobrany 122 razy
OpenOffice 3.1 na Windows Vista
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: Jan_J »

Jeżeli liczba plików idzie w tysiące, to automatyzacja jest wskazana.

Ad alarm: da się. Warto wykorzystać warunek
=<data w komórce> = dziś() i oprzeć na nim np. formatowanie warunkowe.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: Jermor »

Zabiorę głos w sprawie przypominania o kontaktach. Jak zrozumiałem każdy plik zawiera jedną strukturę danych pokazanych w załączniku. To oznacza, że należy się spodziewać ponad 1600 kontaktów umieszczonych w jednym arkuszu. W tej sytuacji samo wyróżnienie kontaktów na dzień bieżący jest o tyle kłopotliwe, że wymaga przewijania całej bazy aby odnaleźć te wyróżnione.
Proponuję rozwiązanie wykorzystujące filtr zaawansowany.
Baza będzie uzupełniona o dodatkową kolumnę w której przy nazwiskach można umieścić datę planowanego kontaktu. Filtr zaawansowany pozwoli ukryć wiersze, które mają terminy inne niż wymagany.
Zrobiłem mały przykład takiego pliku. Pokazuje on liczbę zaplanowanych kontaktów na dzień bieżący oraz liczbę kontaktów "przeterminowanych" czyli takich, których data jest wcześniejsza a nie została skasowana. Dodałem także dwa makra. Jedno zastępuje wykonanie polecenia "Dane --> Więcej filtrów --> Filtr zaawansowany --> wskazanie obszaru kryteriów..." a drugie "Dane --> Więcej filtrów --> Wyczyść filtr".
W związku z tym aby uruchomić ich funkcjonowanie należy ustawić odpowiednie opcje bezpieczeństwa.
Załączniki
joski.lista.ods
(24.46 KiB) Pobrany 131 razy
AOO 4.1.15, LO 7.5.9 (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.
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: Jermor »

Sprawa kopiowania danych. Skoro
joski pisze:Chętnie pobawię się w marco tylko jestem trochę zielony jak trawa na wiosnę.
to słabo to widzę. Musisz raczej skorzystać z oferty Jana_J.
Istnieje jednak metoda skopiowania tych danych bez pracochłonnego otwierania plików, kopiowania i wklejania z transpozycją danych. Wymaga ona jednak znormalizowania wszystkich plików. Twoje zapewnienie, że wszystkie pliki mają taki sam układ jak w twoim załączniku wymaga sprawdzenia. Chodzi o to czy w każdym pliku dane zapisane są w arkuszu o nazwie Arkusz1, oraz czy układ wierszy jest dokładnie taki sam. To znaczy, że po pierwszych czterech wierszach jest wiersz pusty a po nim kolejne cztery wiersze, znowu wiersz pusty, jeden wiersz z danymi, wiersz pusty i cztery ostatnie wiersze z danymi.
Należy tu mimochodem zauważyć, że pierwsze pole danych zawiera imię i nazwisko i wcale nie łatwo jest wyodrębnić jedno od drugiego. Ktoś mógł wpisać najpierw nazwisko a potem imię, Może być osoba o podwójnym imieniu albo podwójnym nazwisku albo obu tych sytuacjach na raz i wówczas spacja nie określi właściwych członów. Dlatego najpierw przeniesione zostałoby całe to pole. Dopiero na wersji jednoarkuszowej można pomyśleć co dalej.
Mój pomysł oparty jest o wykorzystanie funkcji ADR.POŚR wykorzystującej adresy komórek w wybranych plikach.
Dla ułatwienia tego procesu pliki powinny zostać zgrupowane w jednym folderze a jeszcze lepiej gdyby miały sekwencyjne nazwy, np od 1.ods do 1650.ods, to akurat łatwo jest zrobić jakimś menadżerem plików.
Formalnie aby odwołać się do komórki w innym arkuszu formuła musi być wpisana w następującej postaci:

Kod: Zaznacz cały

='file:///dysk:/folder/folder/.../nazwa pliku.ods'#Arkusz1.B1
Załóżmy, że wszystkie pliki znajdują się na dysku C: w folderze Adresy. W kolumnie A umieszczam nazwy plików. w kolumnach od B do N buduję formuły"

Kod: Zaznacz cały

w B1 =ADR.POŚR("'file:///C:/Adresy"&A1&"'#Arkusz1.B1")
w C1 =ADR.POŚR("'file:///C:/Adresy"&A1&"'#Arkusz1.B2")
w D1 =ADR.POŚR("'file:///C:/Adresy"&A1&"'#Arkusz1.B3")
itd...
w N1 =ADR.POŚR("'file:///C:/Adresy"&A1&"'#Arkusz1.B17")
Teraz można skopiować te formuły do kolejnych wierszy. Ze względu na to, że plików jest bardzo dużo warto byłoby to działanie przeprowadzić partiami np. do wiersza setnego, a po utworzeniu partii skopiować cały taki obszar, np. B1:N99 i wkleić go na siebie samego już tylko jako dane. Wiersz 100 został z formułami aby je skopiować do następnych wierszy.
Jeśli plikom nadano by sekwencyjne nazwy, to łatwo byłoby utworzyć nazwy plików w kolumnie A. Jeśli z jakichś powodów nazwy plików powinny pozostać oryginalne, to można listę plików uzyskać w postaci pliku txt.
Opiszę jak to zrobić w Windows. Wywołać polecenie "Uruchom" i wpisać cmd.exe
Po otwarciu okna DOS wpisać polecenie

Kod: Zaznacz cały

dir "C:\Adresy\*.ods" > "C:\Adresy\adresy.txt"
W powyższym przykładzie odwołałem się do zaproponowanego powyżej położenia plików. Lista plików w postaci tekstowej znajdzie się w pliku o nazwie adresy.txt zapisanym w tym samym folderze co pliki oryginalne.
AOO 4.1.15, LO 7.5.9 (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.
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kopia danych z kilkunastu plików do jednego zbiorczego

Post autor: Jan_J »

// jak ja to lubię
// przekierowanie standardowych potoków jako narzędzie efektywnej pracy nie tylko informatyków
// imo każdy, kto na poważnie pracuje z danymi, powinien się z tą techniką zapoznać
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ