Blog (76)
Komentarze (1.5k)
Recenzje (3)
@Jaahquubel_Obróbka arkuszy a makro w Notepad++

Obróbka arkuszy a makro w Notepad++

18.07.2011 11:26, aktualizacja: 11.12.2011 00:42

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 (") i zamienia tabulator ( ) na dwa końce linii ( ), 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.

Wybrane dla Ciebie
Komentarze (5)