前回の記事で、VBAからEvernote Cloud SDKを使ってノートブック名を列挙するマクロを紹介しましたが、今回は指定した文字列が含まれるノートを検索するマクロを紹介します。
SDKのインストールやDeveloper Tokenの取得方法は下記記事をご参照ください。
※ 下記コード中の「Developer Token」と「NoteStore URL」はそれぞれ自分で取得したものに置き換えてください。
Option Explicit Public Sub Sample() Dim en As Object 'EvernoteSDK.ENSessionForCOM Dim enSearch As Object 'EvernoteSDK.ENNoteSearchForCOM Dim enNotesList As Object 'EvernoteSDK.ENCollection Dim enRef As Object 'EvernoteSDK.ENNoteRef Dim enNote As Object 'EvernoteSDK.EdamNote Dim txtFind As String Dim txtContent As String Dim i As Long Const SearchScope_All = 7 'EvernoteSDK.SearchScope.SearchScope_All Const SortOrder_RecentlyUpdated = 4 'EvernoteSDK.SortOrder.SortOrder_RecentlyUpdated Const DeveloperToken As String = "(Developer Token)" Const NoteStoreUrl As String = "(NoteStore URL)" Const MaxResults As Long = 100 '結果の最大件数 txtFind = "セキュリティ" '検索する文字列 Set en = CreateObject("EvernoteSDK.ENSessionForCOM") With en .SetSharedSessionDeveloperToken DeveloperToken, NoteStoreUrl If .sharedSession.IsAuthenticated = False Then Exit Sub Set enSearch = CreateObject("EvernoteSDK.ENNoteSearchForCOM") Set enNotesList = .sharedSession.FindNotesForCOM( _ enSearch.NoteSearch(txtFind), _ Nothing, _ SearchScope_All, _ SortOrder_RecentlyUpdated, _ MaxResults) If enNotesList.Count > 0 Then With ActiveSheet .Cells(1, 1).Value = "Note Title" .Cells(1, 2).Value = "Notebook" .Cells(1, 3).Value = "Date Created" .Cells(1, 4).Value = "Date Updated" .Cells(1, 5).Value = "TextContent" .Rows(1).Font.Bold = True For i = 1 To enNotesList.Count Set enRef = enNotesList(i).NoteRef Set enNote = en.sharedSession.DownloadNote(enRef) txtContent = enNote.TextContent If Len(txtContent) >= 100 Then txtContent = Left(txtContent, 100) '長い本文は一部のみ表示 .Cells(i + 1, 1).Value = enNotesList(i).Title .Cells(i + 1, 2).Value = enNotesList(i).Notebook.Name .Cells(i + 1, 3).Value = enNotesList(i).Created .Cells(i + 1, 4).Value = enNotesList(i).Updated .Cells(i + 1, 5).Value = txtContent Next End With End If End With MsgBox "処理が終了しました。", vbInformation + vbSystemModal End Sub
上記マクロを実行すると、選択中のシートにノート名やノートブックのタイトル、本文の一部等が出力されます(途中SDKの仕様により、確認用のメッセージボックスが表示されます)。
上記マクロはGitHubにあったサンプルコードを元にしていますが、サンプルは動かないので当てにならないです。
前回の記事でも書いた通り、オブジェクト ブラウザでメンバー表示もされないので、ガチで手探り状態、正直上記処理に至るまで試行錯誤の連続でした。
検索しても大した情報もヒットしないため、一番参考になるのはSDKのソースコードという、なかなかの苦行っぷりを発揮するEvernote Cloud SDK(COM)の処理ですが、どなたかの参考でなれば幸いです。
(コレ、ひょっとしたら自分でAPI呼んだ方が手っ取り早いのでは?と、思わなくもないです)
この記事へのコメントはありません。