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 に答える