Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Obróbka arkuszy a makro w Notepad++

Wstęp

Musiałem ostatnio przerobić arkusz kalkulacyjny: tekst, który był w kilku sąsiadujących (w wierszu arkusza) wieloliniowych komórkach, trzeba było wkleić do wielu komórek (jedna linia tekstu = jedna komórka) w kilku kolumnach. Wpis ten jest pouczającą opowieścią o tym jak to zrobiłem. ;P

Rozwinięcie

Tekst był dodatkowo formatowany, więc aby szybko zgubić formatowanie, zapisałem arkusz jako plik .csv, który potem otworzyłem w Excelu (można było zacząć inaczej, ale z pewnych powodów, których nie będę opisywał, żeby nie zamotać, wybrałem taką drogę).
Z otwartego Excela kopiowałem sąsiednie komórki do wspaniałego narzędzia, jakim jest Notepad++.
Tamże pojawiał się ciąg znaków takiej postaci:"Pierwsza linia pierwszej komórki. Druga linia pierwszej komórki." "Pierwsza linia drugiej komórki. Druga linia drugiej komórki."przy czym, czego nie widać, pomiędzy cudzysłowami jest nie spacja, a tabulator.
I właśnie cudzysłowy i tabulator powodują, że ciąg znaków tej postaci wklejony do Excela kończy jako dwie sąsiednie wieloliniowe komórki. Aby dostać cztery komórki jednoliniowe, trzeba te zbędne znaki skasować. Oczywiście mogę to zrobić przez opcję "Zamień wszystkie", osobno dla cudzysłowów, osobno dla tabulatora. Mogę też to zrobić ręcznie, po kolei najeżdżając kursorem i naciskając Backspace/Delete. Ale to za proste i za szybkie. Bardziej zawodowo było przecież nauczyć się robić stosowne makra w edytorze. A że zajęło mi to dużo więcej czasu? No cóż, coś za coś. :) Następnym razem pójdzie szybciej.

Makra

Już wcześniej wiedziałem (z autopsji), że jak nagrywa się makro w Notepad++, to akcje wykonywane w oknie Znajdź/Zamień się nie nagrają. Trzeba więc inaczej. Wcześniej jakoś zabrakło mi determinacji i nie znalazłem rozwiązania, tym razem jednak dokładniej przewertowałem internet i już wiem jak zmusić Notepad++ poprzez makro do znajdowania i podmiany. Ku mojemu zaskoczeniu, rozwiązanie jest jednak opisane w dokumentacji programu - tyle, że w dziwnym miejscu, bo w opisie edycji plików konfiguracyjnych. Drugie zaskoczenie (wynikało ono może z tego, co wyczytałem wcześniej na temat edycji makr w sieci, a co nie nastawiało pozytywnie) było takie, że tak zakodowane wyszukiwanie umie tyle samo, co wyszukiwanie za pomocą okna dialogowego w programie.

Do rzeczy

Kod makra wygląda tak:<Macro name="CSV" Ctrl="yes" Alt="yes" Shift="yes" Key="49"> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam='&quot;' /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> <Action type="3" message="1700" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1601" wParam="0" lParam="0" sParam="&#x0009;" /> <Action type="3" message="1625" wParam="0" lParam="0" sParam="" /> <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x000A;&#x000A;" /> <Action type="3" message="1702" wParam="0" lParam="768" sParam="" /> <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" /> </Macro>trzeba je sobie wkleić, przy wyłączonym (!!!) Notepad++ pomiędzy parę <macros> i </macros> w pliku C:\Documents and Settings\[login]\Dane aplikacji\Notepad++\shortcuts.xml (zakładam zwykłą instalację, bez zmiany folderów). Pierwsza linia to nazwa i skrót klawiszowy do makra - można je potem zmienić klikając w interfejsie edytora.

Co to robi? Kasuje (zamienia na pusty ciąg) cudzysłowy (&quot;) i zamienia tabulator (&#x0009;) na dwa końce linii (&#x000A;), przy czym końce linii to same "line feed", bez "carriage return", specjalnie. Wynika to z tego, że jakbym kiedyś potrzebował działać w drugą stronę (czyli wklejać tekst wielolinowy do jednej komórki), to też to makro może się przydać. Jak się bowiem otoczy "goły" tekst cudzysłowem i skopiuje, to przy wklejaniu Excel potraktuje to jako treść jednej komórki. Znak "carriage return" jest wtedy wyświetlany jako taki kwadracik i trzeba się go jeszcze osobno pozbyć, co jest męczące.
Minus makra jest taki, że trzeba za każdym razem zatwierdzać komunikaty o tym ile zmian zostało dokonanych. No ale w tym przypadku jest to do przeżycia.

Zakończenie

Sporządzone makro daje mi niewielką oszczędność czasu, ale za to odblokowuje zagadnienie wyszukiwania i zamiany poprzez makro - w przyszłości może się przydać bardziej. A jeśli przyda się komuś z Czytelników, to jeszcze lepiej. 

windows oprogramowanie porady

Komentarze

0 nowych
molexor   7 #1 18.07.2011 11:45

Może nie potrzebnie wtrącę,ale myślę że mogłeś to prosto zrobić w Excelu. Jak nie formułami i opcjami (po złączeniu dane-> tekst jako kolumny ) to makrem

Jaahquubel_   13 #2 18.07.2011 13:04

Pewnie tak, ale łatwiej mi było douczyć się czegoś w Notepadzie ++, niż uczyć się od zera makr w Excelu. Do nauki zupełnie nowych rzeczy już jakoś nie mam zacięcia. Chyba się starzeję. :P

iluzion   5 #3 18.07.2011 17:25

Można i tak;) Mimo wszystko VBA jest lepsze do takich rzeczy. Chyba nie ma takiej rzeczy w Excelu, której się nie da zrobić przy pomocy VBA.

Co ciekawe większość osób znających Excela słyszała o makrach, a mało kto wie czym jest Visual Basic for Applications. Nagrywanie makr ma tę zaletę, że nie trzeba umieć programować, aby zautomatyzować pewne czynności. Z drugiej strony rejestrator makr generuje zwykle brzydki kod, który na dodatek nie zawsze działa (lub nie działa wcale, np. w nowszej wersji pakietu Office). Do wykonania pewnych zaawansowanych czynności "tu i teraz" zwykle warto zastosować podejście hybrydowe. Wygenerować sobie fragment kodu i zmodyfikować tak aby działał tak jak chcemy.

NRN   9 #4 18.07.2011 21:27

"Achievement unlocked. You may now play "seek & hide" with notepad++."

W sumie w Excelu można to było zrobić bez korzystania z makr, tak jak wspomniał o tym molexor. Jest jeszcze opcja, żeby skopiować i wkleić dane z powrotem, z odpowiednimi opcjami importu. Niemniej jednak, zawsze warto się czegoś nowego nauczyć ;)

Jaahquubel_   13 #5 19.07.2011 09:28

W gruncie rzeczy zrobienie tego w samym Excelu byłoby dla mnie niewygodne, bo tekst musiałem jeszcze przeredagować, a robienie tego w arkuszu kalkulacyjnym grozi śmiercią lub trwałym kalectwem.
Istotą tego wpisu są makra w Notepad++.