středa 30. května 2012

Převod poznámek (memo) z Palmu na Everonote

Co se tak člověku nabízí, když přechází z Palmu na nějakou novou platformu, třebas na Androida? Protože jsem to nedávno řešil (byť ne pro sebe), propátral jsem co se dalo a zatím mi vychází jako jediné schopné řešení Evernote (https://www.evernote.com/). Samozřejmě postupů může být více, vždyť se to neřeší málo viz palm task replacement na Google.

EVERNOTE mimo jiné zvládá klienty pro
  • Web (jediné co lze pro Linux)
  • Windows
  • iVěci Apple
  • Android
  • Blackberry
  • Twitter
  • posílání poznámek z emailu
 Pomocí aplikace Skitch lze ukládat i rukou psané poznámky. Nemá cenu se více rozepisovat, jednoduše po cca dvouletém používání jsem spokojeným uživatelem.

Jak do Evernote ale xakru dostat tu spoustu poznámek z Palmu?

Samozřejmě je tam lze opsat, ale pokud jich jsou desítky, či stovky (což se u letitých uživatelů Palmu dá předpokládat, neboť na svého miláčka nedopustili mnoho let a bez výměny zařízení ukládali a ukládali) je lepší to trochu zautomatizovat.

Následující postup, který jsem použil vycházel z potřeb uživatele majícího OS Windows. 

Potřebujeme
  • Palm Desktop sesynchronizovaný s Palmem
  • Evernote nainstalovaný ve Windows
  • MS Excel
  • SciTe Lite Editor (http://www.scintilla.org)
  • Skript ExceltoEvernote.au3 (přiložený na konci)
Stručný postup
  1. Vyexportujeme Memo z Palm Desktopu do csv
  2. Upravíme soubor tak, aby ve výsledné xls obsahovalo sloupce rozdělené dle titulků a obsahů poznámek, popřípadě další sloupec s kategorií (kategorii jsem v uvedeném příkladu nepoužil, poznámky byly všechny v Unfiled)
  3. Upravíme v SciTe Lite skript tak, aby odpovídal našemu xls a aby nevyhazoval chyby při kompilaci a buildu (viz Tools)
  4. Spustíme skript Tools - Go
  5. Pokud jsme připravili skript i xls dobře, v Evernote by měly být naše poznámky (na konci skriptu je MessageBox s informací o počtu importovaných poznámek
Na co jsem narazil
Základním problémem bylo upravit vstupní soubor tak, aby ho Excel dobře otevřel (však všichni víme, že oproti Calcu z OpenOffice je při otevírání csv poněkud hloupý, či nešikovný). Zvláště protože poznámky z Palmu byly víceřádkové byllo nutné upravit je tak, aby byly texty v jedné buňce Excelu. Snaha nahradit konce odstavců čímkoliv jiným narážela ve Wordu 2010 na to, že funkce hledat po vložení Znak odstavce tento znak nenajde a poté kdy jsem Wordem vloženou značku opravil ručně na starou ^p tyto znaky sice uměl najít ale nenahradil je. nakonec pomohl jeden ze dvou nejlepších editorů, které Microsoft udělal a sice WordPad (tím druhým je Notepad), který csv otevřel hloupěji, zcukl texty do jednoho řádku, což jsem ale potřeboval.
V csv jsem jednotlivé poznámky nechal oddělené enterem, titulek od textu oddělený středníkem, text v uvozovkách.

Co jsem ve skriptu upravoval / nastavoval
Původní skript byl či je ke stažení na http://markstout.blogspot.com, popis možností příkazové řádky Evernote je na http://dev.evernote.com/documentation/local/chapters/Windows.php
Poznámk: Šlo mi o co nejrychlejší úpravu a ne o optimalizaci původního skriptu.

Upravené a přidané řádky
27 - cesta k importovanému souboru
29 -  buňka excelu obsahující text poznámky
30 - přidané - buňka excelu obsahující titulek poznámky
32, 33 - rozsah zpracovávaného souboru excelu
36 - cesta k nainstalované aplikaci Evernote
42 - zakomentoval jsem název / titulek poznámky
45 - jak se má jmenovat notebook v Evernote
48 - tagy přidané k poznámkám
Do skriptu jsem přidal vložení titulku podle excel souboru
56,66 - proměnná $tit (veselejší by bylo množné číslo)
82,86 - zpracování obsahu buňky pro titulek
116 - naplnění titulku
126 - upravený příkaz s vloženým titulkem

Použitý skript (pozor na zalomené řádky)
#comments-start

    File:  Excel_to_Evernote.au3
    An Autoit3 script


    Purpose:  Convert data in Excel Spreadsheets to Evernote notes - One line of data becomes one note
    Created : July 31, 2009
    Updated : July 31. 2009
    First published at :  http://markstout.blogspot.com

    Provided  AS-IS - no warranties.  Use only on backed up data.  Use at your own risk.



#comments-end

; includes
#include
#include
#include


; Information about your spreadsheet

; your speadsheet file with path
$sFilePath         = "C:\users\Michal\Dokumenty\export_memo.xls"

$columns         = "B"     ; list of columns to put into note.  This is a comma separated list
$titles            = "A"    ; list of columns to put into note.  This is a comma separated list

$row_start         = 1            ; first row to move to a note
$row_end         = 155        ; last row to move to a note (will also stop on first blank record

; where is your Windows Evernote executable located?  The one below is the default installation location.
$pathToENScript    = "c:\users\michal\appdata\local\apps\evernote\evernote\"


; Information for the new notes created

; Specify the Title prefix.  The title of each note will be the prefix and then the value of the cell in the first column
; $ENTitle = "PalmMemo:" ; appends contents of column colName to this and makes title of note

; The notebook to put the new notes in
$ENNotebook = "Palm"        ; notebook where note is placed

; the tags to add to each new note. This is a comma separated list
$ENTags = "palm,memo"               ; tag(s) for note



; program execution starts here - there are no user setting to change below this


; initialize variables
Dim $cols,$tags,$tit,$tcol_value[4],$col_value[4]

$temp_file = _TempFile("","",".txt") ; name of temp file
$q = chr(34)
$done = 0
$exit = 0

; Convert comma separated lists to arrays
$cols = StringSplit($columns,",")
$tags = StringSplit($ENTags,",")
$tit = StringSplit($titles,",")


; Open Excel file
   Local $oExcel = _ExcelBookOpen($sFilePath)
  

 ; loop through the rows
 for $i = $row_start to $row_end
 
    ; loop through the columns to copy to notes
    for $j = 0 to $cols[0]
    
    
        ; get Cell coordinates (example C5)
        $row_col = $cols[$j] & $i
        $trow_col = $tit[$j] & $i
        
        ; get value of that cell
        $col_value[$j] = _ExcelReadCell($oExcel, $row_col)
        $tcol_value[$j] = _ExcelReadCell($oExcel, $trow_col)
 
        ; if cell is blank, exit loop - Part 1
        if $j=1 and $col_value[$j] = "" then
            $exit = 1
            exitloop
        endif
        
    next
    
    ; if cell is blank, exit loop - Part 2
    if $exit=1 then
        $exit=0
        exitloop
    endif
    
 
    ; open temp file
    $fh = FileOpen($temp_file,2)
    
    ; write to temp file

    
    for $j = 1 to $cols[0]
        FileWriteLine($fh,$col_value[$j] )
    next
    
    ;close temp file
    FileClose($fh)
    
    $ENTitle = $tcol_value[1]
    ;msgbox(0,"TEST",$ENTitle)
    
    ; convert array of tags to a string used in ENSCRIPT.exe command line
    $y = ""
    for $j = 1 to $tags[0]
        $y = $y & " /t " & $q & $tags[$j] & $q
    next
    
    ; assemble evernote command line
    $cmdLinex = " createNote /s " & $q & $temp_File & $q & " /n " & $q & $ENNotebook & $q & $y &  " /i " & $q & $ENTitle & $q
    
    ; $cl = $q & $pathToENScript & "ENScript.exe" & $q  & $cmdLinex
    ; ClipPut($cl)
    
    
    ; invoke ENSCRIPT.EXE
    $res = ShellExecuteWait ( $q & $pathToENScript & "ENScript.exe" & $q, $cmdLinex,"","open",@SW_HIDE)
        
    ; count number of times it is invoked
    $done = $done + 1
    
Next

    
    ; Close Excel Book
    _ExcelBookClose($oExcel)
    
    ; concluding Message
    $res_str = $done & " imports completed."
    
    msgbox(0,"Done",$res_str)