1

我正在使用 Visual Studio 2010 .NET4.0 并尝试使用 Open XML SDK 2.5 从 word 文档中提取文本。它提供的工具(WindowsBase 和 DocumentFormat.OpenXml)在我当前的解决方案中被引用。

虽然我同时引用了 WindowsBase 和 DocumentForm.OpenXml,但我不能使用 SPFile。

作为参考,我正在尝试在这个 SOF 线程上实现@KyleM 的解决方案:How to extract text from MS office documents in C#

我还为 DocumentForm.OpenXml; 添加了一条 using 语句。和 System.IO.Packaging;

4

1 回答 1

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();
        }
    }
}
于 2015-09-28T16:44:58.637 回答