नीचे दिया गया कोड दिखाता है कि दस्तावेज़ दस्तावेज़ में द्वारा Decendants<CheckBox>()
विधि का उपयोग करके दस्तावेज़ दस्तावेज़ में सभी चेकबॉक्सों को कैसे गणना करें।
using (WordprocessingDocument doc = WordprocessingDocument.Open("c:\\temp\\checkbox.docx", true))
{
foreach (CheckBox cb in doc.MainDocumentPart.Document.Body.Descendants<CheckBox>())
{
Console.Out.WriteLine(cb.LocalName);
FormFieldName cbName = cb.Parent.ChildElements.First<FormFieldName>();
Console.Out.WriteLine(cbName.Val);
DefaultCheckBoxFormFieldState defaultState = cb.GetFirstChild<DefaultCheckBoxFormFieldState>();
Checked state = cb.GetFirstChild<Checked>();
Console.Out.WriteLine(defaultState.Val.ToString());
if (state.Val == null) // In case checkbox is checked the val attribute is null
{
Console.Out.WriteLine("CHECKED");
}
else
{
Console.Out.WriteLine(state.Val.ToString());
}
}
}
किसी दिए गए चेकबॉक्स इनपुट तत्व आप CheckBox
उदाहरण के Parent
संपत्ति का उपयोग और उसके बाद FormFieldName
तत्व के लिए खोज (माइक्रोसॉफ्ट में गुण संवाद का उपयोग एक चेकबॉक्स को नाम निर्दिष्ट करने के लिए किया है के नाम निर्धारित करने के लिए शब्द)।
DefaultCheckBoxFormFieldState
Val
संपत्ति चेकबॉक्स के लिए डिफ़ॉल्ट स्थिति रखती है। इसके अलावा Checked
तत्व की संपत्ति CheckBox
उदाहरण की वास्तविक चेक स्थिति रखती है। नोट, माइक्रोसॉफ्ट वर्ड 2007 के लिए वैल प्रॉपर्टी null
है यदि चेकबॉक्स चेक किया गया है।
संपादित
मैं अपने जवाब का विस्तार करना चाहते हैं शुरू करते हैं। वास्तव में, एमएस वर्ड डेवलपर टैब पर दो प्रकार के चेकबॉक्स नियंत्रण होते हैं - एक विरासत चेकबॉक्स और एक ActiveX नियंत्रण चेकबॉक्स। उपरोक्त दिखाया गया कोड किसी शब्द दस्तावेज़ में विरासत चेकबॉक्स को गिनने के लिए उपयोग किया जा सकता है (विरासत चेकबॉक्स बनाने के तरीके पर यह article देखें)।
जहां तक मुझे पता है, आप ActiveX चेकबॉक्स के लिए मान प्राप्त करने/सेट करने के लिए OpenXML SDK का उपयोग नहीं कर सकते हैं। हालांकि आप निम्नलिखित कोड का उपयोग कर ActiveX नियंत्रण की गणना कर सकते हैं:
foreach (Control ctrl in doc.MainDocumentPart.Document.Body.Descendants<Control>())
{
Console.Out.WriteLine(ctrl.Id);
Console.Out.WriteLine(ctrl.Name);
Console.Out.WriteLine(ctrl.ShapeId);
}
निर्धारित करने के लिए किया जाए या नहीं एक दिया Control
एक चेकबॉक्स आप Control
के वर्ग आईडी ckeck करने के लिए है है। चेकबॉक्स की कक्षा आईडी {8BD21D40-EC42-11CE-9E0D-00AA006002F3}
है। यहाँ वर्ग आईडी प्राप्त करने के लिए एक कोड नमूना है (मैं अगर वहाँ एक आसान तरीका है पता नहीं है ...):
OpenXmlPart part = doc.MainDocumentPart.GetPartById(ctrl.Id);
OpenXmlReader re = OpenXmlReader.Create(part.GetStream());
re.Read();
OpenXmlElement el = re.LoadCurrentElement();
if(el.GetAttribute("classid", el.NamespaceUri).Value == "{8BD21D40-EC42-11CE-9E0D-00AA006002F3}")
{
Console.WriteLine("Checkbox found...");
}
re.Close();
अंत संपादित
संपादित 2
मुझे एहसास नहीं हुआ कि वर्ड 2010 में एक नया चेकबॉक्स नियंत्रण है (डेनिस पामर के लिए धन्यवाद)।
उन नए चेकबॉक्स को नियंत्रित करता है आप निम्नलिखित कोड का उपयोग कर सकते गणना करने के लिए:
using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
{
MainDocumentPart mp = doc.MainDocumentPart;
foreach(SdtContentCheckBox cb in mp.Document.Body.Descendants<SdtContentCheckBox>())
{
if(cb.Checked.Val == "1");
{
Console.Out.WriteLine("CHECKED");
}
}
}
अंत संपादित 2
आशा, इस मदद करता है।
क्या आप चेक बॉक्स सामग्री नियंत्रण का उपयोग कर रहे हैं? – CoderDennis