Как я могу экспортировать все страницы 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. Перейдите в каталог, в котором .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, нажмите «Свойства», выберите «Режим QuickEdit», затем нажмите «ОК». Теперь снова щелкните значок окна 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файла (веб-страница с одним файлом) или, если хотите, a .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команда in rename-files-to-first-lineвыполняется с аргументом -n, который предотвращает перезапись любых файлов. Может быть несколько заметок, которые не будут переименованы, потому что первая строка в них пуста или что-то еще странное, но вы можете просто исправить эти несколько файлов вручную.

  22. Погрейтесь в чистом спасении от OneNote.

Предостережения:

  • Это не захватывает подстраницы - вам придется воссоздавать те с подпапками, если хотите.

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

  • Вероятно, существуют другие виды форматирования, такие как шрифты, которые теряются или портятся при экспорте. Но для форматированного текста и изображений это работает довольно хорошо!

Андерс
источник
1
Не будет работать, если у вас есть вложения в OneNote
Nikhil
4
Вау, что за беспорядок Я никогда не должен был делать заметки с этим программным обеспечением. Спасибо за запись всего этого! Обратите внимание, что на сегодняшний день до сих пор нет функции экспорта для OneNote под macOS.
Slhck
Кто-нибудь пробовал импортировать полученные MD-файлы из этого в Notion? это сработало?
JayPex
Кроме того, это нереально, если у вас есть сотни страниц в блокноте, каждая из которых имеет уникальный заголовок, работает только в том случае, если у вас есть конкретный ОП стиля именования. Я ценю усилия, хотя.
JayPex
6

Другой ответ мне не подошел, потому что мои заметки не являются записями в журнале, но я нашел решение, используя Microsoft Graph API . Это означает, что вам даже не нужно запускать OneNote, просто требуется, чтобы ваши заметки синхронизировались с вашей учетной записью Microsoft, а затем вы можете получать свои заметки в виде отлично отформатированного HTML (который вы можете просматривать в браузере или конвертировать в любой формат, который вы предпочитаете). используя Pandoc).

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

Прежде чем вы сможете запустить сценарий, вы должны зарегистрировать «приложение» в Microsoft Azure, чтобы оно могло получить доступ к Graph API:

  1. Перейдите на https://aad.portal.azure.com/ и войдите в свою учетную запись Microsoft.
  2. Выберите «Azure Active Directory», а затем «Регистрация приложений» в разделе «Управление».
  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, и скрипт продолжит работу (пропуская уже загруженные файлы).

danmou
источник
Хорошее простое решение, но это позволяет получать файлы в формате HTML, а не в формате MD
JayPex
1
Как я кратко упомянул в ответе, вы можете использовать pandoc для преобразования HTML в уценку (например pandoc --from html --to markdown -o output.md input.html). Однако следует отметить, что не все страницы OneNote могут быть идеально представлены в уценке, поэтому вы можете потерять некоторые детали форматирования. Кроме того, pandoc поддерживает несколько вариантов уценки, поэтому вы можете прочитать документацию, чтобы найти ту, которая подходит вам.
Данмоу
Хорошо, конечно, стоит попробовать, прежде чем идти по длинному маршруту в первом ответе. Благодаря!
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.

Просто имейте в виду, что вы можете импортировать отдельные разделы, если хотите сохранить одну и ту же организацию, в противном случае вы можете просто импортировать все разделы массово, страницы будут помечены именами разделов, и это также относится к Notion.

Обратите внимание, что вам нужно синхронизировать свои записные книжки OneNote, войдя в свою учетную запись Microsoft / Outlook и проверив, синхронизированы ли они с помощью OneNote 2016.

Надеюсь это поможет.

JayPex
источник