Python का उपयोग करके OneNote फ़ाइलों में तालिकाओं को पार्स करने का तरीका
Microsoft OneNote उपयोगकर्ताओं को पृष्ठों में सीधे संरचित डेटा तालिकाएँ एम्बेड करने देता है। Aspose.Note FOSS for Python प्रत्येक तालिका को Table → TableRow → TableCell पदानुक्रम के माध्यम से उजागर करता है, जिससे आपको सभी सेल सामग्री, कॉलम मेटाडेटा, और तालिका टैग्स तक प्रोग्रामेटिक पहुंच मिलती है।
लाभ
- संरचित पहुँच: पंक्तियों और स्तंभों की गिनती, व्यक्तिगत सेल सामग्री, स्तंभ चौड़ाई
- स्प्रेडशीट ऐप की आवश्यकता नहीं: किसी भी प्लेटफ़ॉर्म पर OneNote से तालिका डेटा निकालें
- नि:शुल्क और ओपन‑सोर्स: 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)).
संबंधित संसाधन: