Làm cách nào tôi có thể xuất tất cả các trang OneNote sang các tệp đánh dấu riêng lẻ?


14

Tôi đang chuyển sang Linux và trở ngại cuối cùng là thoát khỏi OneNote. Tôi muốn xuất tất cả các sổ ghi chép của mình để mỗi trang chuyển đến một tệp đánh dấu riêng lẻ.

Tôi đã thử nhiều thứ , chủ đề này có một số gợi ý, nhưng tất cả chúng đều lỗi thời.

Nếu tôi có thể nhận OneNote để xuất tất cả các trang dưới dạng tệp .docx riêng lẻ, thì có thể dễ dàng sử dụng pandoc để chuyển đổi chúng thành các tệp đánh dấu riêng lẻ. Nhưng, OneNote sẽ chỉ xuất nhiều trang dưới dạng một tệp. Vì vậy, một lộ trình sẽ là tìm cách tự động hóa việc xuất từng trang riêng lẻ.

Một tùy chọn khác là xuất toàn bộ sổ ghi chép cùng một lúc dưới dạng tệp .docx, chuyển đổi chúng thành đánh dấu bằng pandoc và sau đó phân tách các tệp, nhưng tôi không đủ trình hướng dẫn regex để cắt csplit để cắt các tệp chính xác các biểu thức chính quy và không đủ thuật sĩ awk để đưa nó đến các tệp đầu ra với biểu thức chính xác và đầy đủ.

Bất cứ ai có thể giúp tôi với điều này?

Câu trả lời:


12

Cuối cùng tôi đã tìm thấy một đường ống xuất khẩu, nhưng đó là một nỗi đau. Dưới đây là những lưu ý của tôi khi làm điều đó:

quy trình làm việc:

  1. Tắt (các) mạng của bạn để ngăn OneNote thực hiện đồng bộ hóa OneDrive dài sau mỗi lần xuất.

  2. Trong danh sách Notebook, mở rộng notebook để xem tất cả các tab.

  3. Nhấp chuột phải vào một tab và nhấp vào "Xuất ...".

  4. Nhấp vào menu thả xuống filetype và nhấn Mđể chọn .docxđịnh dạng. Nhấn Enterđể chọn nó.

  5. Nhấn Entermột lần nữa để lưu tệp đã xuất.

  6. Lặp lại các bước 2-5 cho mỗi tab trong sổ ghi chép.

  7. Thiết lập pandoc và mở cửa sổ PowerShell hoặc cmd.

  8. cd vào thư mục chứa .docxcác tập tin đã xuất .

  9. Đối với mỗi .docxtệp được xuất , sử dụng lệnh pandoc sau để chuyển đổi nó thành markdown (thay thế journalbằng tên tệp của bạn):

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

    Đây là một lời giải thích về lệnh: --extract-media=''yêu cầu pandoc trích xuất hình ảnh từ .docxtệp và đặt chúng vào thư mục con mặc định (được đặt tên là 'media' theo mặc định). --wrap=preservenói với pandoc không cứng bọc tệp đầu ra với ngắt dòng (là mặc định). Trường tiếp theo là tên tệp đầu vào và -olà viết tắt của 'đầu ra', journal.mdtên tệp đầu ra cũng vậy.

    Nếu bạn không muốn tách tệp này (ví dụ: nếu tab của bạn chỉ chứa một trang), hãy bỏ qua bước 15.

    (Khi bạn đang thực hiện một loạt các thao tác này, bạn có thể nhấn phím (mũi tên lên) để gọi lại lệnh trước đó trong trình bao, sau đó chỉnh sửa tên tệp.)

  10. Tạo một thư mục mới để lưu trữ các trang trong tab. Trong ví dụ này, ngay bây giờ tất cả các trang từ tab Tạp chí của chúng tôi trong OneNote được trộn lẫn với nhau trong journal.md. Tạo một thư mục được gọi journalsẽ lưu các trang được phân tách cuối cùng dưới dạng tệp .md riêng lẻ.

  11. Nếu có bất kỳ hình ảnh nào trong .docxtập tin, chúng sẽ được xuất sang một thư mục mới có tên media. Kéo thư mục phương tiện, nếu nó tồn tại, vào thư mục bạn vừa tạo. (Đây là lý do tại sao chúng ta cần thực hiện từng thao tác pandoc một cách riêng biệt, bởi vì mỗi lần xuất sẽ tạo một thư mục phương tiện riêng và chúng tôi muốn giữ các liên kết này riêng biệt để các liên kết trong tệp đánh dấu hoạt động chính xác. Chúng tôi có thể viết một tập lệnh thông minh để thực hiện tất cả điều này tự động, nhưng sẽ mất ít thời gian hơn để thực hiện thủ công, trừ khi bạn có số lượng lớn sổ ghi chép.) (Lưu ý: Bạn có thể lưu một bước bằng cách đặt tên người dùng mong muốn của mình vào dấu ngoặc đơn của --extract-media=''đối số đối với .docxcác tệp có hình ảnh, một thư mục sẽ được tạo tự động cho bạn.)

  12. Mở một bash terminal và cd vào thư mục chứa .mdtệp. Thư mục bạn đã tạo ở bước 10 phải là thư mục con của thư mục này (trừ khi bạn sửa đường dẫn trong lệnh sau).

  13. Nếu bạn chưa có, hãy nhấp vào biểu tượng cửa sổ Windows Bash, nhấp vào Thuộc tính, kiểm tra Chế độ QuickEdit, sau đó bấm OK. Bây giờ bấm vào biểu tượng cửa sổ Windows Bash một lần nữa, lần này bấm vào Mặc định, kiểm tra Chế độ QuickEdit, sau đó bấm OK (vì vậy các cửa sổ Bash mới mà bạn tạo trong tương lai sẽ ghi nhớ cài đặt này). Bây giờ bạn có thể chọn văn bản trong thiết bị đầu cuối và nhấn Ctrl+ Cđể sao chép hoặc nhấp chuột phải vào cửa sổ thiết bị đầu cuối để dán văn bản vào bảng tạm. Bây giờ chúng ta có thể chuẩn bị lệnh của mình ở một vị trí riêng biệt và nhanh chóng dán từng phiên bản vào Bash.

  14. Tùy chỉnh lệnh sau và chạy nó cho từng .mdtệp bạn muốn chia thành các trang riêng lẻ:

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

    (Nhập nó dưới dạng một dòng.)

    Như bạn có thể thấy, journal.mdlà tên của tệp đánh dấu của chúng tôi (trong thư mục hiện tại, được ký hiệu là ./), lần xuất hiện thứ hai của journal(sau --prefix=') là tên của thư mục con của chúng tôi sẽ chứa các tệp được phân tách và journalentrylà tên của mỗi tệp sẽ được đặt tên (theo sau là một số chỉ mục).

    Nếu bạn muốn hiểu lệnh, đây là một lời giải thích: --keep-filesvẫn in các tệp khi gặp lỗi hoặc kết thúc tệp, đảm bảo trang cuối cùng sẽ được xuất chính xác (vì nó không kết thúc theo mẫu biểu thức chính quy của chúng tôi). --prefixthiết lập sơ đồ đặt tên của các tập tin đầu ra. --suffix-formatcho phép chúng tôi đặt phần mở rộng tệp của mình ( .mdtrong trường hợp này), nhưng chúng tôi phải đưa %ivào câu lệnh sprintf để xuất số chỉ mục của tệp.  --elide-empty-filesbỏ qua các tập tin trống mà chúng tôi không quan tâm. Cuối cùng, biểu thức chính quy, bắt đầu bằng '/và kết thúc bằng/-2', xác định thời điểm phân chia tệp: thông báo "Khi bạn tìm thấy (/) ở đầu dòng (^) sau (() Thứ hai hoặc (\ |) Thứ ba hoặc Thứ tư hoặc Thứ năm hoặc Thứ sáu hoặc Thứ bảy hoặc Chủ nhật () ) theo sau là dấu phẩy, lùi lại hai dòng (-2) "và tách tệp ở đó, xuất ra những gì chúng ta có cho đến bây giờ. Bit cuối cùng '{*}', lặp lại lệnh trước đó vô thời hạn, cho đến khi kết thúc tập tin.

  15. Kéo .docx.mdtập tin vào một thư mục, giả sử một thư mục bạn tạo bây giờ được gọi intermediates. Hoặc bạn chỉ có thể xóa chúng. Thật tuyệt khi lưu chúng trong một thời gian, cho đến khi bạn cảm thấy thoải mái với định dạng tệp mới của mình, trong trường hợp bạn muốn quay lại và tham khảo một cái gì đó đã xảy ra trong quá trình chuyển đổi. Di chuyển chúng vào thư mục trung gian bây giờ sẽ thô lỗ cơ hội quên chúng ta đang ở đâu và lặp lại các bước.

  16. Lặp lại các bước 9-14 cho mỗi .docxtệp bạn đã xuất từ ​​OneNote.

  17. Bây giờ bạn có một thư mục cho mỗi tab, với một loạt các .mdtệp riêng biệt trong đó, một tệp cho mỗi trang! Cộng với một mediathư mục trong mỗi thư mục con có hình ảnh trong tab OneNote.

  18. Tôi khuyên bạn nên xuất từng sổ ghi chép OneNote của mình dưới dạng .mhttệp (Trang web tệp đơn) hoặc, nếu bạn muốn, a .pdf. Bằng cách này, nếu bị mất định dạng hoặc thông tin khác trong một số tệp đánh dấu của bạn, do có nhiều chuyển đổi, bạn luôn có thể quay lại và dễ dàng xem cách nhìn trong .mhttệp. Ngoài ra, tôi khuyên bạn nên xuất từng sổ ghi chép OneNote của mình dưới dạng .onepkgtệp (Gói OneNote), để bạn có một bản sao xuất cuối cùng đẹp nếu bạn muốn mở lại Notebook trong OneNote ở định dạng tệp gốc / gốc (điều này có thể hữu ích nếu, ví dụ, .mhttập tin cũng thiếu một số định dạng ban đầu mà bạn muốn khôi phục).

  19. Khi bạn hoàn thành mỗi sổ ghi chép, bấm chuột phải vào sổ ghi chép trong OneNote và bấm "Đóng sổ ghi chép này" để bạn không vô tình chỉnh sửa sổ ghi chép và phải xuất lại các thay đổi mới của bạn. Đối với các thư mục đánh dấu, tôi cũng tạo một thư mục cho mỗi sổ ghi chép và đặt tất cả các thư mục tab vào đó.

  20. Khi bạn kết thúc với toàn bộ dự án xuất, bạn có thể truy cập OneDrive của mình và xóa tất cả các bản gốc sổ ghi chép OneNote đã được đồng bộ hóa ở đó (tất nhiên hãy chắc chắn rằng bạn đang sao lưu các tệp của riêng mình, dĩ nhiên, có OneDrive cho Linux hoặc bạn có thể thử một cái gì đó như Syncthing).

  21. Cuối cùng, chúng tôi có thể đổi tên tất cả các tệp .md của mình thành tiêu đề trang OneNote của họ, đây là dòng đầu tiên trong mỗi tệp, bằng cách sử dụng hai tập lệnh. Tạo các tệp sau:

    Tệp 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
    

    Tệp 2: ~/scripts/recurse.sh

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

    Sau đó điều hướng đến thư mục ghi chú của bạn và chạy recurse.shlệnh bằng cách sử dụng rename-files-to-first-line.shlệnh làm đối số:

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

    Bạn sẽ thấy tập lệnh đi qua tất cả các tệp của mình một cách đệ quy, đưa ra một số lỗi trên các tệp có dòng đầu tiên kỳ lạ (sẽ không chuyển thành tên tệp) và trong các trường hợp cạnh khác. Tuy nhiên, mvlệnh trong rename-files-to-first-lineđược thực thi với đối số -n, điều này sẽ ngăn nó ghi đè lên bất kỳ tệp nào. Có thể có một vài lưu ý không được đổi tên, bởi vì dòng đầu tiên trong đó trống hoặc có gì đó lạ, nhưng bạn chỉ có thể sửa một vài tệp theo cách thủ công.

  22. Đắm mình trong lối thoát sạch sẽ của bạn từ OneNote.

Hãy cẩn thận:

  • Điều này không bắt được các trang con, bạn sẽ phải tạo lại những trang đó với các thư mục con, nếu bạn muốn.

  • Tôi không biết nó hoạt động tốt như thế nào với bảng Bảng đánh dấu là một chút vô duyên đối với các bảng.

  • Có thể có các loại định dạng khác, chẳng hạn như phông chữ, bị mất hoặc bị sai trong quá trình xuất. Nhưng đối với văn bản và hình ảnh phong phú, nó hoạt động khá tốt!


1
Sẽ không hoạt động nếu bạn có tệp đính kèm trong OneNote
Nikhil

4
Wow, thật là một mớ hỗn độn. Tôi nên không bao giờ bắt đầu ghi chú với phần mềm này. Cảm ơn đã viết tất cả điều này xuống! Lưu ý rằng cho đến ngày hôm nay, vẫn không có tính năng xuất cho OneNote trong macOS.
slhck

Có ai đã cố gắng nhập các tệp MD kết quả từ đây vào Notion chưa? nó có hoạt động không
JayPex

Ngoài ra, điều này không thực tế nếu bạn có hàng trăm trang trong một phần sổ tay, mỗi trang có một tiêu đề duy nhất, chỉ hoạt động nếu bạn có một kiểu đặt tên cụ thể mà OP đã sử dụng. Tôi đánh giá cao những nỗ lực mặc dù.
JayPex

6

Câu trả lời khác đã không cắt nó cho tôi, vì các ghi chú của tôi không phải là mục nhật ký, nhưng tôi đã tìm thấy giải pháp sử dụng API đồ thị của Microsoft . Điều này có nghĩa là bạn thậm chí không phải chạy OneNote, nó chỉ yêu cầu các ghi chú của bạn được đồng bộ hóa với tài khoản Microsoft của bạn và sau đó bạn có thể nhận các ghi chú của mình dưới dạng HTML được định dạng hoàn hảo (bạn có thể xem trong trình duyệt hoặc chuyển đổi sang bất kỳ định dạng nào bạn thích sử dụng Pandoc).

Điều kỳ diệu xảy ra trong kịch bản Python này . Nó chạy một máy chủ web cục bộ đơn giản mà bạn có thể sử dụng để đăng nhập vào tài khoản Microsoft của mình và một khi bạn làm điều đó, nó tải xuống tất cả các ghi chú của bạn dưới dạng HTML, cộng với hình ảnh và tệp đính kèm ở định dạng ban đầu của chúng và lưu trữ chúng trong cấu trúc phân cấp tệp giữ nguyên cấu trúc ban đầu sổ ghi chép của bạn (bao gồm thứ tự trang và trang con).

Trước khi bạn có thể chạy tập lệnh, bạn phải đăng ký "ứng dụng" trong Microsoft Azure để nó có thể truy cập API đồ thị:

  1. Truy cập https://aad.portal.azure.com/ và đăng nhập bằng tài khoản Microsoft của bạn.
  2. Chọn "Azure Active Directory" và sau đó "Đăng ký ứng dụng" trong "Quản lý".
  3. Chọn "Đăng ký mới". Chọn bất kỳ tên nào, đặt "Loại tài khoản được hỗ trợ" thành "Tài khoản trong bất kỳ thư mục tổ chức và tài khoản Microsoft cá nhân nào" và trong "Chuyển hướng URI", chọn Web và nhập http://localhost:5000/getToken. Đăng ký.
  4. Sao chép "ID ứng dụng (ứng dụng khách)" và dán nó client_idvào phần đầu của tập lệnh Python.
  5. Chọn "Chứng chỉ & bí mật" trong "Quản lý". Nhấn "Bí mật khách hàng mới", chọn tên và xác nhận.
  6. Sao chép bí mật máy khách và dán nó như secrettrong tập lệnh Python.
  7. Chọn "Quyền API" trong "Quản lý". Nhấn "Thêm quyền", cuộn xuống và chọn OneNote, chọn "Quyền được ủy quyền" và kiểm tra "Notes.Read" và "Notes.Read.All". Nhấn "Thêm quyền".

Sau đó, bạn cần cài đặt các phụ thuộc Python. Hãy chắc chắn rằng bạn đã cài đặt Python 3.7 (hoặc mới hơn) và cài đặt các phụ thuộc bằng lệnh pip install flask msal requests_oauthlib.

Bây giờ bạn có thể chạy tập lệnh. Trong một thiết bị đầu cuối, điều hướng đến thư mục chứa tập lệnh và chạy nó bằng cách sử dụng python onenote_export.py. Điều này sẽ bắt đầu một máy chủ web cục bộ trên cổng 5000.

Trong trình duyệt của bạn, điều hướng đến http: // localhost: 5000 và đăng nhập vào tài khoản Microsoft của bạn. Lần đầu tiên bạn làm điều đó, bạn cũng sẽ phải chấp nhận rằng ứng dụng có thể đọc ghi chú OneNote của bạn. (Điều này không cung cấp cho bất kỳ bên thứ ba nào quyền truy cập vào dữ liệu của bạn, miễn là bạn không chia sẻ id khách hàng và bí mật bạn đã tạo trên cổng thông tin Azure). Sau đó, quay trở lại thiết bị đầu cuối để theo dõi tiến trình.

Lưu ý: Microsoft giới hạn số lượng yêu cầu bạn có thể thực hiện trong một khoảng thời gian nhất định. Do đó, nếu bạn có nhiều ghi chú, cuối cùng bạn có thể thấy các thông báo như thế này trong thiết bị đầu cuối: Too many requests, waiting 20s and trying again.Đây không phải là vấn đề, nhưng điều đó có nghĩa là toàn bộ quá trình có thể mất một lúc. Ngoài ra, phiên đăng nhập có thể hết hạn sau một thời gian, kết quả là a TokenExpiredError. Nếu điều này xảy ra, chỉ cần tải lại http: // localhost: 5000 và tập lệnh sẽ tiếp tục (bỏ qua các tệp mà nó đã tải xuống).


Giải pháp đơn giản hơn, nhưng điều này nhận được các tệp trong HTML, không phải MD
JayPex

1
Như tôi đã đề cập ngắn gọn trong câu trả lời, bạn có thể sử dụng pandoc để chuyển đổi HTML sang markdown (ví dụ pandoc --from html --to markdown -o output.md input.html). Tuy nhiên, cần lưu ý rằng không phải tất cả các trang OneNote đều có thể được thể hiện hoàn hảo trong đánh dấu để bạn có thể mất một số chi tiết định dạng. Ngoài ra, pandoc hỗ trợ một số hương vị đánh dấu để bạn có thể muốn đọc tài liệu để tìm một tài liệu phù hợp với mục đích sử dụng của bạn.
danmou

Ok chắc chắn đáng thử trước khi đi đường dài trong câu trả lời đầu tiên. Cảm ơn!
JayPex

4

Để xuất các trang OneNote của bạn sang đánh dấu riêng lẻ ( .md), bạn nên cài đặt JoplinEvernote .

Như được đề xuất trong liên kết này , đầu tiên bạn nhập ghi chú vào Evernote. Sau đó xuất tất cả các ghi chú vào một .enextệp từ Evernote và nhập chúng vào Joplin.

Joplin có tùy chọn để xuất các ghi chú dưới dạng .mdtệp.

Lưu ý: Tôi khuyên bạn nên sử dụng cờ trong Evernote trước nếu bạn muốn nhóm các ghi chú của mình, vì cách Evernote để giữ phân cấp giữa các ghi chú khác với OneNote.


1
Bạn thật tuyệt vời! Câu trả lời của bạn đã truyền cảm hứng cho tôi để nhập các phần sổ ghi chép vào Evernote, sau đó nhập chúng từ Evernote vào Notion! Cảm ơn
JayPex

0

Tôi đã tìm thấy một công việc không lập trình xung quanh cho việc này.

TLDR;

Xuất ghi chú từ OneNote vào Evernote sau đó vào Notion (Tùy chọn) sau đó xuất dưới dạng các tệp riêng lẻ với định dạng bạn chọn.


Tôi đã thực sự vật lộn để xuất các ghi chú của mình từ Notion, một cái nhìn trực tuyến sẽ trả về một số cách thực sự ô uế để xuất và chia các trang OneNote và biến chúng thành các tệp md hoặc html. Thật là một mớ hỗn độn!

Về cơ bản, bạn có thể dễ dàng nhập các phần OneNote của mình vào Evernote, sau khi tải xuống Evernote cho máy tính để bàn, thật dễ dàng để làm điều đó, từ đó, cũng dễ dàng nhập các phần đó vào Notion.

Chỉ cần lưu ý, bạn có thể muốn nhập từng phần riêng lẻ nếu bạn muốn giữ cùng một tổ chức, nếu không, bạn chỉ có thể nhập hàng loạt tất cả các phần, các trang cũng sẽ được gắn thẻ với tên của phần đó và tất cả đều vào Notion.

Xin lưu ý rằng bạn cần phải đồng bộ hóa sổ ghi chép OneNote của mình bằng cách đăng nhập vào tài khoản Microsoft / Outlook của bạn và xác minh chúng được đồng bộ hóa bằng OneNote 2016.

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.