Cách Lưu Tệp Đính Kèm Từ OneNote trong Python

Cách Lưu Tệp Đính Kèm Từ OneNote trong Python

Các tệp OneNote .one có thể chứa các tệp đính kèm nhúng: bất kỳ loại tệp nào được chèn vào một trang bằng cách sử dụng Insert → File Attachment trong OneNote. Aspose.Note FOSS cho Python cung cấp chúng thông qua lớp AttachedFile, lớp này cung cấp tên tệp gốc và các byte thô của tệp nhúng.


Điều kiện tiên quyết

pip install aspose-note

Bước 1: Tải tài liệu

from aspose.note import Document

doc = Document("MyNotes.one")

Bước 2: Tìm Tất Cả Các Tệp Đính Kèm

Sử dụng GetChildNodes(AttachedFile) để thu thập đệ quy mọi tệp đính kèm trong tài liệu, bất kể chúng xuất hiện trên trang hay đề mục nào:

from aspose.note import Document, AttachedFile

doc = Document("MyNotes.one")
attachments = doc.GetChildNodes(AttachedFile)
print(f"Found {len(attachments)} attachment(s)")

Bước 3: Lưu mỗi tệp đính kèm vào đĩa

Truy cập af.Bytes để lấy nội dung tệp thô và af.FileName để lấy tên gốc. Luôn bảo vệ trước một tên tệp None: thư viện trả về None khi siêu dữ liệu tên tệp không được lưu trong tệp:

from aspose.note import Document, AttachedFile

doc = Document("MyNotes.one")

for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
    name = af.FileName or f"attachment_{i}.bin"
    with open(name, "wb") as f:
        f.write(af.Bytes)
    print(f"Saved: {name} ({len(af.Bytes):,} bytes)")

Ví dụ hoàn chỉnh

Kịch bản này trích xuất tất cả các tệp đính kèm từ tệp .one và lưu chúng vào một thư mục đầu ra riêng biệt:

from pathlib import Path
from aspose.note import Document, AttachedFile

def save_all_attachments(one_path: str, out_dir: str = "attachments") -> None:
    doc = Document(one_path)
    out = Path(out_dir)
    out.mkdir(exist_ok=True)

    attachments = doc.GetChildNodes(AttachedFile)
    if not attachments:
        print("No attachments found.")
        return

    for i, af in enumerate(attachments, start=1):
        name = af.FileName or f"attachment_{i}.bin"
        dest = out / name
        dest.write_bytes(af.Bytes)
        print(f"  [{i}] {name}  ({len(af.Bytes):,} bytes)")

    print(f"\nSaved {len(attachments)} file(s) to '{out_dir}/'")

save_all_attachments("MyNotes.one")

Ghi chú

  • af.Bytes trả về b"" (byte rỗng) khi dữ liệu đính kèm không thể phân tích từ tệp nhị phân. Kiểm tra len(af.Bytes) > 0 trước khi lưu nếu bạn muốn bỏ qua các tệp đính kèm rỗng.
  • af.Tags là một danh sách các đối tượng NoteTag nếu tệp đính kèm có bất kỳ thẻ OneNote nào được áp dụng.
  • Aspose.Note FOSS for Python đọc các tệp .one nhưng không ghi lại vào .one. Bạn không thể tạo hoặc sửa đổi các tệp đính kèm.

Xem thêm

 Tiếng Việt