如何从.docx / .odt / .doc文件中读取或复制文本

时间:2016-05-06 12:46:58

标签: c# .net doc

在我的应用程序中,我想读取文档文件(.doc或.odt或.docx)并将该文本存储在字符串中。为此,我使用下面的代码:

string text;     
using (var streamReader = new StreamReader(@"D:\Sample\Demo.docx", System.Text.Encoding.UTF8))
{
    text = streamReader.ReadToEnd();
}

但我无法阅读或复制正确的文字,因为它显示如下:

  

PK ! x% E [Content_Types] .xml ( IO0HWp @ 5rJqvIj /ۿ克%j)的P.ytfN&安培; QY 0 T9 w, L!jk gs @ л 0! Bp Y VJ t + N Kk Z'(Y / IX | / FL骐^ w ^ $¹ZIho|?btŔr+ W6V 7 *宽$}ëDΧriq = , Fݜ t 5+ Z( ? a z i [!0 k ,}O Ta \ m? i | ж AT SB ;'m; y \9 “La o % @k8 ?,Fc hL_\ 9I ! = m TT |P ̩}} $ | = | } PK

如何从文档文件中读取或复制文本?

3 个答案:

答案 0 :(得分:1)

为此您需要使用不同的库

使用Microsoft.Office.Interop.Word

从Word文档读取数据的示例
using System;
using Microsoft.Office.Interop.Word;

class Program
{
    static void Main()
    {
    // Open a doc file.
    Application application = new Application();
    Document document = application.Documents.Open("C:\\word.doc");

    // Loop through all words in the document.
    int count = document.Words.Count;
    for (int i = 1; i <= count; i++)
    {
        // Write the word.
        string text = document.Words[i].Text;
        Console.WriteLine("Word {0} = {1}", i, text);
    }
    // Close word.
    application.Quit();
    }
}

答案 1 :(得分:0)

Microsoft DocX-Format是一个容器,不会以简单明文(您的StreamReader尝试阅读的文本)保存数据。

您应该考虑使用类似以下内容的第三方库:https://docx.codeplex.com/

答案 2 :(得分:0)

Microsoft.Office.Interop.Word对于大型文档非常慢。所以我建议使用OpenXml。对于使用OpenXml,您应该安装它。

  1. 使用软件包管理器安装:

    Install-Package DocumentFormat.OpenXml-版本2.8.1

2。使用OpenWordprocessingDocumentReadonly函数:

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace Readdocx
{
    class Program
    {
        static void Main(string[] args)
        {
            string mytext = OpenWordprocessingDocumentReadonly("mytext.docx");
        }
        public static string OpenWordprocessingDocumentReadonly(string filepath)
        {
            // Open a WordprocessingDocument based on a filepath.
            using (WordprocessingDocument wordDocument =
                WordprocessingDocument.Open(filepath, false))
            {
                // Assign a reference to the existing document body.  
                Body body = wordDocument.MainDocumentPart.Document.Body;
                //text of Docx file 
                return body.InnerText.ToString();
             }
            return "-1";
        }
    }
}