携帯のアドレス帳をOperaにインポート

携帯のメールをPCから見ることができると、ちょっと幸せになれる。
メールの着信があったが、自分はPCの前で何かしている。携帯はすぐそばにないが、ちょっとメールをチェックしたい。*1
ってことが多々あるからだ。


AUの携帯を使っているのだが、PCとの連携ができるau one メールというサービスがある。
GMailがベースとなっていて、使い勝手は良好。
携帯のアドレスをau one メールにインポートすることもできる。(au one アドレス帳を経由しなければならないが)


ここで、いつも使っているOperaau one メールを受信するときに、名前が表示されないのは不便だ。
誰からのメールだか分からない。
で、アドレスをインポートしようとしたのだが、困ってしまった。
GMailからはCSVVCardでエクスポートできる。が、Operaは何故かadrとかいう形式でしかインポートできないようだ。
とりあえずGMailからOutLook形式のCSVで吐いておく。
CSVADRへの変換方法を検索したが、Webサービスで変換するものしか見あたらなかった。
う〜ん…Webサービスはダメだろう…*2


試しにOperaからアドレス帳をエクスポートしてエディタで開いてみると、
そんなに難しい書式ではなさそうなのでスクリプトで処理することにした。
CSVといえばexcelだが、自宅PCはOOoだ。Calcでもマクロが使えるらしいので、挑戦してみた。
VBAとの差に戸惑う。とりあえずカラムの位置とかはハードコーディング。

' OutLook形式CSV→M2のADR
Sub CSV2ADR
    dim csvRow as integer: csvRow = 1
    dim adrRow as integer: adrRow = 0

    set oCSVSheet = ThisComponent.Sheets.getByName("CSV")
    set oADRSheet = ThisComponent.Sheets.getByName("ADR")

    ' 件数分ループ。使い捨てなのでハードコーディング(^^;
    for csvRow = 1 to 68

        ' VBAでのセル指定はrow, columnの順だが、OOoのマクロでは逆!
        oADRSheet.getCellByPosition(0, adrRow).String = "#CONTACT"
        adrRow = adrRow + 1

        ' 名前はLast Name列 + First Name列
        strName = oCSVSheet.getCellByPosition(2, csvRow).String & oCSVSheet.getCellByPosition(0, csvRow).String
        ' ななしのごんべ対策
        if (Len(strName) > 0) then
            oADRSheet.getCellByPosition(1, adrRow).String = "NAME=" & strName
        else
            oADRSheet.getCellByPosition(1, adrRow).String = "NAME=" & oCSVSheet.getCellByPosition(14, csvRow).String
        end if
        adrRow = adrRow + 1

        ' メールアドレスはE-mail Address列とE-mail2 Address列から取得。
        ' サブアドレスは、STX2つで区切るようだ。不思議な仕様だな〜。
        strSubMail = oCSVSheet.getCellByPosition(15, csvRow).String
        if  (Len(strSubMail) > 0)then
            oADRSheet.getCellByPosition(1, adrRow).String = "MAIL=" & oCSVSheet.getCellByPosition(14, csvRow).String & Chr(2) & Chr(2) & strSubMail
        else
            oADRSheet.getCellByPosition(1, adrRow).String = "MAIL=" & oCSVSheet.getCellByPosition(14, csvRow).String
        end if
        adrRow = adrRow + 1

        ' PHONEはMobile Phone列を設定。今回はHome Phoneは捨てる。
        oADRSheet.getCellByPosition(1, adrRow).String = "PHONE=" & oCSVSheet.getCellByPosition(20, csvRow).String
        adrRow = adrRow + 1

        ' DESCRIPTIONにはNotes列を当てる。
        ' 携帯から移行したデータには読み仮名がもれなくついてくる。
        oADRSheet.getCellByPosition(1, adrRow).String = "DESCRIPTION=" & oCSVSheet.getCellByPosition(13, csvRow).String
        adrRow = adrRow + 1
 
        ' アイコンを指定しなくてもインポートできるが、ちょっと悲しいことになる。
        oADRSheet.getCellByPosition(1, adrRow).String = "ICON=Contact0"
        adrRow = adrRow + 2
    next
End Sub

これで生成したシートのデータをコピーして、先頭に以下のように追記*3UTF-8で保存してやればOK。

Opera Hotlist version 2.0
Options: encoding = utf8, version=3

*1:いつも手元に置いとけばいいだけな気もするが

*2:アドレス帳をWebサービスへアップロードする奴の気がしれない。が、結局GMail使ってちゃ一緒か。でもなんか抵抗あるなぁ…

*3:ここの文言はOperaのバージョンによって変わるのだろうか?