2015-03-11 8 views
5

मैं MSWord दस्तावेज़ के सभी पृष्ठों को Microsoft.Office.Interop.Word (मैं VS2012 में C# का उपयोग कर रहा हूं) के माध्यम से प्राप्त करने का प्रयास कर रहा हूं। मैं क्या प्राप्त करना चाहता हूं सूची < स्ट्रिंग> पेज, जहां अनुक्रमणिका पृष्ठ की संख्या है। मैं समझता हूं (कम से कम मुझे ऐसा लगता है) कि ऐसा करने का कोई सीधा तरीका नहीं है। तो मैं ऐसा ही कुछ के साथ आया था:शब्द दस्तावेज़ के पृष्ठ प्राप्त करें

 List<String> Pages = new List<String>(); 
     int NumberOfPreviousPage = -1; 
     int NumberOfPage = -1; 
     string InnerText = ""; 
     for (int i = 0; i < Doc.Paragraphs.Count; i++) 
     { 
      Paragraph CurrentParagraph = Doc.Paragraphs[i + 1]; 
      InnerText = CurrentParagraph.Range.Text; 
      NumberOfPage = CurrentParagraph.Range.get_Information(WdInformation.wdActiveEndPageNumber); 
      if (NumberOfPage == NumberOfPreviousPage) 
       Pages[Pages.Count - 1] += String.Format("\r\n{0}", InnerText); 
      else 
      { 
       Pages.Add(InnerText); 
       NumberOfPreviousPage = NumberOfPage; 
      } 
     } 

लेकिन, जब एल्गोरिथ्म पैरा, जो एक पृष्ठ पर शुरू होता है और एक अन्य को समाप्त होता है के लिए हो जाता है, यह तय करता है कि पैरा अगले पन्ने पर होना चाहिए। मैं पृष्ठों के बीच इस अनुच्छेद को विभाजित करना चाहता हूं, लेकिन मुझे नहीं पता कि मुझे यह पता लगाने के लिए कि मुझे विभाजन कहाँ करना है।

+0

देखें यहाँ भी http://stackoverflow.com/a/12339771/74,585 –

उत्तर

5

आखिरकार, मैं इस के साथ समाप्त हो गया है, और यह काम करता है (यह लंगड़ा है, यह बदसूरत है, लेकिन यह करता है कि वह क्या करना चाहिए):

public string[] GetPagesDoc(object Path) 
    { 
     List<string> Pages = new List<string>(); 

     // Get application object 
     Microsoft.Office.Interop.Word.Application WordApplication = new Microsoft.Office.Interop.Word.Application(); 

     // Get document object 
     object Miss = System.Reflection.Missing.Value; 
     object ReadOnly = false; 
     object Visible = false; 
     Document Doc = WordApplication.Documents.Open(ref Path, ref Miss, ref ReadOnly, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Visible, ref Miss, ref Miss, ref Miss, ref Miss); 

     // Get pages count 
     Microsoft.Office.Interop.Word.WdStatistic PagesCountStat = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages; 
     int PagesCount = Doc.ComputeStatistics(PagesCountStat, ref Miss); 

     //Get pages 
     object What = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage; 
     object Which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute; 
     object Start; 
     object End; 
     object CurrentPageNumber; 
     object NextPageNumber; 

     for (int Index = 1; Index < PagesCount + 1; Index++) 
     { 
      CurrentPageNumber = (Convert.ToInt32(Index.ToString())); 
      NextPageNumber = (Convert.ToInt32((Index+1).ToString())); 

      // Get start position of current page 
      Start = WordApplication.Selection.GoTo(ref What, ref Which, ref CurrentPageNumber, ref Miss).Start; 

      // Get end position of current page         
      End = WordApplication.Selection.GoTo(ref What, ref Which, ref NextPageNumber, ref Miss).End; 

      // Get text 
      if (Convert.ToInt32(Start.ToString()) != Convert.ToInt32(End.ToString())) 
       Pages.Add(Doc.Range(ref Start, ref End).Text); 
      else 
       Pages.Add(Doc.Range(ref Start).Text); 
     } 
      return Pages.ToArray<string>(); 
    } 
संबंधित मुद्दे