Jak mogę wyeksportować wszystkie strony OneNote do poszczególnych plików przecen?


14

Przeprowadzam się do Linuksa, a ostatnią przeszkodą jest wydostanie się z OneNote. Chciałbym wyeksportować wszystkie zeszyty, aby każda strona trafiała do osobnego pliku przeceny.

Próbowałem wielu rzeczy - ten wątek miał kilka sugestii, ale wszystkie są nieaktualne.

Gdybym mógł przekonać OneNote do wyeksportowania wszystkich stron jako pojedynczych plików docx, łatwo byłoby użyć pandoc do przekonwertowania ich na pojedyncze pliki przeceny. Ale OneNote wyeksportuje tylko wiele stron jako pojedynczy plik. Tak więc jedną z dróg byłoby znalezienie sposobu na zautomatyzowanie eksportu każdej strony z osobna.

Inną opcją jest eksportowanie całych notatników na raz jako pliki .docx, konwertowanie ich do markdown za pomocą pandoc, a następnie dzielenie plików - ale nie jestem wystarczającym kreatorem wyrażeń regularnych, aby csplit mógł poprawnie wyciąć pliki za pomocą samego podstawowego wyrażenia regularne, a za mało kreatora awk, aby uzyskać wyjściowe pliki z poprawnym i pełnym wyrażeniem regularnym.

Czy ktoś może mi w tym pomóc?

Odpowiedzi:


12

W końcu znalazłem rurociąg eksportowy, ale to był problem. Oto moje notatki z tego:

przepływ pracy:

  1. Wyłącz swoje sieci, aby uniemożliwić OneNote wykonywanie długiej synchronizacji OneDrive po każdym eksporcie.

  2. Na liście Notatniki rozwiń notatnik, aby wyświetlić wszystkie karty.

  3. Kliknij kartę prawym przyciskiem myszy i kliknij polecenie „Eksportuj ...”.

  4. Kliknij menu typu pliku i naciśnij, Maby wybrać .docxformat. Naciśnij, Enteraby go wybrać.

  5. Naciśnij Enterponownie, aby zapisać wyeksportowany plik.

  6. Powtórz kroki 2-5 dla każdej karty w notatniku.

  7. Skonfiguruj pandoc i otwórz okno PowerShell lub cmd.

  8. cd do katalogu, w którym znajdują się wyeksportowane .docxpliki.

  9. Dla każdego eksportowanego .docxpliku użyj następującego polecenia pandoc, aby przekonwertować go na markdown (zamień journalna nazwę swojego pliku):

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

    Oto wyjaśnienie polecenia: --extract-media=''mówi pandoc, aby wyodrębnił obrazy z .docxpliku i umieścił je w domyślnym podfolderze (domyślnie zwanym „nośnikiem”). --wrap=preserveinformuje pandoc, aby nie zawijał pliku wyjściowego łamaniem wierszy (co jest ustawieniem domyślnym). Następne pole to wejściowa nazwa pliku i -ooznacza „wynik”, podobnie journal.mdjak wyjściowa nazwa pliku.

    Jeśli nie chcesz dzielić tego pliku (na przykład jeśli karta zawiera tylko jedną stronę), przejdź do kroku 15.

    (Kiedy robisz kilka z nich, możesz nacisnąć klawisz (strzałka w górę), aby przywołać poprzednie polecenie w powłoce, a następnie edytować nazwę pliku).

  10. Utwórz nowy folder do przechowywania stron na karcie. W tym przykładzie teraz wszystkie strony z naszej karty Dziennik w OneNote są połączone journal.md. Utwórz folder o nazwie, journalktóry będzie przechowywać końcowe oddzielone strony jako osobne pliki .md.

  11. Jeśli w .docxpliku były jakieś obrazy , zostaną one wyeksportowane do nowego folderu o nazwie media. Przeciągnij folder multimediów, jeśli istnieje, do właśnie utworzonego folderu. (Dlatego właśnie musimy wykonać każdą operację pandoc osobno, ponieważ każdy eksport utworzy osobny folder multimediów i chcemy zachować te osobne, aby linki w plikach przeceny działały poprawnie. Moglibyśmy napisać sprytny skrypt, aby to wszystko zrobić automatycznie, ale zajmie to mniej czasu, aby zrobić to ręcznie, chyba że masz ogromną liczbę notatników.) (Uwaga: Możesz zapisać krok, umieszczając żądaną nazwę folderu w pojedynczych cudzysłowach --extract-media=''argumentu - w przypadku .docxplików z obrazami, folder zostanie utworzony automatycznie).

  12. Otwórz terminal bash i cd do katalogu zawierającego .mdplik. Folder utworzony w kroku 10 musi być podfolderem tego folderu (chyba że naprawisz ścieżkę w poniższym poleceniu).

  13. Jeśli jeszcze tego nie zrobiłeś, kliknij ikonę okna Windows Bash, kliknij Właściwości, zaznacz Tryb QuickEdit, a następnie kliknij OK. Teraz kliknij ponownie ikonę okna Windows Bash, tym razem kliknij Domyślne, sprawdź Tryb QuickEdit, a następnie kliknij OK (aby nowe okna Bash, które utworzysz w przyszłości, zapamiętały to ustawienie). Teraz możesz zaznaczyć tekst w terminalu i nacisnąć Ctrl+, Caby skopiować, lub kliknąć prawym przyciskiem myszy okno terminala, aby wkleić tekst do schowka. Teraz możemy przygotować nasze polecenie w osobnym miejscu i szybko wkleić każdą wersję do Bash.

  14. Dostosuj następujące polecenie i uruchom je dla każdego .mdpliku, który chcesz podzielić na poszczególne strony:

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

    (Wpisz jako jedną linię.)

    Jak widać, journal.mdjest to nazwa naszego pliku przeceny (w bieżącym katalogu oznaczonym przez ./), drugie wystąpienie journal(po --prefix=') to nazwa naszego podfolderu, który będzie zawierał podzielone pliki i journalentryto, jak każdy plik będzie się nazywał (po którym następuje numer indeksu).

    Jeśli chcesz zrozumieć polecenie, oto wyjaśnienie: --keep-filesnadal drukuje pliki po napotkaniu błędów lub końca pliku, zapewniając, że ostatnia strona zostanie wydrukowana poprawnie (ponieważ nie kończy się ona na wzorcu naszego wyrażenia regularnego). --prefixustawia schemat nazewnictwa plików wyjściowych. --suffix-formatpozwala nam ustawić nasze rozszerzenie pliku ( .mdw tym przypadku), ale musimy dołączyć %ido instrukcji sprintf, która wyświetla numer indeksu pliku.  --elide-empty-filespomija wyświetlanie pustych plików, na których nam nie zależy. Wreszcie wyrażenie regularne, które zaczyna się '/i kończy na/-2', określa, kiedy podzielić plik: napis „Gdy znajdziesz (/) na początku wiersza (^), następujący (() poniedziałek lub (\ |) wtorek lub środa lub czwartek lub piątek lub sobota lub niedziela () ), po którym następuje przecinek, cofnij się o dwie linie (-2) ”i podziel plik tam, uzyskując to, co mamy do tej pory. Ostatni bit, '{*}'powtarza poprzednie polecenie w nieskończoność, aż do osiągnięcia końca pliku.

  15. Przeciągnij pliki .docxi .mddo folderu, powiedz folder, który teraz utworzysz intermediates. Lub możesz je po prostu usunąć. Przyjemnie jest je zapisać przez chwilę, dopóki nie poczujesz się komfortowo z nowym formatem pliku, na wypadek gdybyś chciał wrócić i odwołać się do czegoś, co wydarzyło się podczas procesu konwersji. Przeniesienie ich teraz do folderu pośredniego zwiększy szansę zapomnienia, gdzie jesteśmy i powtórzenia kroków.

  16. Powtórz kroki 9-14 dla każdego .docxpliku wyeksportowanego z OneNote.

  17. Teraz masz jeden folder dla każdej karty, z garstką oddzielnych .mdplików, po jednym dla każdej strony! Plus mediafolder w każdym podfolderze, który miał obrazy na karcie OneNote.

  18. Zalecam wyeksportowanie każdego ze swoich notesów OneNote jako .mhtpliku (pojedyncza strona sieci Web) lub, jeśli wolisz, pliku .pdf. W ten sposób, jeśli utraciłeś formatowanie lub inne informacje w niektórych plikach przeceny, z powodu wielokrotnej konwersji, zawsze możesz wrócić i łatwo zobaczyć, jak miało to wyglądać w .mhtpliku. Ponadto zaleciłbym wyeksportowanie każdego ze swoich notesów OneNote jako .onepkgpliku (pakiet OneNote), więc masz fajną ostateczną kopię eksportu, jeśli kiedykolwiek chcesz ponownie otworzyć notes w OneNote w jego natywnym / oryginalnym formacie (może to być przydatne jeśli na przykład w .mhtpliku brakuje również oryginalnego formatowania, które chcesz odzyskać).

  19. Po zakończeniu każdego notatnika kliknij prawym przyciskiem myszy notes w programie OneNote i kliknij polecenie „Zamknij ten notatnik”, aby nie przypadkowo edytować notesu i trzeba ponownie wyeksportować nowe zmiany. Dla folderów przeceny utworzyłem również folder dla każdego notatnika i umieściłem w nim wszystkie foldery z kartami.

  20. Po zakończeniu całego projektu eksportu możesz przejść do OneDrive i usunąć wszystkie oryginały notesów OneNote, które zostały tam zsynchronizowane (oczywiście upewnij się, że teraz tworzysz kopie zapasowe własnych plików! Istnieje OneDrive dla systemu Linux lub może spróbować czegoś takiego jak Syncthing).

  21. Wreszcie możemy zmienić nazwę wszystkich plików .md na tytuł strony OneNote, który jest pierwszym wierszem każdego pliku, za pomocą dwóch skryptów. Utwórz następujące pliki:

    Plik 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
    

    Plik 2: ~/scripts/recurse.sh

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

    Następnie przejdź do folderu notatek i uruchom recurse.shpolecenie, używając rename-files-to-first-line.shpolecenia jako argumentu:

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

    Zobaczysz skrypt przechodzący rekurencyjnie przez wszystkie twoje pliki, generujący błędy w plikach z dziwnymi pierwszymi wierszami (które nie zostaną przekonwertowane na nazwę pliku) i w innych przypadkach krawędzi. Jednak mvpolecenie w rename-files-to-first-linejest wykonywane z argumentem -n, co zapobiegnie zastąpieniu jakichkolwiek plików. Może być kilka notatek, których nie można zmienić nazwy, ponieważ pierwszy wiersz w nich jest pusty lub coś innego dziwnego, ale możesz po prostu naprawić te kilka plików ręcznie.

  22. Zanurz się w czystej ucieczce z OneNote.

Ostrzeżenia:

  • Nie przechwytuje to podstron - jeśli chcesz, musisz odtworzyć je z podfolderami.

  • Nie wiem, jak dobrze sobie radzi z tabelami - przecena i tak jest trochę niezręczna.

  • Prawdopodobnie istnieją inne rodzaje formatowania, takie jak czcionki, które gubią się lub psują podczas eksportu. Ale w przypadku tekstu sformatowanego i obrazów działa całkiem dobrze!


1
Nie zadziała, jeśli masz załączniki w OneNote
Nikhil

4
Wow, co za bałagan. Nigdy nie powinienem zacząć robić notatek z tym oprogramowaniem. Dzięki za spisanie tego wszystkiego! Pamiętaj, że na dzień dzisiejszy nadal nie ma funkcji eksportu dla OneNote w systemie macOS.
slhck

Czy ktoś próbował zaimportować wynikowe pliki MD z tego do Notion? zadziałało?
JayPex

Nie jest to również realistyczne, jeśli masz setki stron w sekcji notesu, każda z unikalnym tytułem, działa tylko, jeśli masz określony styl nazewnictwa, którego używałeś. Doceniam jednak wysiłek.
JayPex

6

Druga odpowiedź nie ucięła go, ponieważ moje notatki nie są wpisami do dziennika, ale znalazłem rozwiązanie, używając Microsoft Graph API . Oznacza to, że nie musisz nawet uruchamiać programu OneNote, wystarczy, że notatki zostaną zsynchronizowane z kontem Microsoft, a następnie otrzymasz notatki w formacie doskonale sformatowanego HTML (który możesz wyświetlić w przeglądarce lub przekonwertować na dowolny preferowany format) za pomocą Pandoc).

Magia dzieje się w tym skrypcie Python . Obsługuje prosty lokalny serwer WWW, którego można użyć do zalogowania się na konto Microsoft, a następnie pobiera wszystkie notatki w formacie HTML, a także obrazy i załączniki w ich oryginalnych formatach, i przechowuje je w hierarchii plików, zachowując oryginalną strukturę Twoich notatników (w tym kolejności stron i podstron).

Przed uruchomieniem skryptu musisz zarejestrować „aplikację” na Microsoft Azure, aby mogła uzyskać dostęp do interfejsu API Graph:

  1. Wejdź na https://aad.portal.azure.com/ i zaloguj się przy użyciu swojego konta Microsoft.
  2. Wybierz „Azure Active Directory”, a następnie „Rejestracja aplikacji” w „Zarządzaj”.
  3. Wybierz „Nowa rejestracja”. Wybierz dowolną nazwę, ustaw „Obsługiwane typy kont” na „Konta w dowolnym katalogu organizacyjnym i osobiste konta Microsoft”, a pod „Przekieruj URI” wybierz Web i wpisz http://localhost:5000/getToken. Zarejestrować.
  4. Skopiuj „Identyfikator aplikacji (klienta)” i wklej go jak client_idna początku skryptu Python.
  5. Wybierz „Certyfikaty i tajemnice” w „Zarządzaj”. Naciśnij „Tajny nowy klient”, wybierz nazwę i potwierdź.
  6. Skopiuj klucz klienta i wklej go jak secretw skrypcie Python.
  7. Wybierz „Uprawnienia API” w „Zarządzaj”. Naciśnij „Dodaj uprawnienie”, przewiń w dół i wybierz OneNote, wybierz „Uprawnienia delegowane” i zaznacz „Notes.Read” i „Notes.Read.All”. Naciśnij „Dodaj uprawnienia”.

Następnie musisz zainstalować zależności Python. Upewnij się, że masz zainstalowany Python 3.7 (lub nowszy) i zainstaluj zależności za pomocą polecenia pip install flask msal requests_oauthlib.

Teraz możesz uruchomić skrypt. W terminalu przejdź do katalogu, w którym znajduje się skrypt i uruchom go, używając python onenote_export.py. Spowoduje to uruchomienie lokalnego serwera WWW na porcie 5000.

W przeglądarce przejdź do http: // localhost: 5000 i zaloguj się na swoje konto Microsoft. Za pierwszym razem będziesz musiał zaakceptować fakt, że aplikacja może czytać Twoje notatki OneNote. (To nie daje stronom trzecim dostępu do twoich danych, o ile nie udostępniasz identyfikatora klienta i tajnego hasła utworzonego w portalu Azure). Następnie wróć do terminala, aby śledzić postępy.

Uwaga: Microsoft ogranicza liczbę żądań, które możesz wykonać w danym okresie. Dlatego, jeśli masz wiele notatek, możesz w końcu zobaczyć takie komunikaty w terminalu: Too many requests, waiting 20s and trying again.To nie jest problem, ale oznacza, że ​​cały proces może trochę potrwać. Ponadto sesja logowania może wygasnąć po pewnym czasie, co powoduje, że TokenExpiredError. Jeśli tak się stanie, po prostu załaduj ponownie http: // localhost: 5000, a skrypt będzie kontynuował (pomijając pliki, które już pobrał).


Dobre prostsze rozwiązanie, ale pobiera pliki w formacie HTML, a nie MD
JayPex

1
Jak krótko wspomniałem w odpowiedzi, możesz użyć pandoc do konwersji HTML na markdown (np pandoc --from html --to markdown -o output.md input.html.). Należy jednak zauważyć, że nie wszystkie strony OneNote mogą być idealnie reprezentowane w systemie markdown, więc możesz stracić niektóre szczegóły formatowania. Ponadto, pandoc obsługuje kilka odmian obniżki cen, więc możesz przeczytać dokumentację, aby znaleźć taki, który najbardziej ci odpowiada.
danmou

Ok, na pewno warto spróbować przed wybraniem długiej trasy w pierwszej odpowiedzi. Dzięki!
JayPex

4

Aby wyeksportować strony OneNote do indywidualnego markdown ( .md), zainstaluj Joplin i Evernote .

Jak sugeruje ten link , najpierw zaimportuj notatki do Evernote. Następnie wyeksportuj wszystkie notatki do .enexpliku z Evernote i zaimportuj je do Joplin.

Joplin ma opcję eksportu notatek jako .mdplików.

Uwaga: sugeruję wcześniejsze użycie flag w Evernote, jeśli chcesz pogrupować swoje notatki, ponieważ sposób Evernote do utrzymywania hierarchii notatek różni się od OneNote.


1
Jesteś niesamowity! Twoja odpowiedź zainspirowała mnie do zaimportowania sekcji notatników do Evernote, a następnie zaimportowania ich z Evernote do Notion! Dzięki
JayPex,

0

Znalazłem nieprogramowe rozwiązanie tego problemu.

TLDR;

Eksportuj notatki z OneNote do Evernote, a następnie do Notion (opcjonalnie), a następnie eksportuj jako pojedyncze pliki w wybranym przez siebie formacie.


Naprawdę staram się eksportować swoje notatki z Notion, spojrzenie online zwróci kilka naprawdę nieczystych sposobów eksportowania i dzielenia stron OneNote i przekształcania ich w pliki md lub html. Co za bałagan!

Zasadniczo możesz bardzo łatwo zaimportować swoje sekcje OneNote do Evernote, po pobraniu Evernote na komputery dość łatwo to zrobić, a następnie równie łatwo zaimportować je do Notion.

Pamiętaj, że możesz chcieć zaimportować poszczególne sekcje, jeśli chcesz zachować tę samą organizację, w przeciwnym razie możesz po prostu zaimportować zbiorczo wszystkie sekcje, strony zostaną otagowane nazwami sekcji, a to samo w Notion.

Pamiętaj, że musisz zsynchronizować swoje notesy OneNote, logując się na konto Microsoft / Outlook i sprawdzając, czy są one zsynchronizowane za pomocą OneNote 2016.

Mam nadzieję że to pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.