2011-11-15 12 views
6

यह शायद थोड़ा बेवकूफ है, लेकिन मुझे वास्तव में इसकी आवश्यकता है। मेरे पास 5 टेबल के साथ दस्तावेज़ है जिसमें प्रत्येक तालिका में शीर्षक है। शीर्षक एक नियमित पाठ है जिसमें कोई विशेष स्टाइल नहीं है, कुछ भी नहीं। मुझे उन तालिकाओं + प्लस हेडर से डेटा निकालने की आवश्यकता है। वर्तमान में, एमएस इंटरॉप का उपयोग कर रहा कुछ इस तरह का उपयोग कर प्रत्येक तालिका की प्रत्येक कोशिका के माध्यम से पुनरावृति करने में सक्षम था:तालिका के ऊपर पाठ प्राप्त करें एमएस वर्ड

app.Tables[1].Cell(2, 2).Range.Text; 

लेकिन अब मैं यह पता लगाने की कैसे सही तालिका के ऊपर पाठ प्राप्त करने की कोशिश पर संघर्ष कर रहा हूँ। enter image description here

पहली तालिका के लिए मैं के लिए "मैं इस पाठ की जरूरत है" और secnd तालिका के लिए मैं प्राप्त करने की आवश्यकता की जरूरत है:: यहाँ एक स्क्रीनशॉट "और भी इस एक कृपया"

तो, मूल रूप से मैं पिछले जरूरत प्रत्येक तालिका से पहले अनुच्छेद। इस संबंध में कोई सुझाव कि इसे कैसे किया जा सकता है?

उत्तर

3

आप इस के साथ कुछ कोशिश कर सकते हैं। मैं पैराग्राफ की तुलना तालिका के पहले सेल में करता हूं, और जब कोई मिलान होता है, तो पिछले अनुच्छेद को तालिका शीर्षलेख के रूप में पकड़ें। बेशक यह तभी काम करता है तालिका के प्रथम कक्ष एक अद्वितीय पैरा दस्तावेज़ में एक अन्य स्थान पर नहीं पाया जा होता है कि शामिल हैं:

var tIndex = 1; 
var tCount = oDoc.Tables.Count; 
var tblData = oDoc.Tables[tIndex].Cell(1, 1).Range.Text; 
var pCount = oDoc.Paragraphs.Count; 
var prevPara = ""; 
for (var i = 1; i <= pCount; i++) { 
    var para = oDoc.Paragraphs[i]; 
    var paraData = para.Range.Text; 

    if (paraData == tblData) { 
     // this paragraph is at the beginning of the table, so grab previous paragraph 
     Console.WriteLine("Header: " + prevPara); 
     tIndex++; 
     if (tIndex <= tCount) 
      tblData = oDoc.Tables[tIndex].Cell(1, 1).Range.Text; 
     else 
      break; 
    } 
    prevPara = paraData; 
} 

नमूना आउटपुट:

उसके जवाब में
Header: I NEED THIS TEXT 

Header: AND THIS ONE also please 
+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! आपके समाधान ने मुझे यह लागू करने के बारे में एक विचार दिया। कुछ समय बिताने के बाद, मैंने इसे करने का एक आसान तरीका निकाला। मैं इसे एक उत्तर के रूप में पोस्ट करूंगा। – user194076

9

Mellamokb दिया मुझे एक संकेत और अनुच्छेदों में खोज करने का एक अच्छा उदाहरण है। अपने समाधान को लागू करते समय मैं "पिछला" काम करता था जो हमें वही करता है जो हमें चाहिए। यहां इसका उपयोग कैसे करें:

wd.Tables[1].Cell(1, 1).Range.Previous(WdUnits.wdParagraph, 2).Text; 

पिछला दो पैरामीटर स्वीकार करता है। पहला - यूनिट जो आप इस सूची से ढूंढना चाहते हैं: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.wdunits.aspx और दूसरा पैरामीटर यह है कि आप कितनी इकाइयां वापस गिनना चाहते हैं। मेरे मामले में 2 काम किया। ऐसा लगता है कि यह होना चाहिए क्योंकि यह टेबल से ठीक पहले है, लेकिन एक के साथ, मुझे अजीब विशेष चरित्र मिला: जो महिला सूचक की तरह दिखता है।

+0

मैंने सोचा कि "शब्द में एक तालिका के ऊपर पाठ कैसे प्राप्त करें" के लिए googling पूरी तरह से व्यर्थ होगा, लेकिन मैं बेताब था और मैंने कोशिश की। यह मुझे एक समाधान के लिए नेतृत्व किया। धन्यवाद! मैं सी # netoffice के साथ, आप तालिका पर पिछली सिब्लिंग() विधि का उपयोग करना चाहते हैं। – user1815201

+0

ग्रेट उत्तर आपको बहुत बहुत धन्यवाद! –

+0

वाह! वास्तव में स्मार्ट चाल, यह पूरी तरह से काम करता है –

संबंधित मुद्दे