Як я можу експортувати всі сторінки OneNote до окремих файлів розмітки?


14

Я переходжу на Linux, і остання перешкода - це вийти з OneNote. Я хотів би експортувати всі свої зошити, щоб кожна сторінка переходила в окремий файл розмітки.

Я спробував багато речей - ця тема мала кілька пропозицій, але всі вони застаріли.

Якби я міг змусити OneNote експортувати всі сторінки як окремі файли .docx, було б легко використовувати pandoc для їх перетворення в окремі файли розмітки. Але OneNote буде експортувати лише кілька сторінок як один файл. Отже, одним із маршрутів було б знайти спосіб автоматичного експорту кожної окремої сторінки окремо.

Інший варіант - експортувати цілі ноутбуки одночасно у форматі .docx, конвертувати їх у розмітку за допомогою pandoc, а потім розділити файли, але мені недостатньо майстра з регулярних виразів, щоб отримати csplit, щоб правильно вирізати файли лише з його базовим регулярні вирази, а не достатньо майстра awk, щоб змусити його виводити файли з правильним і повним регулярним виразом.

Хтось може мені допомогти у цьому?

Відповіді:


12

Я все-таки знайшов експортний трубопровід, але це був біль. Ось мої записки від цього:

робочий процес:

  1. Вимкніть свою мережу, щоб запобігти OneNote виконувати тривалу синхронізацію OneDrive після кожного експорту.

  2. У списку Блокноти розгорніть зошит, щоб побачити всі вкладки.

  3. Клацніть правою кнопкою миші на вкладці та натисніть "Експорт ...".

  4. Клацніть спадне меню типу файлів і натисніть, Mщоб вибрати .docxформат. Натисніть, Enterщоб вибрати його.

  5. Натисніть Enterще раз, щоб зберегти експортований файл.

  6. Повторіть кроки 2-5 для кожної вкладки в зошиті.

  7. Налаштуйте pandoc та відкрийте вікно PowerShell або cmd.

  8. CD в ​​каталог, де знаходяться експортовані .docxфайли.

  9. Для кожного експортованого .docxфайлу використовуйте таку команду pandoc, щоб перетворити його на розмітку (замінити journalна ім'я вашого файлу):

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

    Ось пояснення команди: --extract-media=''повідомляє pandoc витягувати зображення з .docxфайлу і поміщати їх у підпапку за замовчуванням (за замовчуванням називається "media"). --wrap=preserveповідомляє pandoc не вкручувати вивідний файл з переривами рядків (це за замовчуванням). Наступним полем є ім'я вхідного файлу і -oозначає «вихідний», таким же journal.mdє і вихідний файл.

    Якщо ви не хочете розділяти цей файл (наприклад, якщо на вкладці містилася лише одна сторінка), перейдіть до кроку 15.

    (Коли ви робите купу цих, ви можете натиснути клавішу (стрілка вгору), щоб згадати попередню команду в оболонці, а потім відредагувати назву файлу.)

  10. Створіть нову папку для зберігання сторінок на вкладці. Для цього прикладу, зараз усі сторінки з нашої вкладки Журнал в OneNote збиваються разом journal.md. Створіть папку під назвою, journalяка зберігатиме остаточні розділені сторінки як окремі .md файли.

  11. Якщо у .docxфайлі були зображення , вони будуть експортовані в нову папку під назвою media. Перетягніть папку мультимедіа, якщо вона існує, у папку, яку ви тільки що створили. (Ось чому нам потрібно робити кожну операцію pandoc окремо, оскільки кожен експорт створить окрему медіа-папку, і ми хочемо зберегти їх окремо, щоб посилання у файлах розмітки працювали правильно. Ми могли написати розумний сценарій, щоб зробити це все автоматично, але це займе менше часу, щоб зробити це вручну, якщо у вас немає величезної кількості зошитів.) (Примітка. Ви можете зберегти крок, помістивши потрібне ім'я папки в єдині лапки --extract-media=''аргументу - для .docxфайлів із зображеннями, папка буде створена автоматично для вас.)

  12. Відкрийте bash-термінал і перейдіть до каталогу, що містить .mdфайл. Папка, яку ви створили на кроці 10, повинна бути підпапкою цієї (якщо ви не зафіксували шлях у наступній команді).

  13. Якщо ви ще цього не зробили, клацніть піктограму вікна Windows Bash, натисніть кнопку Властивості, перевірте режим швидкого редагування та натисніть кнопку ОК. Тепер ще раз натисніть на значок вікна Windows Bash, цього разу натисніть кнопку За замовчуванням, перевірте режим QuickEdit, а потім натисніть кнопку ОК (тому нові 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' '{*}'

    (Введіть його як один рядок.)

    Як бачите, journal.mdце ім'я нашого файлу розмітки (у поточній папці, позначається ./), другим виникненням journal(після --prefix=') є ім'я нашої підпапки, яка буде містити розділені файли, і journalentryце те, що кожен файл буде названий (далі - номер індексу).

    Якщо ви хочете зрозуміти команду, ось пояснення: --keep-filesвсе-таки друкується файли, коли виникають помилки або кінець файлу, гарантуючи, що остання сторінка буде виведена правильно (оскільки вона не закінчується в шаблоні нашого регулярного виразу). --prefixвстановлює схему іменування вихідних файлів. --suffix-formatдозволяє нам встановити наше розширення файлу ( .mdв даному випадку), але ми повинні включити %iдля оператора sprintf, який виводить номер індексу файлу.  --elide-empty-filesпропускає виведення порожніх файлів, які нас не цікавлять. Нарешті, регулярний вираз, який починається з '/і закінчується/-2', визначає, коли слід розділити файл: він говорить "Коли ви знайдете (/) на початку рядка (^) наступне (() понеділок або (\ |) вівторок або середу чи четвер або п'ятницю або суботу або неділю () ), після чого ставиться кома, відступите два рядки (-2) "і розділіть файл там, вивівши те, що ми маємо досі. Заключний біт, '{*}'повторює попередню команду нескінченно, до кінця файлу не буде досягнуто.

  15. Перетягніть файли .docxта .mdфайли у папку, скажімо, папка, яку ви створили зараз, називається intermediates. Або ви можете просто видалити їх. Приємно зберегти їх на деякий час, поки вам не зручно буде ваш новий формат файлу, на випадок, якщо ви хочете повернутися назад і посилатися на щось, що сталося під час перетворення. Перемістивши їх у папку "Проміжні продукти", тепер буде втрачено шанс забути, де ми знаходимось, і повторити кроки.

  16. Повторіть кроки 9-14 для кожного .docxфайлу, який ви експортували з OneNote.

  17. Тепер у вас є одна папка для кожної вкладки, з купою окремих .mdфайлів у ній, по одній для кожної сторінки! Плюс mediaпапка у кожній підпапці, яка мала зображення на вкладці OneNote.

  18. Я рекомендую експортувати кожен із ваших ноутбуків OneNote у вигляді .mhtфайлу (веб-сторінка з одним файлом) або, якщо ви хочете, як .pdf. Таким чином, якщо в деяких ваших файлах розмітки було втрачено форматування чи іншу інформацію, через багаторазове перетворення ви завжди можете повернутися назад і легко побачити, як це повинно виглядати у .mhtфайлі. Крім того, я рекомендую експортувати кожен із своїх ноутбуків OneNote як .onepkgфайл (пакет OneNote), тому у вас є приємна остаточна експортна копія, якщо ви хочете знову відкрити Ноутбук в OneNote у його рідному / оригінальному форматі файлу (це може бути корисно якщо, наприклад, у .mhtфайлі також відсутнє оригінальне форматування, яке ви хочете відновити).

  19. Коли ви закінчите кожен ноутбук, клацніть правою кнопкою миші на ноутбуці в OneNote і натисніть «Закрити цей ноутбук», щоб ви не випадково редагували ноутбук і не довелося повторно експортувати свої нові зміни. Для папок розмітки я також створив папку для кожного блокнота і помістив у нього всі папки вкладок.

  20. Коли ви закінчите весь експортний проект, ви можете перейти до свого OneDrive та видалити всі оригінали своїх ноутбуків OneNote, які там синхронізовані (звичайно, переконайтеся, що ви зараз створюєте резервні копії власних файлів! Є OneDrive для Linux, або ви може спробувати щось на кшталт Syncthing).

  21. Нарешті, ми можемо перейменувати всі .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команда в rename-files-to-first-lineвиконується з аргументом -n, що не дозволить їй перезаписати будь-які файли. Можливо, є кілька приміток, які не перейменовуються, оскільки перший рядок у них порожній або щось інше дивне, але ви можете виправити ці кілька файлів вручну.

  22. Гуляйте в чистому втечі від OneNote.

Застереження:

  • Це не захоплює підсторінки - вам доведеться відтворити ті, які мають підпапки, якщо хочете.

  • Я не знаю, наскільки добре це робиться з таблицями - розмітка все-таки трохи неприваблива для таблиць.

  • Ймовірно, є й інші види форматування, такі як шрифти, які втрачаються або перекручуються при експорті. Але для насиченого тексту та зображень це працює досить добре!


1
Не буде працювати, якщо у вас є вкладення в OneNote
Nikhil

4
Нічого собі, який безлад. Я ніколи не повинен був починати робити нотатки з цим програмним забезпеченням. Дякуємо, що все це записали! Зауважте, що на сьогоднішній день досі не існує функції експорту для OneNote під macOS.
slhck

Хто-небудь намагався імпортувати отримані файли MD з цього в поняття? це спрацювало?
JayPex

Крім того, це нереально, якщо у розділі зошита є сотні сторінок, кожна з яких має унікальний заголовок, працює лише в тому випадку, якщо у вас використовується специфічний стиль іменування, який використовується в ОП. Я дійсно ціную зусилля, хоча.
JayPex

6

Інша відповідь не вирізала мене, оскільки мої замітки - це не записи журналів, але я знайшов рішення за допомогою API Graph Graph від Microsoft . Це означає, що вам навіть не потрібно запускати OneNote, просто потрібно, щоб ваші нотатки були синхронізовані з вашим обліковим записом Microsoft, і тоді ви зможете отримати свої нотатки як ідеально відформатований HTML (який ви можете переглядати в браузері або конвертувати у будь-який формат, який ви бажаєте за допомогою Пандока).

Магія відбувається в цьому сценарії Python . Він запускає простий локальний веб-сервер, який ви можете використовувати для входу у свій обліковий запис Microsoft, і як тільки ви це завантажуєте, всі ваші нотатки у форматі HTML, а також зображення та вкладені файли у їх оригінальних форматах та зберігають їх у ієрархії файлів із збереженням оригінальної структури ваших блокнотів (включаючи порядок сторінок та підсторінки).

Перш ніж запустити сценарій, потрібно зареєструвати "додаток" у Microsoft Azure, щоб він мав доступ до API Graph:

  1. Перейдіть на сторінку https://aad.portal.azure.com/ та увійдіть у свій обліковий запис Microsoft.
  2. Виберіть "Активний каталог Azure", а потім "Реєстрація додатків" у розділі "Керування".
  3. Виберіть "Нова реєстрація". Виберіть будь-яке ім'я, встановіть "Підтримувані типи облікових записів" на "Облікові записи в будь-якій організації та особистих облікових записах Microsoft", а в розділі "Переадресація URI" виберіть Інтернет та введіть http://localhost:5000/getToken. Зареєструйтесь.
  4. Скопіюйте ідентифікатор програми (клієнта) та вставте його, як 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.

У своєму браузері перейдіть до http: // localhost: 5000 та увійдіть у свій обліковий запис Microsoft. Перший раз, коли ви це зробите, вам також доведеться прийняти, що програма може читати ваші нотатки OneNote. (Це не надає стороннім особам доступ до ваших даних, якщо ви не поділитеся ідентифікатором клієнта та секретом, створеним на порталі Azure). Після цього поверніться до терміналу, щоб слідкувати за прогресом.

Примітка: Microsoft обмежує кількість запитів, які ви можете зробити протягом певного періоду часу. Тому, якщо у вас є багато приміток, ви, зрештою, в терміналі можете побачити подібні повідомлення: Too many requests, waiting 20s and trying again.Це не проблема, але це означає, що весь процес може зайняти деякий час. Також сеанс входу може закінчитися через деякий час, що призводить до появи TokenExpiredError. Якщо це трапиться, просто перезавантажте http: // localhost: 5000 і сценарій продовжиться (пропускаючи вже завантажені файли).


Гарне простіше рішення, але це отримує файли в HTML, а не MD
JayPex

1
Як я коротко згадував у відповіді, ви можете використовувати pandoc для перетворення HTML у розмітку (наприклад pandoc --from html --to markdown -o output.md input.html). Однак слід зазначити, що не всі сторінки OneNote можуть бути представлені ідеально у розмітці, тому ви можете втратити деякі деталі форматування. Крім того, pandoc підтримує декілька ароматів розмітки, тож ви можете прочитати документацію, щоб знайти той, який відповідає вашому використанню.
danmou

Добре, звичайно, варто спробувати, перш ніж пройти довгий маршрут у першій відповіді. Дякую!
JayPex

4

Щоб експортувати ваші сторінки OneNote до індивідуальної розмітки ( .md), слід встановити Joplin та Evernote .

Як пропонується в цьому посиланні , спочатку ви імпортуєте нотатки в Evernote. Потім експортуйте всі нотатки у .enexфайл із Evernote та імпортуйте їх у Joplin.

Joplin має можливість експортувати нотатки як .mdфайли.

Примітка. Я пропоную заздалегідь використовувати прапори в Evernote, якщо ви хочете згрупувати свої нотатки, оскільки спосіб Evernote зберігати ієрархію між нотами відрізняється від OneNote.


1
Ви чудові! Ваша відповідь надихнула мене імпортувати розділи ноутбуків у Evernote, а потім імпортувати їх із Evernote у Notion! Спасибі
JayPex

0

Я знайшов для цього непрограмну роботу.

TLDR;

Експортуйте нотатки з OneNote в Evernote, потім у Notion (необов'язково), а потім експортуйте як окремі файли з обраним вами форматом.


Я дуже намагаюся експортувати свої нотатки з Notion, огляд в Інтернеті поверне кілька дійсно нечистих способів експорту та розділення сторінок OneNote та перетворення їх у файли md чи html. Який безлад!

По суті, ви можете дуже легко імпортувати свої розділи OneNote в Evernote, після завантаження Evernote для робочого столу це зробити досить просто, тоді звідти їх також однаково легко імпортувати в Notion.

Будьте в курсі, ви можете імпортувати окремі розділи, якщо хочете зберегти ту саму організацію, інакше ви можете просто імпортувати всі розділи, сторінки будуть позначені тегами назв розділів, і це все також в поняття.

Зверніть увагу, що вам потрібно буде синхронізувати свої ноутбуки OneNote, увійшовши до свого облікового запису Microsoft / Outlook та підтвердивши, що вони синхронізовані за допомогою OneNote 2016.

Сподіваюсь, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.