Comment puis-je exporter toutes les pages OneNote vers des fichiers de démarque individuels?

14

Je passe à Linux et le dernier obstacle est de sortir de OneNote. Je voudrais exporter tous mes cahiers pour que chaque page aille dans un fichier de démarque individuel.

J'ai essayé beaucoup de choses - ce fil avait plusieurs suggestions, mais elles sont toutes dépassées.

Si je pouvais demander à OneNote d'exporter toutes les pages en tant que fichiers .docx individuels, il serait facile d'utiliser pandoc pour les convertir en fichiers de démarques individuels. Mais, OneNote exportera uniquement plusieurs pages en un seul fichier. Ainsi, une voie serait de trouver un moyen d'automatiser l'exportation de chaque page individuellement.

Une autre option consiste à exporter des cahiers entiers à la fois sous forme de fichiers .docx, à les convertir en markdown avec pandoc, puis à diviser les fichiers - mais, je ne suis pas assez un assistant regex pour obtenir csplit pour couper les fichiers correctement avec juste sa base des expressions régulières, et pas assez d'un assistant awk pour obtenir des fichiers de sortie avec l'expression régulière correcte et complète.

Est-ce que quelqu'un peut m'aider avec ça?

Anders
la source

Réponses:

12

J'ai fini par trouver un pipeline d'exportation, mais c'était pénible. Voici mes notes de faire cela:

flux de travail:

  1. Désactivez votre ou vos réseaux pour empêcher OneNote d'effectuer une longue synchronisation OneDrive après chaque exportation.

  2. Dans la liste des blocs-notes, développez le bloc-notes pour voir tous les onglets.

  3. Faites un clic droit sur un onglet et cliquez sur "Exporter ...".

  4. Cliquez sur la liste déroulante de type de fichier et appuyez sur Mpour sélectionner le .docxformat. Appuyez Enterpour le sélectionner.

  5. Appuyez à Enternouveau pour enregistrer le fichier exporté.

  6. Répétez les étapes 2 à 5 pour chaque onglet du bloc-notes.

  7. Configurez pandoc et ouvrez une fenêtre PowerShell ou cmd.

  8. cd dans le répertoire où se trouvent les .docxfichiers exportés .

  9. Pour chaque .docxfichier exporté , utilisez la commande pandoc suivante pour le convertir en démarque (remplacez journalpar le nom de votre fichier):

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

    Voici une explication de la commande: --extract-media=''indique à pandoc d'extraire des images du .docxfichier et de les placer dans le sous-dossier par défaut (nommé 'media' par défaut). --wrap=preserveindique à pandoc de ne pas envelopper le fichier de sortie avec des sauts de ligne (qui est la valeur par défaut). Le champ suivant est le nom du fichier d'entrée et -osignifie «sortie», tout journal.mdcomme le nom du fichier de sortie.

    Si vous ne souhaitez pas fractionner ce fichier (par exemple, si votre onglet ne contient qu'une seule page), passez à l'étape 15.

    (Lorsque vous en faites plusieurs, vous pouvez appuyer sur la touche (flèche vers le haut) pour rappeler la commande précédente dans le shell, puis modifier le nom de fichier.)

  10. Créez un nouveau dossier pour stocker les pages dans l'onglet. Pour cet exemple, en ce moment, toutes les pages de notre onglet Journal dans OneNote sont écrasées ensemble journal.md. Créez un dossier appelé journalqui stockera les dernières pages séparées sous forme de fichiers .md individuels.

  11. S'il y avait des images dans le .docxfichier, celles-ci seront exportées vers un nouveau dossier appelé media. Faites glisser le dossier multimédia, s'il existe, dans le dossier que vous venez de créer maintenant. (C'est pourquoi nous devons effectuer chaque opération pandoc séparément, car chaque exportation créera un dossier multimédia distinct, et nous voulons les garder séparés afin que les liens dans les fichiers de démarque fonctionnent correctement. Nous pourrions écrire un script intelligent pour faire tout cela automatiquement, mais il faudra moins de temps pour le faire manuellement, sauf si vous avez un grand nombre de blocs-notes.) (Remarque: vous pouvez enregistrer une étape en mettant votre nom de dossier souhaité dans les guillemets simples de l' --extract-media=''argument - pour les .docxfichiers contenant des images, un dossier sera créé automatiquement pour vous.)

  12. Ouvrez un terminal bash et cd dans le répertoire contenant le .mdfichier. Le dossier que vous avez créé à l'étape 10 doit être un sous-dossier de celui-ci (sauf si vous corrigez le chemin d'accès dans la commande suivante).

  13. Si vous ne l'avez pas déjà fait, cliquez sur l'icône de la fenêtre Windows Bash, cliquez sur Propriétés, vérifiez le mode QuickEdit, puis cliquez sur OK. Maintenant, cliquez à nouveau sur l'icône de la fenêtre Windows Bash, cette fois cliquez sur Paramètres par défaut, vérifiez le mode QuickEdit, puis cliquez sur OK (de sorte que les nouvelles fenêtres Bash que vous créerez à l'avenir se souviendront de ce paramètre). Vous pouvez maintenant sélectionner du texte dans le terminal et appuyez sur Ctrl+ Cpour copier, ou cliquez avec le bouton droit sur la fenêtre du terminal pour coller le texte dans le presse-papiers. Nous pouvons maintenant préparer notre commande dans un emplacement séparé et coller rapidement chaque version dans Bash.

  14. Personnalisez la commande suivante et exécutez-la pour chaque .mdfichier que vous souhaitez diviser en pages individuelles:

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

    (Tapez-le sur une seule ligne.)

    Comme vous pouvez le voir, journal.mdest le nom de notre fichier de démarque (dans le répertoire courant, désigné par ./), la deuxième occurrence de journal(après --prefix=') est le nom de notre sous-dossier qui contiendra les fichiers divisés, et journalentryc'est ainsi que chaque fichier sera nommé (suivi d'un numéro d'index).

    Si vous voulez comprendre la commande, voici une explication: --keep-filesimprime toujours les fichiers lorsque des erreurs ou la fin du fichier sont rencontrées, assurant que la dernière page sera sortie correctement (car elle ne se termine pas dans le modèle de notre expression régulière). --prefixdéfinit le schéma de dénomination des fichiers de sortie. --suffix-formatnous permet de définir notre extension de fichier ( .mddans ce cas), mais nous devons inclure %ipour l'instruction sprintf qui génère le numéro d'index du fichier.  --elide-empty-filessaute la sortie des fichiers vides, ce qui nous importe peu. Enfin, l'expression régulière, qui commence '/et se termine par/-2', définit quand fractionner le fichier: il indique "Lorsque vous trouvez (/) au début de la ligne (^) le (() lundi ou (\ |) mardi ou mercredi ou jeudi ou vendredi ou samedi ou dimanche suivant () ) suivi d'une virgule, reculez de deux lignes (-2) "et divisez-y le fichier, en affichant ce que nous avons jusqu'à présent. Le dernier bit '{*}',, répète la commande précédente indéfiniment, jusqu'à la fin du fichier.

  15. Faites glisser les fichiers .docxet .mddans un dossier, par exemple un dossier que vous créez maintenant appelé intermediates. Ou vous pouvez simplement les supprimer. Il est bon de les enregistrer pendant un certain temps, jusqu'à ce que vous soyez à l'aise avec votre nouveau format de fichier, au cas où vous voudriez revenir en arrière et référencer quelque chose qui s'est produit pendant le processus de conversion. Les déplacer dans le dossier des intermédiaires maintenant rude la chance d'oublier où nous en sommes et de répéter les étapes.

  16. Répétez les étapes 9 à 14 pour chaque .docxfichier que vous avez exporté à partir de OneNote.

  17. Maintenant, vous avez un dossier pour chaque onglet, avec un tas de .mdfichiers séparés , un pour chaque page! Plus un mediadossier dans chaque sous-dossier contenant des images dans l'onglet OneNote.

  18. Je recommande d'exporter chacun de vos blocs-notes OneNote sous forme de .mhtfichier (page Web à fichier unique) ou, si vous préférez, a .pdf. De cette façon, en cas de perte de formatage ou d'autres informations dans certains de vos fichiers de démarque, en raison de la conversion multiple, vous pouvez toujours revenir en arrière et voir facilement à quoi il devait ressembler dans le .mhtfichier. En outre, je recommanderais d'exporter chacun de vos blocs-notes OneNote sous forme de .onepkgfichier (package OneNote), afin que vous ayez une belle copie d'exportation finale si vous souhaitez rouvrir le bloc-notes dans OneNote dans son format de fichier natif / original (cela pourrait être utile si, par exemple, le .mhtfichier manque également une mise en forme originale que vous souhaitez récupérer).

  19. Lorsque vous terminez chaque bloc-notes, cliquez avec le bouton droit sur le bloc-notes dans OneNote et cliquez sur "Fermer ce bloc-notes" afin de ne pas modifier accidentellement le bloc-notes et d'avoir à réexporter vos nouvelles modifications. Pour les dossiers de démarque, j'ai également créé un dossier pour chaque bloc-notes et y ai mis tous les dossiers d'onglets.

  20. Lorsque vous avez terminé le projet d'exportation, vous pouvez accéder à votre OneDrive et supprimer tous les originaux de vos blocs-notes OneNote qui y ont été synchronisés (assurez-vous de sauvegarder vos propres fichiers maintenant, bien sûr! Il y a OneDrive pour Linux, ou vous pourrait essayer quelque chose comme Syncthing).

  21. Enfin, nous pouvons renommer tous nos fichiers .md en leur titre de page OneNote, qui est la première ligne de chaque fichier, en utilisant deux scripts. Créez les fichiers suivants:

    Fichier 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
    

    Fichier 2: ~/scripts/recurse.sh

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

    Ensuite, accédez à votre dossier de notes et exécutez la recurse.shcommande en utilisant la rename-files-to-first-line.shcommande comme argument:

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

    Vous verrez le script parcourir tous vos fichiers de manière récursive, jetant quelques erreurs sur les fichiers avec des premières lignes étranges (qui ne se convertiront pas en nom de fichier) et sur d'autres cas marginaux. Cependant, la mvcommande in rename-files-to-first-lineest exécutée avec un argument -n, ce qui l'empêchera d'écraser les fichiers. Il peut y avoir quelques notes qui ne sont pas renommées, car la première ligne qu'elles contiennent est vide ou quelque chose de bizarre, mais vous pouvez simplement corriger ces quelques fichiers manuellement.

  22. Profitez de votre évasion propre de OneNote.

Mises en garde:

  • Cela ne capture pas les sous-pages - vous devrez recréer celles avec des sous-sous-dossiers, si vous le souhaitez.

  • Je ne sais pas à quel point cela fonctionne avec les tables - le démarquage est un peu disgracieux pour les tables de toute façon.

  • Il existe probablement d'autres types de mise en forme, comme les polices, qui se perdent ou se gâchent lors de l'exportation. Mais pour le texte et les images riches, cela fonctionne plutôt bien!

Anders
la source
1
Ne fonctionnera pas si vous avez des pièces jointes dans OneNote
Nikhil
4
Wow, quel gâchis. Je n'aurais jamais dû commencer à prendre des notes avec ce logiciel. Merci d'avoir écrit tout ça! Notez qu'à ce jour, il n'y a toujours pas de fonction d'exportation pour OneNote sous macOS.
slhck
Quelqu'un a-t-il essayé d'importer les fichiers MD résultants à partir de cela dans Notion? ça a marché?
JayPex
De plus, cela n'est pas réaliste si vous avez des centaines de pages dans une section de bloc-notes chacune avec un titre unique, ne fonctionne que si vous avez utilisé le style de dénomination spécifique OP. J'apprécie l'effort cependant.
JayPex
6

L'autre réponse ne l'a pas coupé pour moi, car mes notes ne sont pas des entrées de journal, mais j'ai trouvé une solution en utilisant l'API Graph de Microsoft . Cela signifie que vous n'avez même pas besoin d'exécuter OneNote, cela nécessite simplement que vos notes soient synchronisées avec votre compte Microsoft, puis vous pouvez obtenir vos notes au format HTML parfaitement formaté (que vous pouvez afficher dans le navigateur ou convertir au format que vous préférez). utilisant Pandoc).

La magie opère dans ce script Python . Il exécute un simple serveur Web local que vous pouvez utiliser pour vous connecter à votre compte Microsoft et une fois que vous le faites, il télécharge toutes vos notes au format HTML, ainsi que les images et les pièces jointes dans leurs formats d'origine, et les stocke dans la hiérarchie des fichiers en préservant la structure d'origine de vos cahiers (y compris l'ordre des pages et les sous-pages).

Avant de pouvoir exécuter le script, vous devez enregistrer une "application" dans Microsoft Azure afin qu'elle puisse accéder à l'API Graph:

  1. Accédez à https://aad.portal.azure.com/ et connectez-vous avec votre compte Microsoft.
  2. Sélectionnez «Azure Active Directory» puis «Inscriptions d'applications» sous «Gérer».
  3. Sélectionnez "Nouvel enregistrement". Choisissez n'importe quel nom, définissez "Types de comptes pris en charge" sur "Comptes dans n'importe quel répertoire organisationnel et comptes Microsoft personnels" et sous "Rediriger l'URI", sélectionnez Web et entrez http://localhost:5000/getToken. S'inscrire.
  4. Copiez l'ID d'application (client) et collez-le comme client_idau début du script Python.
  5. Sélectionnez "Certificats et secrets" sous "Gérer". Appuyez sur "Nouveau secret client", choisissez un nom et confirmez.
  6. Copiez le secret client et collez-le comme secretdans le script Python.
  7. Sélectionnez "Autorisations API" sous "Gérer". Appuyez sur "Ajouter une autorisation", faites défiler vers le bas et sélectionnez OneNote, choisissez "Autorisations déléguées" et cochez "Notes.Read" et "Notes.Read.All". Appuyez sur "Ajouter des autorisations".

Ensuite, vous devez installer les dépendances Python. Assurez-vous que Python 3.7 (ou plus récent) est installé et installez les dépendances à l'aide de la commande pip install flask msal requests_oauthlib.

Vous pouvez maintenant exécuter le script. Dans un terminal, accédez au répertoire où se trouve le script et exécutez-le à l'aide python onenote_export.py. Cela démarrera un serveur Web local sur le port 5000.

Dans votre navigateur, accédez à http: // localhost: 5000 et connectez-vous à votre compte Microsoft. La première fois que vous le ferez, vous devrez également accepter que l'application puisse lire vos notes OneNote. (Cela ne donne à aucun tiers accès à vos données, tant que vous ne partagez pas l'ID client et le secret que vous avez créés sur le portail Azure). Après cela, retournez au terminal pour suivre la progression.

Remarque: Microsoft limite le nombre de demandes que vous pouvez effectuer au cours d'une période donnée. Par conséquent, si vous avez beaucoup de notes, vous pourriez éventuellement voir des messages comme celui-ci dans le terminal: Too many requests, waiting 20s and trying again.ce n'est pas un problème, mais cela signifie que le processus entier peut prendre un certain temps. De plus, la session de connexion peut expirer après un certain temps, ce qui entraîne un TokenExpiredError. Dans ce cas, rechargez simplement http: // localhost: 5000 et le script continuera (en ignorant les fichiers qu'il a déjà téléchargés).

danmou
la source
Bonne solution plus simple, mais cela obtient les fichiers en HTML, pas en MD
JayPex
1
Comme je l'ai brièvement mentionné dans la réponse, vous pouvez utiliser pandoc pour convertir HTML en markdown (par exemple pandoc --from html --to markdown -o output.md input.html). Cependant, il convient de noter que toutes les pages OneNote ne peuvent pas être parfaitement représentées dans le démarquage, vous risquez donc de perdre certains détails de mise en forme. En outre, pandoc prend en charge plusieurs versions de démarque, vous pouvez donc lire la documentation pour en trouver une qui convient à votre utilisation.
danmou
Ok mérite certainement un essai avant de prendre le long chemin dans la première réponse. Merci!
JayPex
4

Pour exporter vos pages OneNote dans un markdown individuel ( .md), vous devez installer Joplin et Evernote .

Comme suggéré dans ce lien , vous importez d'abord les notes dans Evernote. Exportez ensuite toutes les notes dans un .enexfichier depuis Evernote et importez-les dans Joplin.

Joplin a la possibilité d'exporter les notes sous forme de .mdfichiers.

Remarque: je suggère d'utiliser des indicateurs dans Evernote au préalable si vous souhaitez regrouper vos notes, car la façon Evernote de conserver la hiérarchie entre les notes est différente de OneNote.

bruno
la source
1
Tu es incroyable! Votre réponse m'a inspiré à importer des sections de cahier dans Evernote, puis à les importer d'Evernote dans Notion! Merci
JayPex
0

J'ai trouvé un travail non programmatique pour cela.

TLDR;

Exportez les notes de OneNote vers Evernote puis vers Notion (facultatif) puis exportez-les sous forme de fichiers individuels au format de votre choix.


J'ai vraiment eu du mal à exporter mes notes à partir de Notion, un coup d'œil en ligne renverra des façons vraiment impures d'exporter et de diviser des pages OneNote et de les transformer en fichiers md ou html. Quel bordel!

En gros, vous pouvez très facilement importer vos sections OneNote dans Evernote, après avoir téléchargé Evernote pour le bureau, il est assez facile de le faire, puis à partir de là, il est également tout aussi facile d'importer celles-ci dans Notion.

Sachez simplement que vous voudrez peut-être importer des sections individuelles si vous souhaitez conserver la même organisation, sinon vous pouvez simplement importer en bloc toutes les sections, les pages seront étiquetées avec les noms des sections et c'est tout le chemin dans Notion également.

Veuillez noter que vous devrez synchroniser vos blocs-notes OneNote en vous connectant à votre compte Microsoft / Outlook et en vérifiant qu'ils sont synchronisés à l'aide de OneNote 2016.

J'espère que cela t'aides.

JayPex
la source