¿Cómo puedo exportar todas las páginas de OneNote a archivos de descuento individuales?

14

Me estoy mudando a Linux y el último obstáculo es salir de OneNote. Me gustaría exportar todos mis cuadernos para que cada página vaya a un archivo de descuento individual.

He intentado muchas cosas: este hilo tenía varias sugerencias, pero todas están desactualizadas.

Si pudiera hacer que OneNote exportara todas las páginas como archivos .docx individuales, sería fácil usar pandoc para convertirlos en archivos de rebajas individuales. Pero, OneNote solo exportará varias páginas como un solo archivo. Entonces, una ruta sería encontrar una manera de automatizar la exportación de cada página individualmente.

Otra opción es exportar cuadernos completos a la vez como archivos .docx, convertirlos a markdown con pandoc y luego dividir los archivos, pero no soy lo suficientemente astuto como para que csplit corte los archivos correctamente solo con su básico expresiones regulares, y no lo suficiente de un asistente de awk para hacer que envíe archivos con la expresión regular correcta y completa.

Puede alguien ayudarme con esto?

Anders
fuente

Respuestas:

12

Terminé encontrando una tubería de exportación, pero fue un dolor. Aquí están mis notas de hacer eso:

flujo de trabajo:

  1. Apague sus redes para evitar que OneNote realice una larga sincronización de OneDrive después de cada exportación.

  2. En la lista Cuadernos, expanda el cuaderno para ver todas las pestañas.

  3. Haga clic derecho en una pestaña y haga clic en "Exportar ...".

  4. Haga clic en el menú desplegable de tipo de archivo y presione Mpara seleccionar el .docxformato. Presione Enterpara seleccionarlo.

  5. Presione Enternuevamente para guardar el archivo exportado.

  6. Repita los pasos 2-5 para cada pestaña en el cuaderno.

  7. Configure Pandoc y abra una ventana de PowerShell o cmd.

  8. cd en el directorio donde .docxse encuentran los archivos exportados .

  9. Para cada .docxarchivo exportado , use el siguiente comando de pandoc para convertirlo en markdown (reemplace journalcon el nombre de su archivo):

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

    Aquí hay una explicación del comando: --extract-media=''le dice a pandoc que extraiga imágenes del .docxarchivo y las coloque en la subcarpeta predeterminada (llamada 'media' por defecto). --wrap=preservele dice a pandoc que no ajuste el archivo de salida con saltos de línea (que es el valor predeterminado). El siguiente campo es el nombre de archivo de entrada, y -osignifica 'salida', también lo journal.mdes el nombre de archivo de salida.

    Si no desea dividir este archivo (por ejemplo, si su pestaña contenía solo una página), vaya al paso 15.

    (Cuando esté haciendo un montón de estos, puede presionar la tecla (flecha hacia arriba) para recuperar el comando anterior en el shell, luego editar el nombre del archivo).

  10. Cree una nueva carpeta para almacenar las páginas en la pestaña. Para este ejemplo, en este momento todas las páginas de nuestra pestaña Diario en OneNote están agrupadas journal.md. Cree una carpeta llamada journalque almacenará las páginas separadas finales como archivos .md individuales.

  11. Si hubiera alguna imagen en el .docxarchivo, se exportará a una nueva carpeta llamada media. Arrastre la carpeta multimedia, si existe, a la carpeta que acaba de crear ahora. (Es por eso que necesitamos hacer cada operación de pandoc por separado, porque cada exportación creará una carpeta de medios separada, y queremos mantenerlos separados para que los enlaces en los archivos de descuento funcionen correctamente. Podríamos escribir un script inteligente para hacer todo esto automáticamente, pero llevará menos tiempo hacerlo manualmente, a menos que tenga una gran cantidad de cuadernos). (Nota: puede guardar un paso colocando el nombre de la carpeta deseada en las comillas simples del --extract-media=''argumento, para .docxarchivos con imágenes, se creará una carpeta automáticamente para usted).

  12. Abra una terminal bash y cd en el directorio que contiene el .mdarchivo. La carpeta que creó en el paso 10 debe ser una subcarpeta de esta (a menos que arregle la ruta en el siguiente comando).

  13. Si aún no lo ha hecho, haga clic en el ícono de la ventana de Windows Bash, haga clic en Propiedades, marque Modo de edición rápida y luego haga clic en Aceptar. Ahora haga clic en el icono de la ventana Bash de Windows nuevamente, esta vez haga clic en Valores predeterminados, marque el Modo Edición rápida y luego haga clic en Aceptar (para que las nuevas ventanas Bash que cree en el futuro recuerden esta configuración). Ahora puede seleccionar texto en el terminal y presionar Ctrl+ Cpara copiar, o hacer clic derecho en la ventana del terminal para pegar el texto en el portapapeles. Ahora podemos preparar nuestro comando en una ubicación separada y pegar rápidamente cada versión en Bash.

  14. Personalice el siguiente comando y ejecútelo para cada .mdarchivo que desee dividir en páginas individuales:

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

    (Escríbalo como una línea).

    Como puede ver, journal.mdes el nombre de nuestro archivo de rebajas (en el directorio actual, indicado por ./), la segunda aparición de journal(después --prefix=') es el nombre de nuestra subcarpeta que contendrá los archivos divididos y journalentryes el nombre de cada archivo (seguido de un número de índice).

    Si desea comprender el comando, aquí hay una explicación: --keep-filestodavía imprime archivos cuando se encuentran errores o al final del archivo, asegurando que la última página se imprima correctamente (ya que no termina en el patrón de nuestra expresión regular). --prefixestablece el esquema de nomenclatura de los archivos de salida. --suffix-formatnos permite establecer nuestra extensión de archivo ( .mden este caso), pero debemos incluir %ipara la instrucción sprintf que genera el número de índice del archivo.  --elide-empty-filesomite la salida de archivos vacíos, lo que no nos importa. Finalmente, la expresión regular, que comienza con '/y termina con/-2', define cuándo dividir el archivo: dice "Cuando encuentre (/) al comienzo de la línea (^) lo siguiente (() lunes o (\ |) martes o miércoles o jueves o viernes o sábado o domingo () ) seguido de una coma, retroceda dos líneas (-2) "y divida el archivo allí, generando lo que tenemos hasta ahora. El bit final '{*}', repite el comando anterior indefinidamente, hasta llegar al final del archivo.

  15. Arrastra los archivos .docxy .mda una carpeta, por ejemplo, una carpeta que creas ahora llamada intermediates. O simplemente puede eliminarlos. Es bueno guardarlos por un tiempo, hasta que se sienta cómodo con su nuevo formato de archivo, en caso de que quiera regresar y hacer referencia a algo que sucedió durante el proceso de conversión. Moverlos a la carpeta de intermediarios ahora arruinará la posibilidad de olvidar dónde estamos y repetir los pasos.

  16. Repita los pasos 9-14 para cada .docxarchivo que exportó de OneNote.

  17. Ahora tiene una carpeta para cada pestaña, con un montón de .mdarchivos separados , ¡una para cada página! Además de una mediacarpeta en cada subcarpeta que tenía imágenes en la pestaña OneNote.

  18. Recomiendo exportar cada una de sus libretas de OneNote como un .mhtarchivo (página web de un solo archivo) o, si lo prefiere, a .pdf. De esta manera, si se perdió el formato u otra información en algunos de sus archivos de descuento, debido a la conversión múltiple, siempre puede regresar y ver fácilmente cómo se suponía que debía verse en el .mhtarchivo. Además, recomendaría exportar cada una de sus libretas de OneNote como un .onepkgarchivo (paquete de OneNote), por lo que tiene una buena copia de exportación final si alguna vez desea volver a abrir la notebook en OneNote en su formato de archivo original / original (esto podría ser útil si, por ejemplo, al .mhtarchivo también le falta el formato original que desea recuperar).

  19. Cuando termine cada cuaderno, haga clic con el botón derecho en el cuaderno en OneNote y haga clic en "Cerrar este cuaderno" para que no edite accidentalmente el cuaderno y tenga que volver a exportar sus nuevos cambios. Para las carpetas de rebajas, también creé una carpeta para cada cuaderno y puse todas las carpetas de pestañas en él.

  20. Cuando haya terminado con todo el proyecto de exportación, puede ir a su OneDrive y eliminar todos los originales de sus cuadernos OneNote que se hayan sincronizado allí (¡asegúrese de que está haciendo una copia de seguridad de sus propios archivos ahora, por supuesto! Existe OneDrive para Linux, o usted podría intentar algo como Syncthing).

  21. Finalmente, podemos cambiar el nombre de todos nuestros archivos .md a su título de página de OneNote, que es la primera línea de cada archivo, usando dos scripts. Crea los siguientes archivos:

    Archivo 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
    

    Archivo 2: ~/scripts/recurse.sh

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

    Luego navegue a su carpeta de notas y ejecute el recurse.shcomando usando el rename-files-to-first-line.shcomando como argumento:

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

    Verá que el script revisa todos sus archivos de forma recursiva, arrojando algunos errores en archivos con primeras líneas extrañas (que no se convertirán en un nombre de archivo) y en otros casos extremos. Sin embargo, el mvcomando en rename-files-to-first-linese ejecuta con argumento -n, lo que evitará que sobrescriba los archivos. Puede haber algunas notas que no cambien de nombre, porque la primera línea en ellas está en blanco o algo extraño, pero puede corregir esos pocos archivos manualmente.

  22. Disfruta de tu escape limpio de OneNote.

Advertencias:

  • Esto no captura las subpáginas; si lo desea, tendrá que volver a crear aquellas con subcarpetas.

  • No sé qué tan bien funciona con las tablas; de todos modos, el descuento es un poco torpe para las tablas.

  • Probablemente hay otros tipos de formato, como las fuentes, que se pierden o se arruinan en la exportación. Pero para texto e imágenes enriquecidos, ¡funciona bastante bien!

Anders
fuente
1
No funcionará si tiene archivos adjuntos en OneNote
Nikhil
44
Wow, que desastre. Nunca debería haber comenzado a tomar notas con este software. ¡Gracias por escribir todo esto! Tenga en cuenta que a partir de hoy, todavía no hay una función de exportación para OneNote en macOS.
slhck
¿Alguien ha tratado de importar los archivos MD resultantes de esto a Notion? ¿funcionó?
JayPex
Además, esto no es realista si tiene cientos de páginas en una sección de cuaderno, cada una con un título único, solo funciona si tiene un estilo de denominación específico que OP ha utilizado. Aunque aprecio el esfuerzo.
JayPex
6

La otra respuesta no fue suficiente para mí, porque mis notas no son entradas de diario, pero encontré una solución usando Graph API de Microsoft . Esto significa que ni siquiera tiene que ejecutar OneNote, solo requiere que sus notas estén sincronizadas con su cuenta de Microsoft y luego puede obtener sus notas como HTML perfectamente formateado (que puede ver en el navegador o convertir al formato que prefiera) usando Pandoc).

La magia sucede en este script de Python . Ejecuta un servidor web local simple que puede usar para iniciar sesión en su cuenta de Microsoft y una vez que lo hace, descarga todas sus notas como HTML, más imágenes y archivos adjuntos en sus formatos originales, y los almacena en la jerarquía de archivos conservando la estructura original de sus cuadernos (incluido el orden de las páginas y las subpáginas).

Antes de poder ejecutar el script, debe registrar una "aplicación" en Microsoft Azure para que pueda acceder a la API Graph:

  1. Vaya a https://aad.portal.azure.com/ e inicie sesión con su cuenta de Microsoft.
  2. Seleccione "Azure Active Directory" y luego "Registros de aplicaciones" en "Administrar".
  3. Seleccione "Nuevo registro". Elija cualquier nombre, establezca "Tipos de cuenta admitidos" en "Cuentas en cualquier directorio de la organización y cuentas personales de Microsoft" y en "Redirigir URI", seleccione Web e ingrese http://localhost:5000/getToken. Registrarse.
  4. Copie el "ID de la aplicación (cliente)" y péguelo como client_idal comienzo del script Python.
  5. Seleccione "Certificados y secretos" en "Administrar". Presione "Nuevo secreto de cliente", elija un nombre y confirme.
  6. Copie el secreto del cliente y péguelo como secreten el script de Python.
  7. Seleccione "Permisos API" en "Administrar". Presione "Agregar un permiso", desplácese hacia abajo y seleccione OneNote, elija "Permisos delegados" y marque "Notes.Read" y "Notes.Read.All". Presione "Agregar permisos".

Entonces necesita instalar las dependencias de Python. Asegúrese de tener instalado Python 3.7 (o más reciente) e instale las dependencias con el comando pip install flask msal requests_oauthlib.

Ahora puedes ejecutar el script. En una terminal, navegue hasta el directorio donde se encuentra el script y ejecútelo usando python onenote_export.py. Esto iniciará un servidor web local en el puerto 5000.

En su navegador, vaya a http: // localhost: 5000 e inicie sesión en su cuenta de Microsoft. La primera vez que lo haga, también deberá aceptar que la aplicación puede leer sus notas de OneNote. (Esto no otorga a terceros acceso a sus datos, siempre y cuando no comparta la identificación y el secreto del cliente que creó en el portal de Azure). Después de esto, regrese a la terminal para seguir el progreso.

Nota: Microsoft limita cuántas solicitudes puede hacer dentro de un período de tiempo determinado. Por lo tanto, si tiene muchas notas, es posible que vea mensajes como este en el terminal: Too many requests, waiting 20s and trying again.esto no es un problema, pero significa que todo el proceso puede llevar un tiempo. Además, la sesión de inicio de sesión puede caducar después de un tiempo, lo que resulta en a TokenExpiredError. Si esto sucede, simplemente vuelva a cargar http: // localhost: 5000 y el script continuará (omitiendo los archivos que ya descargó).

danmou
fuente
Buena solución más simple, pero esto obtiene los archivos en HTML, no en MD
JayPex
1
Como mencioné brevemente en la respuesta, puede usar pandoc para convertir HTML a Markdown (por ejemplo pandoc --from html --to markdown -o output.md input.html). Sin embargo, debe tenerse en cuenta que no todas las páginas de OneNote pueden representarse perfectamente en el descuento, por lo que puede perder algunos detalles de formato. Además, pandoc admite varios tipos de rebajas, por lo que es posible que desee leer la documentación para encontrar una que se adapte a su uso.
Danmou
Ok, ciertamente vale la pena intentarlo antes de tomar la ruta larga en la primera respuesta. ¡Gracias!
JayPex
4

Para exportar sus páginas de OneNote a Markdown individual ( .md), debe instalar Joplin y Evernote .

Como se sugiere en este enlace , primero importa las notas en Evernote. Luego, exporte todas las notas a un .enexarchivo desde Evernote e impórtelas a Joplin.

Joplin tiene la opción de exportar las notas como .mdarchivos.

Nota: sugiero usar banderas en Evernote de antemano si desea agrupar sus notas, ya que la forma de Evernote de mantener la jerarquía entre las notas es diferente de OneNote.

bruno
fuente
1
¡Usted es maravilloso! ¡Tu respuesta me inspiró a importar secciones de cuaderno en Evernote, luego importarlas de Evernote a Notion! Gracias
JayPex
0

He encontrado un trabajo no programático para esto.

TLDR;

Exporte notas de OneNote a Evernote, luego a Notion (Opcional) y luego exporte como archivos individuales con el formato que elija.


Realmente he tenido problemas para exportar mis notas de Notion, un vistazo en línea devolverá algunas formas realmente sucias de exportar y dividir páginas de OneNote y convertirlas en archivos md o html. ¡Que desastre!

Básicamente, puedes importar fácilmente tus secciones de OneNote en Evernote, después de descargar Evernote para escritorio es bastante fácil hacerlo, y desde allí, también es igualmente fácil importarlas en Notion.

Solo tenga en cuenta que es posible que desee importar secciones individuales si desea mantener la misma organización, de lo contrario, podría importar en masa todas las secciones, las páginas se etiquetarán con los nombres de las secciones y eso también se aplicará a Notion.

Tenga en cuenta que deberá haber sincronizado sus blocs de notas de OneNote iniciando sesión en su cuenta de Microsoft / Outlook y verificando que estén sincronizados con OneNote 2016.

Espero que esto ayude.

JayPex
fuente