Evernote for WindowsのType Library(Evernote API (enapi) 1.0 Type Library(C:\Program Files\Evernote\Evernote\enapi.dll))を利用した、Evernoteのノートを列挙するスクリプトを何年か前に書いたのですが、今回はノートをXML形式で保存(エクスポート)するマクロを紹介します。
Option Explicit
Public Sub Sample()
'Evernoteのノートを保存
ExportEvernoteNote "(ユーザー名)", _
"(パスワード)", _
"(ノートブック名)", _
"(保存先フォルダのパス)"
'Evernoteのノートブックを保存
ExportEvernoteNoteBook "(ユーザー名)", _
"(パスワード)", _
"(ノートブック名)", _
"(保存先フォルダのパス)"
End Sub
Private Sub ExportEvernoteNote(ByVal Username As String, _
ByVal Password As String, _
ByVal NotebookName As String, _
ByVal FolderPath As String)
'指定したノートブック内のノートをXML形式で保存
' - Username:Evernoteのユーザー名
' - Password:Evernoteのパスワード
' - NotebookName:Evernoteのノートブック名
' - FolderPath:保存先フォルダのパス
Dim en As Object 'enapiLib.Evernote
Dim nb As Object 'enapiLib.Notebook
Dim n As Object 'enapiLib.Note
Dim ff As Integer
If Right(FolderPath, 1) <> ChrW(&H5C) Then _
FolderPath = FolderPath & ChrW(&H5C)
If CreateObject("Scripting.FileSystemObject").FolderExists(FolderPath) = False Then
MsgBox "保存先フォルダが見つかりませんでした。" & vbCrLf & _
"処理を中止します。", vbCritical + vbSystemModal
Exit Sub
End If
On Error Resume Next
Set en = CreateObject("enapi.Evernote")
en.Login Username, Password, vbNullString
If Err.Number <> 0 Then
MsgBox "Evernote for Windowsがインストールされているか、" & vbCrLf & _
"またはユーザー名とパスワードが合っているか確認してください。", vbCritical + vbSystemModal
Exit Sub
End If
On Error GoTo 0
Set nb = GetNotebook(en, NotebookName)
If nb Is Nothing Then
MsgBox "指定したノートブックが見つかりませんでした。" & vbCrLf & _
"処理を中止します。", vbCritical + vbSystemModal
Exit Sub
End If
'Noteごとに出力
For Each n In nb.Notes
ff = FreeFile
Open FolderPath & n.Title & "(" & n.ID & ").xml" For Binary As #ff
Put #ff, , n.Export
Close #ff
Next
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub
Private Sub ExportEvernoteNoteBook(ByVal Username As String, _
ByVal Password As String, _
ByVal NotebookName As String, _
ByVal FolderPath As String)
'指定したノートブックをXML形式で保存
' - Username:Evernoteのユーザー名
' - Password:Evernoteのパスワード
' - NotebookName:Evernoteのノートブック名
' - FolderPath:保存先フォルダのパス
Dim en As Object 'enapiLib.Evernote
Dim nb As Object 'enapiLib.Notebook
Dim ff As Integer
If Right(FolderPath, 1) <> ChrW(&H5C) Then _
FolderPath = FolderPath & ChrW(&H5C)
If CreateObject("Scripting.FileSystemObject").FolderExists(FolderPath) = False Then
MsgBox "保存先フォルダが見つかりませんでした。" & vbCrLf & _
"処理を中止します。", vbCritical + vbSystemModal
Exit Sub
End If
On Error Resume Next
Set en = CreateObject("enapi.Evernote")
en.Login Username, Password, vbNullString
If Err.Number <> 0 Then
MsgBox "Evernote for Windowsがインストールされているか、" & vbCrLf & _
"またはユーザー名とパスワードが合っているか確認してください。", vbCritical + vbSystemModal
Exit Sub
End If
On Error GoTo 0
Set nb = GetNotebook(en, NotebookName)
If nb Is Nothing Then
MsgBox "指定したノートブックが見つかりませんでした。" & vbCrLf & _
"処理を中止します。", vbCritical + vbSystemModal
Exit Sub
End If
'Notebook単位で出力
ff = FreeFile
Open FolderPath & nb.Name & "(" & nb.ID & ").xml" For Binary As #ff
Put #ff, , nb.Export
Close #ff
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
End Sub
Private Function GetNotebook(ByRef EvernoteApp As Object, _
ByVal NotebookName As String) As Object
'名前を指定してNotebookオブジェクトを取得
Dim nb As Object 'enapiLib.Notebook
Dim ret As Object
Set ret = Nothing '初期化
For Each nb In EvernoteApp.Notebooks
If nb.Name = NotebookName Then
Set ret = nb
Exit For
End If
Next
Set GetNotebook = ret
End Function
ExportEvernoteNoteプロシージャはノート単位、ExportEvernoteNoteBookプロシージャはノートブック単位で保存します。
VBAやスクリプトでノートの保存ができるのはとても便利なのですが、あくまでもWindows版クライアントを利用しているので、Evernote for Windowsが必要である点と、PCに保存されたデータのみが対象となるので、同期されていないデータは保存できない点は要注意です。

















この記事へのコメントはありません。