Come posso esportare tutte le pagine di OneNote in singoli file di markdown?


14

Mi sto trasferendo su Linux e l'ultimo ostacolo è uscire da OneNote. Vorrei esportare tutti i miei blocchi appunti in modo che ogni pagina vada a un singolo file di markdown.

Ho provato molte cose: questa discussione aveva diversi suggerimenti, ma sono tutti obsoleti.

Se potessi convincere OneNote ad esportare tutte le pagine come singoli file .docx, sarebbe facile usare pandoc per convertirle in singoli file di markdown. Ma OneNote esporterà solo più pagine come un singolo file. Quindi, un percorso sarebbe quello di trovare un modo per automatizzare l'esportazione di ogni singola pagina individualmente.

Un'altra opzione è quella di esportare interi blocchi appunti alla volta come file .docx, convertirli in markdown con pandoc e quindi dividere i file, ma non sono abbastanza un mago regex per ottenere csplit per tagliare correttamente i file solo con le sue basi espressioni regolari, e non abbastanza di una procedura guidata awk per ottenere i file di output con l'espressione regolare corretta e completa.

Qualcuno mi può aiutare con questo?

Risposte:


12

Ho finito per trovare una pipeline di esportazione, ma è stato un dolore. Ecco i miei appunti dal farlo:

Flusso di lavoro:

  1. Spegni le reti per impedire a OneNote di eseguire una lunga sincronizzazione OneDrive dopo ogni esportazione.

  2. Nell'elenco Notebook, espandere il blocco note per visualizzare tutte le schede.

  3. Fare clic destro su una scheda e fare clic su "Esporta ...".

  4. Fai clic sul menu a discesa del tipo di file e premi Mper selezionare il .docxformato. Premere Enterper selezionarlo.

  5. Premere di Enternuovo per salvare il file esportato.

  6. Ripetere i passaggi da 2 a 5 per ciascuna scheda del blocco note.

  7. Configurare pandoc e aprire una finestra PowerShell o cmd.

  8. cd nella directory in cui .docxsi trovano i file esportati .

  9. Per ogni .docxfile esportato , utilizzare il seguente comando pandoc per convertirlo in markdown (sostituirlo journalcon il nome del file):

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

    Ecco una spiegazione del comando: --extract-media=''dice a pandoc di estrarre le immagini dal .docxfile e inserirle nella sottocartella predefinita (denominata "media" per impostazione predefinita). --wrap=preserveindica a pandoc di non eseguire il wrapping del file di output con interruzioni di riga (impostazione predefinita). Il campo successivo è il nome del file di input e -osta per "output", così journal.mdcome il nome del file di output.

    Se non si desidera dividere questo file (ad esempio, se la scheda conteneva solo una pagina), andare al passaggio 15.

    (Quando ne esegui un mucchio, puoi premere il tasto (freccia su) per richiamare il comando precedente nella shell, quindi modificare il nome del file.)

  10. Crea una nuova cartella per memorizzare le pagine nella scheda. Per questo esempio, in questo momento tutte le pagine della nostra scheda Diario in OneNote sono unite insieme journal.md. Crea una cartella chiamata journalche memorizzerà le pagine separate finali come singoli file .md.

  11. Se nel .docxfile erano presenti immagini , queste verranno esportate in una nuova cartella denominata media. Trascina la cartella multimediale, se esiste, nella cartella che hai appena creato ora. (Questo è il motivo per cui dobbiamo eseguire ciascuna operazione pandoc separatamente, perché ogni esportazione creerà una cartella multimediale separata e vogliamo tenerli separati in modo che i collegamenti nei file di markdown funzionino correttamente. Potremmo scrivere uno script intelligente per fare tutto questo automaticamente, ma ci vorrà meno tempo per farlo manualmente, a meno che tu non abbia un numero enorme di blocchi appunti. (Nota: puoi salvare un passaggio inserendo il tuo nome utente desiderato tra le virgolette singole --extract-media=''dell'argomento, per i .docxfile con immagini, una cartella verrà creata automaticamente per te.)

  12. Apri un terminale bash e cd nella directory che contiene il .mdfile. La cartella creata nel passaggio 10 deve essere una sottocartella di questa (a meno che non si risolva il percorso nel comando seguente).

  13. Se non l'hai già fatto, fai clic sull'icona della finestra di Windows Bash, fai clic su Proprietà, seleziona Modalità di modifica rapida, quindi fai clic su OK. Ora fai di nuovo clic sull'icona della finestra di Windows Bash, questa volta fai clic su Impostazioni predefinite, seleziona Modalità di modifica rapida, quindi fai clic su OK (così le nuove finestre di Bash che creerai in futuro ricorderanno questa impostazione). Ora puoi selezionare il testo nel terminale e premere Ctrl+ Cper copiare o fare clic con il tasto destro del mouse sulla finestra del terminale per incollare il testo negli Appunti. Ora possiamo preparare il nostro comando in una posizione separata e incollare rapidamente ogni versione in Bash.

  14. Personalizza il seguente comando ed eseguilo per ogni .mdfile che vuoi dividere in singole pagine:

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

    (Digitalo come una riga.)

    Come puoi vedere, journal.mdè il nome del nostro file markdown (nella directory corrente, indicato da ./), la seconda occorrenza di journal(after --prefix=') è il nome della nostra sottocartella che conterrà i file divisi, ed journalentryè il nome di ciascun file (seguito da un numero indice).

    Se vuoi capire il comando, ecco una spiegazione: --keep-filesstampa ancora i file quando si incontrano errori o la fine del file, assicurando che l'ultima pagina venga emessa correttamente (poiché non termina nel modello della nostra espressione regolare). --prefiximposta lo schema di denominazione dei file di output. --suffix-formatci permette di impostare la nostra estensione di file ( .mdin questo caso), ma dobbiamo includere %iper l'istruzione sprintf che genera il numero di indice del file.  --elide-empty-filessalta l'output di file vuoti, che non ci interessano. Infine, l'espressione regolare, che inizia con '/e termina con/-2', definisce quando dividere il file: dice "Quando trovi (/) all'inizio della riga (^) il seguente (() lunedì o (\ |) martedì o mercoledì o giovedì o venerdì o sabato o domenica () ) seguito da una virgola, tornare indietro di due righe (-2) "e dividere il file lì, producendo ciò che abbiamo finora. Il bit finale '{*}', ripete il comando precedente indefinitamente, fino a raggiungere la fine del file.

  15. Trascina i file .docxe .mdin una cartella, ad esempio una cartella che crei ora chiamata intermediates. Oppure puoi semplicemente cancellarli. È bello salvarli per un po ', fino a quando non ti senti a tuo agio con il tuo nuovo formato di file, nel caso in cui desideri tornare indietro e fare riferimento a qualcosa che è accaduto durante il processo di conversione. Spostandoli nella cartella degli intermedi ora avrai la possibilità di dimenticare dove siamo e ripetere i passaggi.

  16. Ripeti i passaggi 9-14 per ogni .docxfile esportato da OneNote.

  17. Ora hai una cartella per ogni scheda, con un mucchio di .mdfile separati , una per ogni pagina! Inoltre una mediacartella in ogni sottocartella contenente immagini nella scheda OneNote.

  18. Consiglio di esportare ciascuno dei tuoi blocchi appunti OneNote come .mhtfile (pagina Web a file singolo) o, se preferisci, a .pdf. In questo modo, in caso di perdita di formattazione o altre informazioni in alcuni dei tuoi file di markdown, a causa della conversione multipla, puoi sempre tornare indietro e vedere facilmente come dovrebbe apparire nel .mhtfile. Inoltre, consiglierei di esportare ciascuno dei tuoi blocchi appunti di OneNote come .onepkgfile (pacchetto OneNote), quindi hai una bella copia di esportazione finale se mai vuoi riaprire il blocco appunti in OneNote nel suo formato di file nativo / originale (questo potrebbe essere utile se, ad esempio, nel .mhtfile mancano anche alcune formattazioni originali che si desidera ripristinare).

  19. Al termine di ogni blocco appunti, fai clic con il pulsante destro del mouse su OneNote e fai clic su "Chiudi questo blocco appunti" in modo da non modificare accidentalmente il blocco appunti e dover riesportare le nuove modifiche. Per le cartelle di markdown, ho anche creato una cartella per ogni blocco note e ho inserito tutte le cartelle delle schede.

  20. Quando hai finito con l'intero progetto di esportazione, puoi andare su OneDrive ed eliminare tutti gli originali dei tuoi notebook OneNote che sono stati sincronizzati lì (assicurati di eseguire il backup dei tuoi file ora, ovviamente! C'è OneDrive per Linux o tu potrebbe provare qualcosa come Syncthing).

  21. Infine, possiamo rinominare tutti i nostri file .md con il titolo della loro pagina OneNote, che è la prima riga di ciascun file, usando due script. Crea i seguenti file:

    File 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
    

    File 2: ~/scripts/recurse.sh

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

    Quindi vai alla cartella delle note ed esegui il recurse.shcomando utilizzando il rename-files-to-first-line.shcomando come argomento:

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

    Vedrai lo script passare attraverso tutti i tuoi file in modo ricorsivo, lanciando alcuni errori sui file con prime righe strane (che non si convertiranno in un nome file) e su altri casi limite. Tuttavia, il mvcomando in rename-files-to-first-lineviene eseguito con argomento -n, che gli impedirà di sovrascrivere qualsiasi file. Potrebbero esserci alcune note che non vengono rinominate, perché la prima riga in esse è vuota o qualcos'altro di strano, ma puoi semplicemente correggere quei pochi file manualmente.

  22. Goditi la tua fuga pulita da OneNote.

Avvertenze:

  • Questo non acquisisce le sottopagine: dovrai ricreare quelle con le sottocartelle, se lo desideri.

  • Non so quanto vada bene con le tabelle: il markdown è comunque un po 'sgraziato per le tabelle.

  • Esistono probabilmente altri tipi di formattazione, come i caratteri, che vengono persi o rovinati nell'esportazione. Ma per testi e immagini ricchi, funziona abbastanza bene!


1
Non funzionerà se hai allegati in OneNote
Nikhil,

4
Wow, che casino. Non avrei mai dovuto iniziare a prendere appunti con questo software. Grazie per aver scritto tutto questo! Nota che ad oggi non esiste ancora alcuna funzione di esportazione per OneNote in macOS.
slhck

Qualcuno ha provato a importare i file MD risultanti da questo in Notion? ha funzionato?
JayPex,

Inoltre, questo non è realistico se si hanno centinaia di pagine in una sezione di notebook ognuna con un titolo univoco, funziona solo se si è utilizzato uno stile di denominazione specifico OP. Apprezzo comunque lo sforzo.
JayPex,

6

L'altra risposta non l'ha tagliata per me, perché le mie note non sono voci di diario, ma ho trovato una soluzione utilizzando l'API Graph di Microsoft . Ciò significa che non devi nemmeno eseguire OneNote, richiede solo che le tue note siano sincronizzate con il tuo account Microsoft e quindi puoi ottenere le tue note come HTML perfettamente formattato (che puoi visualizzare nel browser o convertire in qualsiasi formato preferisci usando Pandoc).

La magia accade in questo script Python . Esegue un semplice server Web locale che è possibile utilizzare per accedere al proprio account Microsoft e, una volta fatto, scarica tutte le note come HTML, oltre a immagini e allegati nei loro formati originali, e le memorizza nella gerarchia dei file preservando la struttura originale dei tuoi blocchi note (compresi l'ordine delle pagine e le sottopagine).

Prima di poter eseguire lo script, è necessario registrare una "app" in Microsoft Azure in modo che possa accedere all'API Graph:

  1. Vai su https://aad.portal.azure.com/ e accedi con il tuo account Microsoft.
  2. Selezionare "Azure Active Directory" e quindi "Registrazioni app" in "Gestisci".
  3. Seleziona "Nuova registrazione". Scegli un nome qualsiasi, imposta "Tipi di account supportati" su "Account in qualsiasi directory organizzativa e account Microsoft personali" e in "Reindirizzamento URI", seleziona Web e inserisci http://localhost:5000/getToken. Registrati.
  4. Copia "ID applicazione (client)" e incollalo come client_idall'inizio dello script Python.
  5. Seleziona "Certificati e segreti" in "Gestisci". Premi "Nuovo segreto cliente", scegli un nome e conferma.
  6. Copia il segreto del client e incollalo come secretnello script Python.
  7. Seleziona "Autorizzazioni API" in "Gestisci". Premi "Aggiungi un'autorizzazione", scorri verso il basso e seleziona OneNote, scegli "Autorizzazioni delegate" e seleziona "Note. Leggi" e "Note. Leggi tutto". Premi "Aggiungi permessi".

Quindi è necessario installare le dipendenze di Python. Assicurarsi di avere Python 3.7 (o versione successiva) installato e installare le dipendenze usando il comando pip install flask msal requests_oauthlib.

Ora puoi eseguire lo script. In un terminale, accedere alla directory in cui si trova lo script ed eseguirlo utilizzando python onenote_export.py. Ciò avvierà un server Web locale sulla porta 5000.

Nel tuo browser vai a http: // localhost: 5000 e accedi al tuo account Microsoft. La prima volta che lo fai, dovrai anche accettare che l'app sia in grado di leggere le tue note di OneNote. (Ciò non consente a terzi di accedere ai dati, purché non si condividano l'ID client e il segreto creati nel portale di Azure). Successivamente, torna al terminale per seguire l'avanzamento.

Nota: Microsoft limita il numero di richieste che è possibile effettuare in un determinato periodo di tempo. Pertanto, se hai molte note potresti eventualmente vedere messaggi come questo nel terminale: Too many requests, waiting 20s and trying again.questo non è un problema, ma significa che l'intero processo può richiedere del tempo. Inoltre, la sessione di accesso può scadere dopo un po ', il che si traduce in a TokenExpiredError. In questo caso, ricaricare semplicemente http: // localhost: 5000 e lo script continuerà (saltando i file già scaricati).


Buona soluzione più semplice, ma questo ottiene i file in HTML, non MD
JayPex

1
Come ho brevemente menzionato nella risposta, è possibile utilizzare PandC per convertire HTML in markdown (ad esempio pandoc --from html --to markdown -o output.md input.html). Tuttavia, va notato che non tutte le pagine di OneNote possono essere rappresentate perfettamente nel markdown, quindi potresti perdere alcuni dettagli di formattazione. Inoltre, pandoc supporta diversi tipi di markdown, quindi potresti voler leggere la documentazione per trovarne uno adatto al tuo uso.
Danmou,

Ok sicuramente merita una prova prima di intraprendere il lungo percorso nella prima risposta. Grazie!
JayPex,

4

Per esportare le tue pagine OneNote in markdown individuali ( .md) devi installare Joplin ed Evernote .

Come suggerito in questo link , prima devi importare le note in Evernote. Quindi esporta tutte le note in un .enexfile da Evernote e importale in Joplin.

Joplin ha la possibilità di esportare le note come .mdfile.

Nota: suggerisco di utilizzare anticipatamente i flag in Evernote se si desidera raggruppare le note, poiché il modo Evernote per mantenere la gerarchia tra le note è diverso da OneNote.


1
Sei fantastico! La tua risposta mi ha ispirato a importare sezioni di quaderni in Evernote, quindi importarle da Evernote in Notion! Grazie
JayPex il

0

Ho trovato un lavoro non programmatico per questo.

TLDR;

Esporta le note da OneNote in Evernote, quindi in Notion (Opzionale), quindi esporta come singoli file con un formato a tua scelta.


Ho faticato molto ad esportare i miei appunti da Notion, uno sguardo online restituirà alcuni modi davvero sporchi di esportare e dividere le pagine di OneNote e trasformarle in file md o html. Che casino!

Fondamentalmente puoi importare molto facilmente le tue sezioni OneNote in Evernote, dopo aver scaricato Evernote per desktop è abbastanza facile farlo, quindi da lì è anche altrettanto facile importarle in Notion.

Basta essere consapevoli, potresti voler importare singole sezioni se vuoi mantenere la stessa organizzazione, altrimenti potresti semplicemente importare in blocco tutte le sezioni, le pagine saranno taggate con i nomi delle sezioni e questo è tutto fino in fondo.

Tieni presente che dovrai aver sincronizzato i tuoi blocchi appunti di OneNote accedendo al tuo account Microsoft / Outlook e verificando che siano sincronizzati tramite OneNote 2016.

Spero che questo ti aiuti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.