Python का उपयोग करके OneNote फ़ाइलों में तालिकाओं को पार्स करने का तरीका

Python का उपयोग करके OneNote फ़ाइलों में तालिकाओं को पार्स करने का तरीका

Microsoft OneNote उपयोगकर्ताओं को पृष्ठों में सीधे संरचित डेटा तालिकाएँ एम्बेड करने देता है। Aspose.Note FOSS for Python प्रत्येक तालिका को Table → TableRow → TableCell पदानुक्रम के माध्यम से उजागर करता है, जिससे आपको सभी सेल सामग्री, कॉलम मेटाडेटा, और तालिका टैग्स तक प्रोग्रामेटिक पहुंच मिलती है।

लाभ

  1. संरचित पहुँच: पंक्तियों और स्तंभों की गिनती, व्यक्तिगत सेल सामग्री, स्तंभ चौड़ाई
  2. स्प्रेडशीट ऐप की आवश्यकता नहीं: किसी भी प्लेटफ़ॉर्म पर OneNote से तालिका डेटा निकालें
  3. नि:शुल्क और ओपन‑सोर्स: MIT लाइसेंस, कोई API कुंजी नहीं

चरण-दर-चरण गाइड

चरण 1: Python के लिए Aspose.Note FOSS स्थापित करें

pip install aspose-note

चरण 2: .one फ़ाइल लोड करें

from aspose.note import Document

doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")

चरण 3: सभी तालिकाएँ खोजें

GetChildNodes(Table) का उपयोग करके पूरे दस्तावेज़ से पुनरावर्ती रूप से प्रत्येक तालिका प्राप्त करें:

from aspose.note import Document, Table

doc = Document("MyNotes.one")
tables = doc.GetChildNodes(Table)
print(f"Found {len(tables)} table(s)")

चरण 4: पंक्ति और सेल मान पढ़ें

TableRow और TableCell नोड्स को दोहराएँ। प्रत्येक सेल में RichText नोड्स होते हैं जिनकी .Text प्रॉपर्टी साधारण‑टेक्स्ट सामग्री देती है:

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")

for t, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"\nTable {t}: {len(table.Columns)} column(s)")
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cell_values = []
        for cell in row.GetChildNodes(TableCell):
            text = " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            cell_values.append(text)
        print(f"  Row {r}: {cell_values}")

चरण 5: कॉलम चौड़ाइयाँ पढ़ें

from aspose.note import Document, Table

doc = Document("MyNotes.one")
for i, table in enumerate(doc.GetChildNodes(Table), start=1):
    print(f"Table {i} column widths (pts): {[col.Width for col in table.Columns]}")
    print(f"Borders visible: {table.IsBordersVisible}")

चरण 6: CSV में निर्यात

import csv, io
from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
buf = io.StringIO()
writer = csv.writer(buf)

for table in doc.GetChildNodes(Table):
    for row in table.GetChildNodes(TableRow):
        values = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in row.GetChildNodes(TableCell)
        ]
        writer.writerow(values)
    writer.writerow([])   # blank row between tables

with open("tables.csv", "w", encoding="utf-8", newline="") as f:
    f.write(buf.getvalue())
print("Saved tables.csv")

सामान्य समस्याएँ और समाधान

टेबल खाली दिखाई दे रहे हैं

कारण: कोशिकाओं में Image नोड्स होते हैं, RichText नोड्स के बजाय।

जाँच:

from aspose.note import Document, Table, TableRow, TableCell, RichText, Image

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    for row in table.GetChildNodes(TableRow):
        for cell in row.GetChildNodes(TableCell):
            texts = cell.GetChildNodes(RichText)
            images = cell.GetChildNodes(Image)
            print(f"  Cell: {len(texts)} text(s), {len(images)} image(s)")

कॉलम गिनती मेल नहीं खाती Columns

table.Columns फ़ाइल में संग्रहीत कॉलम मेटाडेटा को दर्शाता है। यदि पंक्तियों में मर्ज किए गए सेल हों तो प्रत्येक पंक्ति में वास्तविक सेल की संख्या अलग हो सकती है (फ़ाइल फ़ॉर्मेट इसे बाइनरी स्तर पर संग्रहीत करता है; सार्वजनिक API मर्ज फ़्लैग को उजागर नहीं करता)।

ImportError: ‘aspose’ नाम का कोई मॉड्यूल नहीं मिला

pip install aspose-note
pip show aspose-note  # confirm it is installed in the active environment

अक्सर पूछे जाने वाले प्रश्न

क्या मैं तालिका डेटा को संपादित कर सकता हूँ और उसे वापस सहेज सकता हूँ? नहीं। .one फ़ॉर्मेट में वापस लिखना समर्थित नहीं है। मेमोरी में किए गए परिवर्तन (उदा. RichText.Replace() के माध्यम से) स्रोत फ़ाइल में स्थायी नहीं किए जा सकते।

क्या मर्ज किए गए सेल्स का पता चलता है? CompositeNode API मर्ज मेटाडेटा को उजागर नहीं करता। प्रत्येक TableCell को दृश्य मर्जिंग की परवाह किए बिना एक अलग सेल माना जाता है।

क्या मैं गिन सकता हूँ कि एक तालिका में कितनी पंक्तियाँ हैं? हाँ: len(table.GetChildNodes(TableRow)).


संबंधित संसाधन:

 हिन्दी