.NET में तालिकाओं के साथ कैसे काम करें
यह गाइड दिखाता है कि प्रोग्रामेटिक रूप से टेबल्स कैसे बनाएं, फॉर्मेट करें, और पढ़ें Aspose.Words FOSS .NET के लिए, उपयोग करके Table, Row, और Cell क्लासेज़ in the Aspose.Words.Tables नेमस्पेस के साथ DocumentBuilder. यह कवर करता है शून्य से टेबल बनाना, निर्माण के दौरान सेल्स और रो को फॉर्मेट करना, पूरी टेबल के लेआउट और AutoFit को नियंत्रित करना, वांछित चौड़ाइयाँ सेट करना, सेल्स को मर्ज करना, और लोडेड दस्तावेज़ में पहले से मौजूद टेबल्स को पढ़ना।
कदम-दर-कदम गाइड
चरण 1: पैकेज स्थापित करें
Aspose.Words FOSS for .NET अभी तक एक NuGet पैकेज प्रकाशित नहीं करता – इसके बजाय स्रोत से लाइब्रेरी बनाएँ। https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git को क्लोन करें, फिर .NET SDK के साथ रिलीज़ कॉन्फ़िगरेशन में Aspose.Words.sln बनाएँ और अपने प्रोजेक्ट से उत्पन्न Aspose.Words असेंबली को संदर्भित करें। लाइब्रेरी .NET Standard 2.0 को लक्षित करती है, इसलिए यह .NET Framework 4.6.2+ और .NET 6/8/10 पर चलती है।
चरण 2: आवश्यक क्लासों को आयात करें
कोर दस्तावेज़ क्लासों (Document, DocumentBuilder) के लिए एक using Aspose.Words; निर्देश जोड़ें, और इस मार्गदर्शिका में वर्णित तालिका-विशिष्ट क्लासों के लिए एक using Aspose.Words.Tables; निर्देश जोड़ें – Table, Row, Cell, CellFormat, RowFormat, PreferredWidth, तथा संबंधित एन्नम्स।
चरण 3: DocumentBuilder के साथ नई तालिका बनाएं
एक Document और उससे बंधा एक DocumentBuilder बनाएं, फिर DocumentBuilder.StartTable() को कॉल करके कर्सर पर तालिका शुरू करें। प्रत्येक पंक्ति में प्रत्येक सेल के लिए, DocumentBuilder.InsertCell() को कॉल करें, फिर DocumentBuilder.EndRow() से पंक्ति बंद करें। तालिका को आवश्यक जितनी पंक्तियों की जरूरत हो, दोहराएँ, और पूरी तालिका को DocumentBuilder.EndTable() से बंद करें। प्रत्येक StartTable() को एक मेल खाते हुए EndTable() की आवश्यकता होती है, और प्रत्येक पंक्ति को एक मेल खाते हुए EndRow() की आवश्यकता होती है, अन्यथा बिल्डर की आंतरिक स्थिति — और परिणामी दस्तावेज़ वृक्ष — विकृत हो जाएगा।
चरण 4: बनाते समय कोशिकाओं और पंक्तियों को स्वरूपित करें
InsertCell() या EndRow() को कॉल करने से पहले DocumentBuilder.CellFormat और DocumentBuilder.RowFormat सेट करें ताकि बिल्डर द्वारा अभी बनाने वाली कोशिकाओं और पंक्तियों पर फ़ॉर्मेट लागू हो सके — ये दो प्रॉपर्टी नई सामग्री के लिए एक टेम्पलेट के रूप में कार्य करती हैं, न कि पहले से डाली गई कोशिकाओं पर पुनरावर्ती परिवर्तन के रूप में। CellFormat Borders, Shading, Width, WrapText, FitText, HorizontalMerge, VerticalMerge, VerticalAlignment, PreferredWidth और चार पैडिंग प्रॉपर्टी (LeftPadding, RightPadding, TopPadding, BottomPadding) को उजागर करता है, जिन्हें सभी को एक साथ SetPaddings() से सेट किया जा सकता है। RowFormat Borders, Height, HeightRule, AllowBreakAcrossPages और HeadingFormat को उजागर करता है। अगली पंक्ति या कोशिका के लिए नए मूल्य सेट करने से पहले CellFormat.ClearFormatting() या RowFormat.ClearFormatting() को कॉल करके किसी भी एक को डिफ़ॉल्ट पर रीसेट करें।
चरण 5: संपूर्ण तालिका का लेआउट और AutoFit सेट करें
एक बार तालिका मौजूद हो जाने पर, लेआउट प्रॉपर्टी सीधे Table ऑब्जेक्ट पर सेट करें: Alignment (TableAlignment), Bidi, LeftIndent, PreferredWidth, Style, StyleIdentifier, StyleName, StyleOptions (TableStyleOptions), और TextWrapping। पूरे तालिका में एक बॉर्डर शैली, चौड़ाई, और रंग लागू करने के लिए Table.SetBorders() को कॉल करें, या एक ही पक्ष सेट करने के लिए Table.SetBorder() का उपयोग करें; ClearBorders() और ClearShading() उन्हें रीसेट करते हैं। चुने हुए व्यवहार के अनुसार तालिका और उसकी कोशिकाओं का आकार बदलने के लिए Table.AutoFit(AutoFitBehavior) का उपयोग करें — किसी भी संरचनात्मक संपादन के बाद इसे फिर से कॉल करें, क्योंकि यह केवल उस क्षण के तालिका की स्थिति को दर्शाता है, निरंतर नहीं।
चरण 6: वरीय और कोशिका चौड़ाइयों को सेट करें
PreferredWidth.FromPercent() स्थैतिक फ़ैक्टरी मेथड्स के साथ चौड़ाई मान बनाएं, जो उपलब्ध पृष्ठ चौड़ाई के अनुसार अनुकूलित लेआउट देता है, या PreferredWidth.FromPoints() का उपयोग करके स्थिर चौड़ाई बनाएं; PreferredWidthType बताता है कि किसी दिए गए PreferredWidth में किस प्रकार का मान (Auto, Percent, या Points) है। परिणाम को या तो पूरी तालिका के लिए Table.PreferredWidth या एक कोशिका के लिए CellFormat.PreferredWidth को असाइन करें।
चरण 7: सेल्स को मिलाएँ
सेलों को मर्ज किया हुआ चिह्नित करने के लिए उन सेल्स पर CellFormat.HorizontalMerge या CellFormat.VerticalMerge सेट करें (दोनों को CellMerge टाइप किया जाता है) जो मर्ज में भाग लेनी चाहिए। यदि सेल्स को केवल उनकी चौड़ाई मिलाकर दिखाया गया हो, न कि स्पष्ट रूप से फ़्लैग किया गया हो, तो Table.ConvertToHorizontallyMergedCells() को कॉल करें ताकि उस दृश्य व्यवस्था को वास्तविक CellMerge स्थिति वाले सेल्स में बदला जा सके। CellVerticalAlignment नियंत्रित करता है कि सामग्री को सेल के भीतर लंबवत कैसे संरेखित किया जाए, चाहे कोई मर्ज हो या न हो।
चरण 8: मौजूदा दस्तावेज़ से तालिकाएँ पढ़ें
लोड किए गए दस्तावेज़ में पहले से मौजूद तालिकाओं के साथ काम करने के लिए, नए बनाते बजाय Body.Tables पढ़ें (या किसी अन्य Story पर Tables प्रॉपर्टी) — एक TableCollection। Table.Rows एक RowCollection लौटाता है और Row.Cells एक CellCollection लौटाता है; इन तीनों संग्रह प्रकारों में Add(), Insert(), Remove(), RemoveAt(), Contains(), और IndexOf() का समर्थन है प्रोग्रामेटिक संपादनों के लिए। पंक्तियों या सेल्स को हटाने के बाद, Table.EnsureMinimum(), Row.EnsureMinimum(), या Cell.EnsureMinimum() को कॉल करें ताकि नोड Word द्वारा अपेक्षित न्यूनतम वैध संरचना — क्रमशः एक खाली पंक्ति, एक खाली सेल, या एक खाली पैराग्राफ — को बनाए रखे।
सामान्य समस्याएँ और समाधान
सहेजा गया दस्तावेज़ विकृत दिखाई देता है, या सहेजते समय त्रुटि होती है एक पंक्ति या तालिका स्वयं कभी बंद नहीं हुई। हमेशा जोड़ें DocumentBuilder.StartTable() एक अंतिम के साथ EndTable(), और प्रत्येक पंक्ति को … के साथ बंद करें EndRow() अगली पर जाने या तालिका समाप्त करने से पहले।
नए कोशिकाएँ वह स्वरूपण नहीं लेतीं जो मैंने सेट किया है CellFormat and RowFormat पर बदल दिया गया DocumentBuilder प्रभावित कोशिकाएँ पहले ही सम्मिलित होने के बाद। सेट DocumentBuilder.CellFormat / RowFormat से पहले InsertCell() or EndRow() ऐसी कॉल जो वह सामग्री बनाती है जिसे आप स्वरूपित करना चाहते हैं।
टेबल मेरे अपेक्षित तरीके से पुनः आकार नहीं लेती है जब मैं उसकी सामग्री संपादित करता हूँ। Table.AutoFit(AutoFitBehavior) टेबल की संरचना को केवल उस क्षण प्रतिबिंबित करता है जब इसे बुलाया जाता है। किसी भी संरचनात्मक संपादन—पंक्तियों, कोशिकाओं या सामग्री को जोड़ने या हटाने—के बाद इसे फिर से कॉल करें, यदि लेआउट को पुनः फिट करने की आवश्यकता हो।
जो कोशिकाएँ मिली हुई दिखती हैं, वे पढ़ने पर अलग-अलग कोशिकाओं की तरह व्यवहार करती हैं। कोशिकाओं को केवल चौड़ाई के आधार पर मिलाया गया था, लेकिन चिह्नित नहीं किया गया था। CellMerge. कॉल Table.ConvertToHorizontallyMergedCells(), या सेट करें CellFormat.HorizontalMerge / VerticalMerge स्पष्ट रूप से उन कोशिकाओं पर जिन्हें मिलाना चाहिए।
पंक्तियों या कोशिकाओं को हटाने से तालिका एक अमान्य स्थिति में रह जाती है Word प्रत्येक की अपेक्षा करता है Table, Row, और Cell न्यूनतम वैध संरचना बनाए रखने के लिए। प्रोग्रामेटिक रूप से सामग्री हटाने के बाद, कॉल करें EnsureMinimum() सिर्फ संशोधित नोड पर।
अक्सर पूछे जाने वाले प्रश्न
मैं मौजूदा टेबल को संपादित करने के बजाय शून्य से टेबल कैसे बनाऊँ?
DocumentBuilder का उपयोग करें: StartTable() को कॉल करें, फिर प्रत्येक पंक्ति में प्रत्येक कोशिका के लिए InsertCell() करें, पंक्ति बंद करने के लिए EndRow() करें, अतिरिक्त पंक्तियों के लिए दोहराएँ, और टेबल बंद करने के लिए EndTable() करें।
लोड किए गए दस्तावेज़ में पहले से मौजूद टेबल्स को मैं कैसे प्राप्त करूँ?
विचाराधीन सेक्शन के Body पर Tables प्रॉपर्टी (एक TableCollection) पढ़ें, या किसी अन्य Story जैसे हेडर या फ़ूटर पर।
मैं तालिका को निश्चित चौड़ाई के बजाय पृष्ठ की चौड़ाई के प्रतिशत के रूप में कैसे सेट करूँ?
Table.PreferredWidth = PreferredWidth.FromPercent(value) को असाइन करें, PreferredWidth.FromPoints(value) के बजाय।
SetBorders और SetBorder से बॉर्डर सेट करने में क्या अंतर है?
Table.SetBorders() तालिका के प्रत्येक बॉर्डर पर एक साथ एक लाइन शैली, चौड़ाई और रंग लागू करता है; Table.SetBorder() एकल पक्ष को सेट करता है, जिससे विभिन्न पक्ष अलग-अलग फॉर्मैटिंग रख सकते हैं।
सेल या पंक्ति पर पुनः उपयोग करने से पहले फॉर्मेटिंग को कैसे रीसेट करूँ?
सेल के CellFormat पर CellFormat.ClearFormatting() कॉल करें, या पंक्ति के RowFormat पर RowFormat.ClearFormatting() कॉल करें।