携帯のアドレス帳をOperaにインポート
携帯のメールをPCから見ることができると、ちょっと幸せになれる。
メールの着信があったが、自分はPCの前で何かしている。携帯はすぐそばにないが、ちょっとメールをチェックしたい。*1
ってことが多々あるからだ。
AUの携帯を使っているのだが、PCとの連携ができるau one メールというサービスがある。
GMailがベースとなっていて、使い勝手は良好。
携帯のアドレスをau one メールにインポートすることもできる。(au one アドレス帳を経由しなければならないが)
ここで、いつも使っているOperaでau one メールを受信するときに、名前が表示されないのは不便だ。
誰からのメールだか分からない。
で、アドレスをインポートしようとしたのだが、困ってしまった。
GMailからはCSVかVCardでエクスポートできる。が、Operaは何故かadrとかいう形式でしかインポートできないようだ。
とりあえずGMailからOutLook形式のCSVで吐いておく。
CSV→ADRへの変換方法を検索したが、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
これで生成したシートのデータをコピーして、先頭に以下のように追記*3・UTF-8で保存してやればOK。
Opera Hotlist version 2.0 Options: encoding = utf8, version=3