2013-07-15 3 views
1

Visual Studio 2010 .NET4.0을 사용 중이며 Open XML SDK 2.5를 사용하여 단어 문서에서 텍스트를 추출하려고합니다. WindowsBase 및 DocumentFormat .OpenXml)는 현재 솔루션에서 참조됩니다.WindowsBase 및 Open XML SDK 2.5로 작업 할 때 SPFile을 사용할 수 없습니다.

WindowsBase와 DocumentForm.OpenXml을 모두 참조했지만 SPFile을 사용할 수 없습니다. 참고로

, 나는이 SOF 스레드에서 KyleM의 솔루션 @ 구현하기 위해 노력하고있어 : How to extract text from MS office documents in C#

또한

내가 모두 DocumentForm.OpenXml에 대한 using 문을 추가했습니다; 및 System.IO.Packaging;

+1

WordprocessingDocument wdDoc = WordprocessingDocument .Open (전체 이름, 거짓)) SPFile은 SharePoint 라이브러리 중 하나에있는 클래스입니다. SharePoint를 사용하지 않는 경우에는 필요하지 않을 수도 있습니다. –

+1

어젯밤에 조사를 한 결과, 필요한 것은 Share Point의 일부입니다. 서버에 실제로 있지 않으면 올바르게 컴파일되지 않습니다.이 응용 프로그램을 바탕 화면에 배포하므로 문제가 발생하지 않습니다. 오늘 밤 집에 왔을 때 네가 한 말을 꺼내. –

답변

0

그냥 기록을 위해, @bibadia의 제안이 제작 :

다음, (예를 들어, 문자열 전체 이름의 매개 변수를 변경 문자열로 파일의 전체 이름을 통과 (사용 아마도 충분히
using DocumentFormat.OpenXml.Packaging; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web; 
using System.Xml; 

namespace MyProject.Helpers 
{ 
    public static class WordHelper 
    { 
     public static string TextFromWord(String fileName) 
     { 
      const string wordmlNamespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; 

      StringBuilder textBuilder = new StringBuilder(); 
      using (WordprocessingDocument wdDoc = WordprocessingDocument.Open(fileName, false)) 
      { 
       // Manage namespaces to perform XPath queries. 
       NameTable nt = new NameTable(); 
       XmlNamespaceManager nsManager = new XmlNamespaceManager(nt); 
       nsManager.AddNamespace("w", wordmlNamespace); 

       // Get the document part from the package. 
       // Load the XML in the document part into an XmlDocument instance. 
       XmlDocument xdoc = new XmlDocument(nt); 
       xdoc.Load(wdDoc.MainDocumentPart.GetStream()); 

       XmlNodeList paragraphNodes = xdoc.SelectNodes("//w:p", nsManager); 
       foreach (XmlNode paragraphNode in paragraphNodes) 
       { 
        XmlNodeList textNodes = paragraphNode.SelectNodes(".//w:t", nsManager); 
        foreach (System.Xml.XmlNode textNode in textNodes) 
        { 
         textBuilder.Append(textNode.InnerText); 
        } 
        textBuilder.Append(Environment.NewLine); 
       } 

      } 
      return textBuilder.ToString(); 
     } 
    } 
}