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に保存されたデータのみが対象となるので、同期されていないデータは保存できない点は要注意です。
この記事へのコメントはありません。