すべてのOneNoteページを個別のマークダウンファイルにエクスポートするにはどうすればよいですか?


14

私はLinuxに移行しています。最後のハードルはOneNoteから抜け出すことです。すべてのノートブックをエクスポートして、すべてのページが個別のマークダウンファイルに移動するようにします。

私は多くのことを試しました— このスレッドにはいくつかの提案がありましたが、それらはすべて古くなっています。

OneNoteですべてのページを個別の.docxファイルとしてエクスポートできる場合、pandocを使用してそれらを個別のマークダウンファイルに変換するのは簡単です。ただし、OneNoteは複数のページを1つのファイルとしてのみエクスポートします。したがって、1つの方法は、すべての単一ページのエクスポートを個別に自動化する方法を見つけることです。

もう1つのオプションは、ノートブック全体を.docxファイルとして一度にエクスポートし、それらをpandocでマークダウンに変換してからファイルを分割することです。正規表現であり、正しい完全な正規表現でファイルを出力するには、awkウィザードでは不十分です。

誰かがこれを手伝ってくれる?

回答:


12

輸出パイプラインを見つけることになりましたが、それは苦痛でした。これが私のメモです。

ワークフロー:

  1. ネットワークをオフにして、エクスポート後にOneNoteが長時間のOneDrive同期を実行しないようにします。

  2. [ノートブック]リストでノートブックを展開して、すべてのタブを表示します。

  3. タブを右クリックし、[エクスポート...]をクリックします。

  4. ファイルタイプのドロップダウンをクリックし、を押しM.docxフォーマットを選択します。を押しEnterて選択します。

  5. Enterもう一度押すと、エクスポートされたファイルが保存されます。

  6. ノートブックのタブごとに手順2〜5を繰り返します。

  7. pandocをセットアップし、PowerShellまたはcmdウィンドウを開きます。

  8. エクスポートされた.docxファイルがあるディレクトリにcdします。

  9. エクスポートされた.docxファイルごとに、次のpandocコマンドを使用して、それをマークダウンに変換しjournalます(ファイルの名前に置き換えます)。

    pandoc --extract-media='' --wrap=preserve '.\journal.docx' -o journal.md
    

    コマンドの説明は次のとおりです。ファイル--extract-media=''から画像を抽出.docxしてデフォルトのサブフォルダー(デフォルトでは「media」という名前)に配置するようpandocに指示します。--wrap=preservepandocに、出力ファイルを改行(デフォルト)でハードラップしないように指示します。次のフィールドは入力ファイル名で、-o「出力」を表しjournal.md、出力ファイル名も同様です。

    このファイルを分割したくない場合(たとえば、タブに1ページしか含まれていない場合)は、手順15に進みます。

    (これらをまとめて実行しているときは、(上矢印)キーを押してシェルで前のコマンドを呼び出し、ファイル名を編集できます。)

  10. タブにページを保存するための新しいフォルダーを作成します。この例では、現在、OneNoteの[ジャーナル]タブのすべてのページがでマッシュされていjournal.mdます。journal最終的に分離されたページを個別の.mdファイルとして保存するというフォルダを作成します。

  11. .docxファイル内に画像があった場合、これらの画像はという新しいフォルダにエクスポートされますmedia。メディアフォルダーが存在する場合は、今作成したフォルダーにドラッグします。(このため、エクスポートごとに個別のメディアフォルダーが作成され、マークダウンファイル内のリンクが正しく機能するようにこれらを個別に保持したいので、各パンドック操作を個別に実行する必要があります。これを行うための巧妙なスクリプトを書くことができます。自動的に実行されますが、大量のノートブックがない限り、手動で実行する方が時間がかかりません。)(注:--extract-media=''引数の単一引用符で目的のフォルダー名を指定.docxすると、画像を含むファイルの場合、ステップを節約できます。フォルダが自動的に作成されます。)

  12. bashターミナルを開き、.mdファイルを含むディレクトリにcdします。手順10で作成したフォルダーは、このフォルダーのサブフォルダーである必要があります(次のコマンドでパスを修正しない限り)。

  13. まだ行っていない場合は、Windows Bashウィンドウのアイコンをクリックし、[プロパティ]をクリックし、[クイック編集モード]をチェックして、[OK]をクリックします。Windows Bashウィンドウのアイコンをもう一度クリックします。今度は[デフォルト]をクリックし、[クイック編集モード]をオンにして、[OK]をクリックします(今後作成する新しいBashウィンドウには、この設定が記憶されます)。ターミナルでテキストを選択してCtrl+ Cを押してコピーするか、ターミナルウィンドウを右クリックしてテキストをクリップボードに貼り付けます。これで、コマンドを別の場所に準備し、各バージョンをBashにすばやく貼り付けることができます。

  14. 次のコマンドをカスタマイズして、.md個別のページに分割するファイルごとに実行します。

    csplit ./journal.md --keep-files --prefix='journal/journalentry ' --suffix-format='%i.md' --elide-empty-files '/^\(Monday\|Tuesday\|Wednesday\|Thursday\|Friday\|Saturday\|Sunday\),/-2' '{*}'

    (1行で入力してください。)

    ご覧のとおり、journal.mdはマークダウンファイルの名前です(現在のディレクトリ内で、で示されます./)。2番目に出現するjournal(の後--prefix=')は、分割ファイルを含むサブフォルダーの名前であり、journalentry各ファイルの名前になります(インデックス番号が後に続きます)。

    コマンドを理解したい場合は、ここで説明し--keep-filesます。エラーまたはファイルの終わりが検出された場合でもファイルを印刷し、最後のページが正しく出力されるようにします(正規表現のパターンで終わっていないため)。--prefix出力ファイルの命名体系を設定します。--suffix-formatファイル拡張子(.mdこの場合)を設定できます%iが、ファイルのインデックス番号を出力するsprintfステートメントに含める必要があります。  --elide-empty-files気にしない空のファイルの出力をスキップします。最後に、次で始まる'/と終わる正規表現/-2'は、ファイルを分割するタイミングを定義します。「行の先頭に(/)がある場合(^)次の(()月曜日または(\ |)火曜日または水曜日または木曜日または金曜日または土曜日または日曜日() )に続けてカンマを入力し、2行(-2)だけ後退してファイルをそこに分割し、現在までの内容を出力します。最後のビット'{*}'は、ファイルの終わりに到達するまで、前のコマンドを無期限に繰り返します。

  15. .docx.mdファイルをフォルダにドラッグします。たとえば、現在作成しているフォルダをと呼びintermediatesます。または、それらを削除することもできます。戻って変換プロセス中に発生した何かを参照したい場合に備えて、新しいファイル形式に慣れるまで、しばらく保存しておくと便利です。それらを中間フォルダに移動すると、現在の場所を忘れてステップを繰り返す可能性がなくなります。

  16. .docxOneNoteからエクスポートしたファイルごとに手順9〜14を繰り返します。

  17. これで、タブごとに1つのフォルダがあり.md、各ページに1つずつ、多数の個別のファイルが含まれています。さらにmedia、OneNoteタブに画像があった各サブフォルダー内のフォルダー。

  18. OneNoteノートブックのそれぞれを.mhtファイル(単一ファイルのWebページ)、または必要に応じて.pdf。このように、複数の変換が原因で、一部のマークダウンファイルでフォーマットやその他の情報が失われた場合、いつでも戻って、.mhtファイル内でどのように表示されるべきかを簡単に確認できます。さらに、OneNoteノートブックのそれぞれを.onepkgファイル(OneNoteパッケージ)としてエクスポートすることをお勧めします。これにより、OneNoteでノートブックをネイティブ/元のファイル形式で再び開く場合に備えて、最終的なエクスポートコピーが得られます(これは便利な場合があります)。たとえば、.mhtファイルに回復したい元のフォーマットも含まれていない場合)。

  19. 各ノートブックを完成したら、OneNoteでノートブックを右クリックして[このノートブックを閉じる]をクリックします。これにより、誤ってノートブックを編集して、新しい変更を再エクスポートする必要がなくなります。マークダウンフォルダーについては、各ノートブック用のフォルダーも作成し、その中にすべてのタブフォルダーを配置しました。

  20. エクスポートプロジェクト全体が完了したら、OneDriveに移動して、そこで同期されたすべてのOneNoteノートブックのオリジナルを削除できます(もちろん、今すぐ独自のファイルをバックアップしていることを確認してください!OneDrive for LinuxまたはSyncthingなどを試すことができます)。

  21. 最後に、2つのスクリプトを使用して、すべての.mdファイルの名前を各ファイルの最初の行であるOneNoteページのタイトルに変更できます。次のファイルを作成します。

    ファイル1: ~/scripts/rename-files-to-first-line.sh

    for i in *md ; do mv -n "$i" "$(cat "$i"|head -n1|tr -d '\000-\037[]{}()/\?*')".md; done
    

    ファイル2: ~/scripts/recurse.sh

    CDIR=$(pwd)
    for i in $(ls -R | grep :); do
        DIR=${i%:}                    # Strip ':'
        cd $DIR
        $1                            # Your command
        cd $CDIR
    done
    

    次に、ノートフォルダーに移動し、recurse.shコマンドをrename-files-to-first-line.sh引数として使用してコマンドを実行します。

    $ ~/scripts/recurse.sh ~/scripts/rename-files-to-first-line.sh
    

    スクリプトがすべてのファイルを再帰的に処理し、奇妙な最初の行(ファイル名に変換されない)を含むファイルやその他のエッジケースでいくつかのエラーをスローすることがわかります。ただし、mvコマンドin rename-files-to-first-lineは引数を指定して実行さ-nれるため、ファイルが上書きされることはありません。名前が変更されないメモがいくつかある可能性があります。それらの最初の行が空白またはその他の奇妙なためですが、手動でこれらのいくつかのファイルを修正できます。

  22. OneNoteからのすっきりとした脱出をお楽しみください。

警告:

  • これはサブページをキャプチャしません。必要に応じて、サブサブフォルダを使用してそれらを再作成する必要があります。

  • テーブルでどの程度うまく機能するかはわかりません。とにかく、マークダウンはテーブルにとってはあまり意味がありません。

  • おそらく、フォントなど、エクスポートで失われたり、めちゃくちゃになったりする他の種類のフォーマットがあるでしょう。リッチテキストと画像の場合は、かなりうまくいきます。


1
OneNoteに添付ファイルがある場合は機能しません
Nikhil

4
うわー、なんてめちゃくちゃ。私はこのソフトウェアでメモを取ることを始めるべきではありませんでした。これをすべて書いてくれてありがとう!現在のところ、macOSでのOneNoteのエクスポート機能はまだありません。
slhck 2018年

誰かが結果のMDファイルをこれからNotionにインポートしようとしましたか?うまくいった?
JayPex

また、ノートブックセクションに数百のページがあり、それぞれに一意のタイトルが付いている場合、これは現実的ではなく、OPが使用した特定の命名スタイルがある場合にのみ機能します。私は努力にも感謝します。
JayPex

6

私のメモはジャーナルエントリではないため、他の答えはそれをカットしませんでしたが、MicrosoftのGraph APIを使用した解決策を見つけました。つまり、OneNoteを実行する必要さえありません。メモをMicrosoftアカウントに同期するだけで、メモを完全な形式のHTMLとして取得できます(ブラウザーで表示したり、好みの形式に変換したりできます) Pandocを使用)。

魔法はこのPythonスクリプトで起こります。Microsoftアカウントへのログインに使用できるシンプルなローカルWebサーバーを実行します。これを実行すると、すべてのメモをHTMLとしてダウンロードし、画像と添付ファイルを元の形式でダウンロードして、元の構造を維持したファイル階層に保存しますノートブック(ページの順序とサブページを含む)。

スクリプトを実行する前に、Microsoft Azureに「アプリ」を登録して、グラフAPIにアクセスできるようにする必要があります。

  1. 行きhttps://aad.portal.azure.com/し、Microsoftアカウントを使ってログインします。
  2. [Azure Active Directory]を選択し、[管理]で[アプリの登録]を選択します。
  3. 「新規登録」を選択してください。任意の名前を選択し、[サポートされているアカウントタイプ]を[任意の組織ディレクトリのアカウントと個人のMicrosoftアカウント]に設定し、[リダイレクトURI]で[Web]を選択して、を入力しhttp://localhost:5000/getTokenます。登録。
  4. 「アプリケーション(クライアント)ID」をコピーしてclient_id、Pythonスクリプトの先頭に貼り付けます。
  5. 「管理」から「証明書とシークレット」を選択します。「新しいクライアントシークレット」を押し、名前を選択して確定します。
  6. クライアントシークレットをコピーsecretして、Pythonスクリプトのように貼り付けます。
  7. 「管理」から「API権限」を選択します。「権限の追加」を押し、下にスクロールしてOneNoteを選択し、「委任された権限」を選択して、「Notes.Read」と「Notes.Read.All」を確認します。「権限の追加」を押します。

次に、Pythonの依存関係をインストールする必要があります。Python 3.7(またはそれ以降)がインストールされていることを確認し、コマンドを使用して依存関係をインストールしpip install flask msal requests_oauthlibます。

これでスクリプトを実行できます。ターミナルで、スクリプトが配置されているディレクトリに移動し、を使用してスクリプトを実行しpython onenote_export.pyます。これにより、ポート5000でローカルWebサーバーが起動します。

ブラウザでhttp:// localhost:5000に移動し、Microsoftアカウントにログインします。初めてそれを行うときは、アプリがOneNoteのノートを読み取ることができることも受け入れる必要があります。(これにより、Azureポータルで作成したクライアントIDとシークレットを共有しない限り、第三者がデータにアクセスすることはありません)。この後、ターミナルに戻って進行状況を追跡します。

注:マイクロソフトでは、特定の期間内に実行できる要求の数を制限しています。したがって、多くのメモがある場合、最終的には次のようなメッセージがターミナルに表示される可能性があります。Too many requests, waiting 20s and trying again.これは問題ではありませんが、プロセス全体に時間がかかる可能性があります。また、ログインセッションはしばらくすると期限切れになる可能性があり、その結果、になりTokenExpiredErrorます。これが発生した場合は、単にhttp:// localhost:5000をリロードすると、スクリプトは続行します(すでにダウンロードしたファイルはスキップされます)。


よりシンプルなソリューションですが、MDではなくHTMLでファイルを取得します
JayPex

1
回答で簡単に述べたように、pandocを使用してHTMLをマークダウンに変換できます(例:)pandoc --from html --to markdown -o output.md input.html。ただし、すべてのOneNoteページをマークダウンで完全に表現できるわけではないため、一部のフォーマットの詳細が失われる可能性があることに注意してください。また、pandocはいくつかの種類のマークダウンをサポートしているため、ドキュメントを読んで、用途に合ったマークダウンを見つけることができます。
だんもう

最初の回答で長いルートをとる前に、確かに試してみる価値があります。ありがとう!
JayPex

4

OneNoteページを個別のマークダウン(.md)にエクスポートするには、JoplinEvernoteをインストールする必要があります。

このリンクで提案されているように、最初にノートをEvernoteにインポートします。次に、すべてのメモを.enexEvernoteからファイルにエクスポートし、Joplinにインポートします。

Joplinには、ノートを.mdファイルとしてエクスポートするオプションがあります。

注:ノート間で階層を維持するEvernoteの方法はOneNoteとは異なるため、ノートをグループ化する場合は、事前にEvernoteでフラグを使用することをお勧めします。


1
あなたは素晴らしいです!あなたの答えに刺激を受けて、ノートブックセクションをEvernoteにインポートしてから、それらをEvernoteからNotionにインポートしました!ありがとう
JayPex

0

このための非プログラム的な回避策を見つけました。

TLDR;

OneNoteからエクスポートノートEvernoteの、その後に概念(オプション)をお好みの形式で個別のファイルとしてエクスポートします。


私はNotionからノートをエクスポートするのに本当に苦労してきました。オンラインで見ると、OneNoteページをエクスポートして分割し、それらをmdまたはhtmlファイルに変換するためのいくつかの本当に不自然な方法が返されます。なんてめちゃくちゃ!

基本的に、OneNoteセクションをEvernoteに非常に簡単にインポートできます。デスクトップ用のEvernoteをダウンロードした後、それを実行するのは非常に簡単で、そこからNotionにインポートするのも同じくらい簡単です。

同じ組織を維持したい場合は、個々のセクションをインポートすることをお勧めします。そうでない場合は、すべてのセクションを一括インポートできます。ページにはセクション名のタグが付けられ、それがNotionにも反映されます。

Microsoft / Outlookアカウントにログインし、OneNote 2016を使用してそれらが同期されていることを確認することにより、OneNoteノートブックを同期する必要があることに注意してください。

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.