모든 OneNote 페이지를 개별 마크 다운 파일로 내보내려면 어떻게해야합니까?


14

Linux로 전환하고 있으며 마지막 장애물은 OneNote를 벗어나는 것입니다. 모든 페이지를 개별 마크 다운 파일로 보내도록 모든 전자 필기장을 내보내고 싶습니다.

things- 나는 많은 해봤 이 스레드가 몇 가지 제안을했지만, 그들은 모두 구식이된다.

OneNote에서 모든 페이지를 개별 .docx 파일로 내보내도록하려면 pandoc을 사용하여 개별 마크 다운 파일로 쉽게 변환 할 수 있습니다. 그러나 OneNote는 여러 페이지를 단일 파일로만 내 보냅니다. 따라서 하나의 경로는 모든 단일 페이지의 내보내기를 개별적으로 자동화하는 방법을 찾는 것입니다.

또 다른 옵션은 한 번에 전체 전자 필기장을 .docx 파일로 내보내고 pandoc를 사용하여 마크 다운으로 변환 한 다음 파일을 분할하는 것입니다. 그러나 정규 표현식 마법사로는 충분하지 않습니다. 정규식과 awk 마법사가 충분하지 않아서 정확하고 완전한 정규식으로 파일을 출력 할 수 있습니다.

누구든지 이것을 도울 수 있습니까?

답변:


12

나는 수출 파이프 라인을 찾게되었지만 고통 스러웠다. 그 일에 대한 나의 메모는 다음과 같습니다.

워크 플로우 :

  1. 내보낼 때마다 OneNote에서 긴 OneDrive 동기화를 수행하지 않도록 네트워크를 끕니다.

  2. 노트북 목록에서 노트북을 확장하면 모든 탭이 표시됩니다.

  3. 탭을 마우스 오른쪽 버튼으로 클릭하고 "내보내기 ..."를 클릭하십시오.

  4. 파일 형식 드롭 다운을 클릭하고을 M눌러 .docx형식 을 선택하십시오 . 눌러서 Enter선택하십시오.

  5. Enter다시 누르면 내 보낸 파일이 저장됩니다.

  6. 노트북의 각 탭에 대해 2-5 단계를 반복하십시오.

  7. pandoc을 설정하고 PowerShell 또는 cmd 창을 엽니 다.

  8. 내 보낸 .docx파일이 있는 디렉토리로 cd하십시오 .

  9. 내 보낸 각 .docx파일에 대해 다음 pandoc 명령을 사용하여 파일을 마크 다운으로 변환 journal하십시오 (파일 이름으로 대체 ).

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

    명령에 대한 설명은 다음과 같습니다. --extract-media=''pandoc가 .docx파일 에서 이미지를 추출 하여 기본 하위 폴더 (기본적으로 'media')에 넣도록 지시 합니다. --wrap=preservepandoc가 출력 파일을 줄 바꿈 (기본값)으로 하드 랩핑하지 않도록 지시합니다. 다음 필드는 입력 파일 이름이며 -o'출력'을 나타내며 journal.md출력 파일 이름도 나타냅니다.

    이 파일을 분할하지 않으려면 (예 : 탭에 한 페이지 만 포함 된 경우) 15 단계로 건너 뜁니다.

    (이러한 작업을 수행 할 때 (위쪽 화살표) 키를 누르면 셸에서 이전 명령을 호출 한 다음 파일 이름을 편집 할 수 있습니다.)

  10. 탭에 페이지를 저장할 새 폴더를 작성하십시오. 이 예에서는 지금 OneNote의 업무 일지 탭에있는 모든 페이지가에서 으깬 것입니다 journal.md. journal최종 분리 페이지를 개별 .md 파일로 저장할 폴더를 만듭니다 .

  11. .docx파일에 이미지가 있으면이 폴더는이라는 새 폴더로 내보내집니다 media. 미디어 폴더가 있으면 지금 만든 폴더로 끌어다 놓습니다. (따라서 각 내보내기는 별도의 미디어 폴더를 생성하고 마크 다운 파일의 링크가 올바르게 작동하도록 별도의 미디어 폴더를 생성하기 때문에 각 pandoc 작업을 별도로 수행해야하는 이유입니다. 노트북이 많지 않으면 자동으로 수동으로 수행하는 데 시간이 덜 걸립니다. (참고 : 이미지가있는 파일 의 경우 --extract-media=''인수 의 작은 따옴표 안에 원하는 .docx폴더 이름을 넣어서 단계를 저장할 수 있습니다 . 폴더가 자동으로 생성됩니다.)

  12. bash 터미널을 열고 .md파일을 포함하는 디렉토리로 cd 하십시오. 10 단계에서 만든 폴더는이 폴더의 하위 폴더 여야합니다 (다음 명령에서 경로를 수정하지 않는 한).

  13. 아직 설정하지 않았다면 Windows Bash 창 아이콘을 클릭하고 속성을 클릭하고 빠른 편집 모드를 선택한 다음 확인을 클릭하십시오. 이제 Windows Bash 창 아이콘을 다시 클릭하십시오. 이번에는 Defaults를 클릭하고 QuickEdit Mode를 선택한 다음 OK를 클릭하십시오. 이제 터미널에서 텍스트를 선택하고 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(after --prefix=')는 분할 된 파일을 포함 할 하위 폴더의 이름이며 journalentry각 파일의 이름은 (색인 번호가 뒤 따름).

    명령을 이해하려면 여기에 설명이 있습니다. --keep-files오류나 파일 끝이 발견 될 때 파일을 인쇄하여 마지막 페이지가 올바르게 출력되는지 확인하십시오 (정규 표현식의 패턴으로 끝나지 않기 때문에). --prefix출력 파일의 이름 지정 체계를 설정합니다. --suffix-format파일 확장자를 설정할 수 .md있지만 ( 이 경우) %i파일의 색인 번호를 출력하는 sprintf 문을 포함시켜야 합니다.  --elide-empty-files우리가 신경 쓰지 않는 빈 파일의 출력을 건너 뜁니다. 끝으로 시작 '/하고 끝나는 정규식/-2', 파일 분할시기를 정의합니다. "줄 시작 부분에서 (/)를 찾은 경우 (^) 다음 (() 월요일 또는 (\ |) 화요일 또는 수요일 또는 목요일 또는 금요일 또는 토요일 또는 일요일 () ) 다음에 쉼표를 입력하고 두 줄 뒤로 (-2) 뒤로 물러나서 파일을 분할하여 지금까지의 내용을 출력합니다. 마지막 비트 '{*}'는 파일 끝에 도달 할 때까지 이전 명령을 무기한 반복합니다.

  15. .docx.md파일을 폴더 (예 : 지금 만든 폴더)로 드래그합니다 intermediates. 아니면 그냥 삭제할 수 있습니다. 새로운 파일 형식에 익숙해 질 때까지 변환 과정에서 발생한 것을 다시 참조하려는 경우 잠시 저장하는 것이 좋습니다. 중간 폴더로 이동하면 현재 위치를 잊고 단계를 반복 할 가능성이 무례합니다.

  16. .docxOneNote에서 내 보낸 각 파일 에 대해 9-14 단계를 반복하십시오 .

  17. 이제 각 탭마다 하나의 폴더가 있으며 .md각 페이지마다 하나씩 별도의 파일이 많이 있습니다! 또한 mediaOneNote 탭에 이미지가있는 각 하위 폴더에 폴더가 있습니다.

  18. 각 OneNote 전자 필기장을 .mht파일 (단일 파일 웹 페이지) 또는 원하는 경우 a로 내보내는 것이 좋습니다 .pdf. 이렇게하면 다중 변환으로 인해 일부 마크 다운 파일에 서식이나 기타 정보가 손실 된 경우 언제든지 되돌아 가서 .mht파일 에서 어떻게 보이는지 쉽게 확인할 수 있습니다 . 또한 각 OneNote 전자 필기장을 .onepkg파일 (OneNote 패키지) 로 내보내는 것이 좋습니다 . 따라서 기본 / 원래 파일 형식으로 전자 필기장을 OneNote에서 다시 열려면 멋진 최종 내보내기 복사본이 있어야합니다. 예를 들어 .mht파일에 복구하려는 일부 원래 형식이 누락 된 경우).

  19. 각 전자 필기장이 끝나면 OneNote에서 전자 필기장을 마우스 오른쪽 단추로 클릭하고 "이 전자 필기장 닫기"를 클릭하여 실수로 전자 필기장을 편집하지 않고 새 변경 내용을 다시 내 보내야합니다. 마크 다운 폴더의 경우 각 전자 필기장에 대한 폴더를 만들고 모든 탭 폴더를 넣었습니다.

  20. 전체 내보내기 프로젝트를 마치면 OneDrive로 이동하여 동기화 된 모든 OneNote 전자 필기장 원본을 삭제할 수 있습니다 (물론 지금 자신의 파일을 백업하고 있는지 확인하십시오! Linux 용 OneDrive가 있거나 동기화와 같은 것을 시도 할 수 있습니다).

  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
    

    스크립트가 모든 파일을 재귀 적으로 처리하여 이상한 첫 줄이있는 파일 (파일 이름으로 변환되지 않음)과 다른 가장자리 경우에 오류가 발생하는 것을 볼 수 있습니다. 그러나 mvin 명령 rename-files-to-first-line은 argument로 실행되어 -n파일을 덮어 쓰지 못하게합니다. 첫 줄이 비어 있거나 이상한 것이기 때문에 이름이 바뀌지 않는 메모가 몇 개있을 수 있지만, 그 몇 개의 파일을 수동으로 수정하면됩니다.

  22. OneNote에서 깔끔하게 탈출하십시오.

주의 사항 :

  • 이것은 하위 페이지를 캡처하지 않습니다. 원하는 경우 하위 하위 폴더가있는 하위 페이지를 다시 만들어야합니다.

  • 나는 그것이 테이블에 얼마나 잘하는지 모르겠다 – 표는 어쨌든 테이블에 다소 불리하다.

  • 내보내기에서 길을 잃거나 조여지는 글꼴과 같은 다른 종류의 서식이있을 수 있습니다. 그러나 풍부한 텍스트와 이미지의 경우 꽤 잘 작동합니다!


1
OneNote에 첨부 파일이있는 경우 작동하지 않습니다
Nikhil

4
와, 정말 엉망이야 이 소프트웨어로 메모를 시작한 적이 없어야합니다. 이 모든 것을 적어 주셔서 감사합니다! 현재까지 macOS에는 여전히 OneNote 내보내기 기능이 없습니다.
slhck

누구든지 결과 MD 파일을 Notion으로 가져 오려고 했습니까? 작동 했습니까?
JayPex

또한 전자 필기장 섹션에 고유 한 제목이있는 수백 페이지가있는 경우에는 현실적이지 않으며 OP가 사용한 특정 명명 스타일이있는 경우에만 작동합니다. 그래도 노력에 감사합니다.
JayPex

6

내 노트가 저널 항목이 아니기 때문에 다른 대답으로는 그것을 자르지 않았지만 Microsoft의 Graph API를 사용하여 해결책을 찾았습니다 . 즉, OneNote를 실행할 필요가 없으며 노트를 Microsoft 계정과 동기화하기 만하면 노트를 완벽하게 형식화 된 HTML (브라우저에서 보거나 원하는 형식으로 변환 할 수 있음)로 가져올 수 있습니다. Pandoc 사용).

마술은 이 파이썬 스크립트 에서 발생합니다 . 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. "애플리케이션 (클라이언트) ID"를 복사 client_id하여 Python 스크립트의 시작 부분에 붙여 넣습니다 .
  5. "관리"에서 "인증서 및 비밀"을 선택하십시오. "새 클라이언트 비밀"을 누르고 이름을 선택한 후 확인하십시오.
  6. 클라이언트 시크릿을 복사하여 secretPython 스크립트에서 붙여 넣습니다 .
  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 포털에서 생성 한 클라이언트 ID와 암호를 공유하지 않는 한 타사에 데이터 액세스 권한을 부여하지 않습니다). 그런 다음 터미널로 돌아가서 진행을 따르십시오.

참고 : 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) 으로 내보내려면 JoplinEvernote를 설치해야합니다 .

링크 에서 제안한대로 먼저 메모를 Evernote로 가져옵니다. 그런 다음 모든 메모를 .enexEvernote 에서 파일로 내보내고 Joplin으로 가져옵니다.

Joplin에는 메모를 .md파일 로 내보내는 옵션이 있습니다.

참고 : 메모를 계층화하는 Evernote 방법이 OneNote와 다르기 때문에 메모를 그룹화하려면 Evernote에서 플래그를 미리 사용하는 것이 좋습니다.


1
당신은 굉장합니다! 귀하의 답변에 따라 노트북 섹션을 Evernote로 가져온 다음 Evernote에서 Notion으로 가져 왔습니다. 감사합니다
JayPex

0

나는 이것에 대한 비 프로그래밍 방식의 해결책을 발견했다.

TLDR;

OneNote에서 Evernote 로 메모를 내 보낸 다음 Notion (선택 사항)으로 내 보낸 다음 선택한 형식으로 개별 파일로 내 보냅니다.


Notion에서 노트를 내보내는 데 어려움을 겪었습니다. 온라인으로 보면 OneNote 페이지를 내보내고 나누고 md 또는 html 파일로 변환하는 부정한 방법이 반환됩니다. 엉망이야!

기본적으로 OneNote 섹션을 Evernote로 매우 쉽게 가져올 수 있습니다. 데스크톱 용 Evernote를 다운로드 한 후에는 작업하기가 매우 쉽습니다. 그런 다음 거기에서 해당 항목을 Notion으로 가져 오는 것도 쉽습니다.

동일한 조직을 유지하려는 경우 개별 섹션을 가져오고 싶을 수 있습니다. 그렇지 않으면 모든 섹션을 대량으로 가져올 수 있으며 페이지에 섹션 이름이 태그 지정되며 Notion에도 적용됩니다.

Microsoft / Outlook 계정에 로그인하고 OneNote 2016을 사용하여 동기화되었는지 확인하여 OneNote 전자 필기장을 동기화해야합니다.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.