Wie kann ich alle OneNote-Seiten in einzelne Markdown-Dateien exportieren?

14

Ich wechsle zu Linux und die letzte Hürde besteht darin, OneNote zu verlassen. Ich möchte alle meine Notizbücher exportieren, damit jede Seite in eine einzelne Markdown-Datei verschoben wird.

Ich habe viele Dinge ausprobiert - dieser Thread hatte mehrere Vorschläge, aber alle sind veraltet.

Wenn ich OneNote dazu bringen könnte, alle Seiten als einzelne DOCX-Dateien zu exportieren, wäre es einfach, Pandoc zu verwenden, um sie in einzelne Markdown-Dateien zu konvertieren. OneNote exportiert jedoch nur mehrere Seiten als einzelne Datei. Ein Weg wäre also, einen Weg zu finden, um den Export jeder einzelnen Seite einzeln zu automatisieren.

Eine andere Möglichkeit besteht darin, ganze Notizbücher gleichzeitig als DOCX-Dateien zu exportieren, sie mit Pandoc in Markdown zu konvertieren und dann die Dateien zu teilen. Ich bin jedoch nicht genug von einem Regex-Assistenten, um csplit dazu zu bringen, die Dateien nur mit ihren grundlegenden Dateien korrekt zu schneiden reguläre Ausdrücke und nicht genug von einem awk-Assistenten, um Dateien mit dem richtigen und vollständigen regulären Ausdruck auszugeben.

Kann mir jemand dabei helfen?

Anders
quelle

Antworten:

12

Am Ende fand ich eine Exportpipeline, aber es war ein Schmerz. Hier sind meine Notizen dazu:

Arbeitsablauf:

  1. Schalten Sie Ihre Netzwerke aus, um zu verhindern, dass OneNote nach jedem Export eine längere OneDrive-Synchronisierung durchführt.

  2. Erweitern Sie in der Liste "Notizbücher" das Notizbuch, um alle Registerkarten anzuzeigen.

  3. Klicken Sie mit der rechten Maustaste auf eine Registerkarte und klicken Sie auf "Exportieren ...".

  4. Klicken Sie auf die Dropdown-Liste Dateityp und drücken Sie M, um das .docxFormat auszuwählen . Drücken Sie Enter, um es auszuwählen.

  5. Drücken Sie Entererneut, um die exportierte Datei zu speichern.

  6. Wiederholen Sie die Schritte 2 bis 5 für jede Registerkarte im Notizbuch.

  7. Richten Sie pandoc ein und öffnen Sie ein PowerShell- oder cmd-Fenster.

  8. CD in das Verzeichnis, in dem sich die exportierten .docxDateien befinden.

  9. .docxVerwenden Sie für jede exportierte Datei den folgenden Pandoc-Befehl, um sie in Markdown zu konvertieren (durch journalden Namen Ihrer Datei ersetzen ):

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

    Hier ist eine Erklärung des Befehls: --extract-media=''Weist Pandoc an, Bilder aus der .docxDatei zu extrahieren und sie in den Standard-Unterordner (standardmäßig "Medien" genannt) zu legen. --wrap=preserveweist pandoc an, die Ausgabedatei nicht mit Zeilenumbrüchen fest zu verpacken (dies ist die Standardeinstellung). Das nächste Feld ist der Eingabedateiname und -osteht für 'Ausgabe', ebenso journal.mdwie der Ausgabedateiname.

    Wenn Sie diese Datei nicht teilen möchten (z. B. wenn Ihre Registerkarte nur eine Seite enthält), fahren Sie mit Schritt 15 fort.

    (Wenn Sie einige davon ausführen, können Sie die Taste (Aufwärtspfeil) drücken, um den vorherigen Befehl in der Shell abzurufen, und dann den Dateinamen bearbeiten.)

  10. Erstellen Sie einen neuen Ordner, um die Seiten auf der Registerkarte zu speichern. In diesem Beispiel werden derzeit alle Seiten unserer Registerkarte "Journal" in OneNote zusammengeführt journal.md. Erstellen Sie einen Ordner mit dem Namen, in journaldem die endgültig getrennten Seiten als einzelne MD-Dateien gespeichert werden.

  11. Wenn die .docxDatei Bilder enthält, werden diese in einen neuen Ordner mit dem Namen exportiert media. Ziehen Sie den Medienordner, falls vorhanden, in den Ordner, den Sie gerade erstellt haben. (Aus diesem Grund müssen wir jede Pandoc-Operation separat ausführen, da bei jedem Export ein separater Medienordner erstellt wird. Wir möchten diese getrennt halten, damit die Links in den Markdown-Dateien ordnungsgemäß funktionieren. Wir könnten dazu ein cleveres Skript schreiben automatisch, aber es dauert weniger, es nur manuell zu tun, es sei denn, Sie haben eine große Anzahl von Notizbüchern.) (Hinweis: Sie können einen Schritt speichern, indem Sie Ihren gewünschten Ordnernamen in einfache Anführungszeichen des --extract-media=''Arguments setzen - für .docxDateien mit Bildern, Ein Ordner wird automatisch für Sie erstellt.)

  12. Öffnen Sie ein Bash-Terminal und eine CD in das Verzeichnis, in dem sich die .mdDatei befindet. Der Ordner, den Sie in Schritt 10 erstellt haben, muss ein Unterordner dieses Ordners sein (es sei denn, Sie legen den Pfad im folgenden Befehl fest).

  13. Wenn Sie dies noch nicht getan haben, klicken Sie auf das Windows Bash-Fenstersymbol, klicken Sie auf Eigenschaften, aktivieren Sie den QuickEdit-Modus und klicken Sie dann auf OK. Klicken Sie nun erneut auf das Windows Bash-Fenstersymbol. Klicken Sie diesmal auf Standardeinstellungen, aktivieren Sie den QuickEdit-Modus und klicken Sie dann auf OK (damit neue Bash-Fenster, die Sie in Zukunft erstellen, diese Einstellung speichern). Jetzt können Sie Text im Terminal auswählen und zum Kopieren Ctrl+ drücken Coder mit der rechten Maustaste auf das Terminalfenster klicken, um den Text in die Zwischenablage einzufügen. Jetzt können wir unseren Befehl an einem separaten Ort vorbereiten und jede Version schnell in Bash einfügen.

  14. Passen Sie den folgenden Befehl an und führen Sie ihn für jede .mdDatei aus, die Sie in einzelne Seiten aufteilen möchten:

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

    (Geben Sie es als eine Zeile ein.)

    Wie Sie sehen können, journal.mdist der Name unserer Markdown-Datei (im aktuellen Verzeichnis, gekennzeichnet mit ./), das zweite Vorkommen von journal(nach --prefix=') der Name unseres Unterordners, der die geteilten Dateien enthält, und journalentrywie jede Datei benannt wird (gefolgt von einer Indexnummer).

    Wenn Sie den Befehl verstehen möchten, finden Sie hier eine Erklärung: --keep-filesDruckt weiterhin Dateien, wenn Fehler auftreten oder das Ende der Datei auftritt, um sicherzustellen, dass die letzte Seite korrekt ausgegeben wird (da sie nicht im Muster unseres regulären Ausdrucks endet). --prefixLegt das Namensschema der Ausgabedateien fest. --suffix-formatermöglicht es uns, unsere Dateierweiterung .mdfestzulegen ( in diesem Fall), aber wir müssen %ifür die sprintf-Anweisung einschließen, die die Indexnummer der Datei ausgibt.  --elide-empty-filesÜberspringt die Ausgabe leerer Dateien, die uns egal sind. Schließlich der reguläre Ausdruck, der mit beginnt '/und mit endet/-2', definiert, wann die Datei geteilt werden soll: Es heißt "Wenn Sie (/) am Anfang der Zeile (^) den folgenden (() Montag oder (\ |) Dienstag oder Mittwoch oder Donnerstag oder Freitag oder Samstag oder Sonntag () finden." ) gefolgt von einem Komma, treten Sie zwei Zeilen (-2) zurück "und teilen Sie die Datei dort auf und geben Sie das aus, was wir bisher haben. Das letzte Bit '{*}'wiederholt den vorherigen Befehl auf unbestimmte Zeit, bis das Ende der Datei erreicht ist.

  15. Ziehen Sie die Dateien .docxund .mdin einen Ordner, beispielsweise einen Ordner, den Sie jetzt erstellen intermediates. Oder Sie können sie einfach löschen. Es ist schön, sie für eine Weile zu speichern, bis Sie mit Ihrem neuen Dateiformat vertraut sind, falls Sie zurückgehen und auf etwas verweisen möchten, das während des Konvertierungsprozesses passiert ist. Wenn Sie sie jetzt in den Zwischenordner verschieben, können Sie nicht vergessen, wo wir uns befinden, und Schritte wiederholen.

  16. Wiederholen Sie die Schritte 9 bis 14 für jede .docxDatei, die Sie aus OneNote exportiert haben.

  17. Jetzt haben Sie einen Ordner für jede Registerkarte mit einer Reihe separater .mdDateien, eine für jede Seite! Plus einen mediaOrdner in jedem Unterordner, der Bilder auf der Registerkarte OneNote enthielt.

  18. Ich empfehle, jedes Ihrer OneNote-Notizbücher als .mhtDatei (Single File Web Page) oder, wenn Sie es vorziehen, als a zu exportieren .pdf. Auf diese Weise können Sie jederzeit zurückgehen und leicht sehen, wie es in der .mhtDatei aussehen sollte, wenn in einigen Ihrer Markdown-Dateien Formatierungen oder andere Informationen aufgrund der mehrfachen Konvertierung verloren gegangen sind . Darüber hinaus würde ich empfehlen, jedes Ihrer OneNote-Notizbücher als .onepkgDatei (OneNote-Paket) zu exportieren, damit Sie eine schöne endgültige Exportkopie haben, wenn Sie das Notizbuch in OneNote jemals in seinem nativen / ursprünglichen Dateiformat erneut öffnen möchten (dies kann nützlich sein Wenn in der .mhtDatei beispielsweise auch eine Originalformatierung fehlt, die Sie wiederherstellen möchten).

  19. Wenn Sie jedes Notizbuch fertiggestellt haben, klicken Sie mit der rechten Maustaste auf das Notizbuch in OneNote und klicken Sie auf "Dieses Notizbuch schließen", damit Sie das Notizbuch nicht versehentlich bearbeiten und Ihre neuen Änderungen erneut exportieren müssen. Für die Markdown-Ordner habe ich außerdem für jedes Notizbuch einen Ordner erstellt und alle Registerkartenordner darin abgelegt.

  20. Wenn Sie mit dem gesamten Exportprojekt fertig sind, können Sie zu Ihrem OneDrive gehen und alle dort synchronisierten OneNote-Notebook-Originale löschen (stellen Sie sicher, dass Sie jetzt Ihre eigenen Dateien sichern! Es gibt OneDrive für Linux oder Sie könnte so etwas wie Syncthing versuchen).

  21. Schließlich können wir alle unsere MD-Dateien mithilfe von zwei Skripten in den OneNote-Seitentitel umbenennen, der die erste Zeile in jeder Datei darstellt. Machen Sie die folgenden Dateien:

    Datei 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
    

    Datei 2: ~/scripts/recurse.sh

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

    Navigieren Sie dann zu Ihrem Notizenordner und führen Sie den recurse.shBefehl mit dem rename-files-to-first-line.shBefehl als Argument aus:

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

    Sie werden sehen, dass das Skript alle Ihre Dateien rekursiv durchläuft und einige Fehler in Dateien mit seltsamen ersten Zeilen (die nicht in einen Dateinamen konvertiert werden) und in anderen Randfällen auslöst. Der mvBefehl in rename-files-to-first-linewird jedoch mit einem Argument ausgeführt -n, wodurch verhindert wird, dass Dateien überschrieben werden. Möglicherweise gibt es einige Notizen, die nicht umbenannt werden, da die erste Zeile leer oder etwas Seltsames ist. Sie können diese wenigen Dateien jedoch einfach manuell reparieren.

  22. Genießen Sie Ihre saubere Flucht vor OneNote.

Vorsichtsmaßnahmen:

  • Dies erfasst keine Unterseiten - Sie müssen diese mit Unterunterordnern neu erstellen, wenn Sie möchten.

  • Ich weiß nicht, wie gut es mit Tabellen funktioniert - Markdown ist für Tabellen sowieso etwas unangenehm.

  • Es gibt wahrscheinlich andere Arten der Formatierung, z. B. Schriftarten, die beim Export verloren gehen oder durcheinander geraten. Aber für Rich Text und Bilder funktioniert es ziemlich gut!

Anders
quelle
1
Funktioniert nicht, wenn Sie Anhänge in OneNote
Nikhil
4
Wow, was für ein Durcheinander. Ich hätte nie anfangen sollen, mir mit dieser Software Notizen zu machen. Danke, dass du das alles aufgeschrieben hast! Beachten Sie, dass es unter macOS bis heute noch keine Exportfunktion für OneNote gibt.
Slhck
Hat jemand versucht, die resultierenden MD-Dateien daraus in Notion zu importieren? hat es funktioniert?
JayPex
Dies ist auch nicht realistisch, wenn Sie Hunderte von Seiten in einem Notizbuchabschnitt mit jeweils einem eindeutigen Titel haben. Dies funktioniert nur, wenn Sie einen bestimmten Namensstil haben, den OP verwendet hat. Ich schätze die Mühe jedoch.
JayPex
6

Die andere Antwort hat es für mich nicht gekürzt, da meine Notizen keine Journaleinträge sind, aber ich habe eine Lösung mit der Graph-API von Microsoft gefunden . Dies bedeutet, dass Sie OneNote nicht einmal ausführen müssen. Es ist lediglich erforderlich, dass Ihre Notizen mit Ihrem Microsoft-Konto synchronisiert werden. Anschließend können Sie Ihre Notizen als perfekt formatiertes HTML abrufen (das Sie im Browser anzeigen oder in das von Ihnen bevorzugte Format konvertieren können mit Pandoc).

Die Magie geschieht in diesem Python-Skript . Es wird ein einfacher lokaler Webserver ausgeführt, über den Sie sich bei Ihrem Microsoft-Konto anmelden können. Anschließend werden alle Ihre Notizen als HTML sowie Bilder und Anhänge in ihren ursprünglichen Formaten heruntergeladen und in einer Dateihierarchie gespeichert, wobei die ursprüngliche Struktur beibehalten wird Ihrer Notizbücher (einschließlich Seitenreihenfolge und Unterseiten).

Bevor Sie das Skript ausführen können, müssen Sie eine "App" in Microsoft Azure registrieren, damit sie auf die Graph-API zugreifen kann:

  1. Gehen Sie zu https://aad.portal.azure.com/ und melden Sie sich mit Ihrem Microsoft-Konto an.
  2. Wählen Sie "Azure Active Directory" und dann "App-Registrierungen" unter "Verwalten".
  3. Wählen Sie "Neue Registrierung". Wählen Sie einen beliebigen Namen, setzen Sie "Unterstützte Kontotypen" auf "Konten in einem beliebigen Organisationsverzeichnis und persönlichen Microsoft-Konten" und wählen Sie unter "URI umleiten" die Option "Web" aus und geben Sie ein http://localhost:5000/getToken. Registrieren.
  4. Kopieren Sie die "Anwendungs- (Client-) ID" und fügen Sie sie wie client_idam Anfang des Python-Skripts ein.
  5. Wählen Sie unter "Verwalten" die Option "Zertifikate und Geheimnisse". Drücken Sie "New Client Secret", wählen Sie einen Namen und bestätigen Sie.
  6. Kopieren Sie das Client-Geheimnis und fügen Sie es wie secretim Python-Skript ein.
  7. Wählen Sie unter "Verwalten" die Option "API-Berechtigungen". Drücken Sie auf "Berechtigung hinzufügen", scrollen Sie nach unten und wählen Sie OneNote aus, wählen Sie "Delegierte Berechtigungen" und aktivieren Sie "Notes.Read" und "Notes.Read.All". Klicken Sie auf "Berechtigungen hinzufügen".

Dann müssen Sie die Python-Abhängigkeiten installieren. Stellen Sie sicher, dass Python 3.7 (oder neuer) installiert ist, und installieren Sie die Abhängigkeiten mit dem Befehl pip install flask msal requests_oauthlib.

Jetzt können Sie das Skript ausführen. Navigieren Sie in einem Terminal zu dem Verzeichnis, in dem sich das Skript befindet, und führen Sie es mit aus python onenote_export.py. Dadurch wird ein lokaler Webserver auf Port 5000 gestartet.

Navigieren Sie in Ihrem Browser zu http: // localhost: 5000 und melden Sie sich bei Ihrem Microsoft-Konto an. Wenn Sie dies zum ersten Mal tun, müssen Sie auch akzeptieren, dass die App Ihre OneNote-Notizen lesen kann. (Dadurch erhalten Dritte keinen Zugriff auf Ihre Daten, solange Sie die Client-ID und das Geheimnis, die Sie im Azure-Portal erstellt haben, nicht freigeben.) Danach kehren Sie zum Terminal zurück, um den Fortschritt zu verfolgen.

Hinweis: Microsoft begrenzt die Anzahl der Anfragen, die Sie innerhalb eines bestimmten Zeitraums ausführen können. Wenn Sie viele Notizen haben, werden im Terminal möglicherweise folgende Meldungen angezeigt: Too many requests, waiting 20s and trying again.Dies ist kein Problem, bedeutet jedoch, dass der gesamte Vorgang eine Weile dauern kann. Außerdem kann die Anmeldesitzung nach einer Weile ablaufen, was zu einem führt TokenExpiredError. In diesem Fall laden Sie einfach http: // localhost: 5000 neu und das Skript wird fortgesetzt (wobei die bereits heruntergeladenen Dateien übersprungen werden).

Danmou
quelle
Gute, einfachere Lösung, aber dies bringt die Dateien in HTML, nicht in MD
JayPex
1
Wie ich in der Antwort kurz erwähnt habe, können Sie mit pandoc HTML in Markdown konvertieren (z pandoc --from html --to markdown -o output.md input.html. B. ). Es ist jedoch zu beachten, dass nicht alle OneNote-Seiten im Markdown perfekt dargestellt werden können, sodass Sie möglicherweise einige Formatierungsdetails verlieren. Außerdem unterstützt pandoc verschiedene Arten von Markdowns. Lesen Sie daher möglicherweise die Dokumentation, um eine für Ihre Verwendung geeignete zu finden.
Danmou
Ok, auf jeden Fall einen Versuch wert, bevor Sie in der ersten Antwort den langen Weg nehmen. Vielen Dank!
JayPex
4

Um Ihre OneNote-Seiten in einzelne Markdowns ( .md) zu exportieren , sollten Sie Joplin und Evernote installieren .

Wie in diesem Link vorgeschlagen , importieren Sie zuerst die Notizen in Evernote. Exportieren Sie dann alle Notizen .enexaus Evernote in eine Datei und importieren Sie sie in Joplin.

Joplin hat die Möglichkeit, die Notizen als .mdDateien zu exportieren .

Hinweis: Ich empfehle, vorab Flags in Evernote zu verwenden, wenn Sie Ihre Notizen gruppieren möchten, da sich die Evernote-Methode zum Aufrechterhalten der Hierarchie zwischen Notizen von OneNote unterscheidet.

21Brunoh
quelle
1
Du bist toll! Ihre Antwort hat mich dazu inspiriert, Notizbuchabschnitte in Evernote zu importieren und sie dann aus Evernote in Notion zu importieren! Danke
JayPex