【问题标题】:How to read docx files line by line with c#?如何用c#逐行读取docx文件?
【发布时间】:2019-09-29 21:26:10
【问题描述】:

我正在尝试使用 Open XML 库来读取这样的 docx 文件 =

White Noise
Rain Sounds
1

Hot N*gga
Bobby Shmurda
2

Ric Flair Drip (& Metro Boomin)
21 Savage , Offset , Metro Boomin
3

Plastic
Jaden
4

我的代码是=

public static void 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;


                Console.Write(body.InnerText);
                Console.ReadKey();
            }
        }

但读取的字符串是这个=

White NoiseRain Sounds1Hot N*ggaBobby Shmurda2Ric Flair Drip (& Metro Boomin)21 Savage , Offset , Metro Boomin3PlasticJaden

如何逐行阅读?

【问题讨论】:

  • 这是文本而不是 DOCX 内容。
  • 您的 docx 文件实际上是什么样的?它不像你写的那样只是纯文本。 XML 是基于元素的文档。您可能需要逐个元素地阅读。
  • 此文本位于 docx 文件中。但我发现了问题。我通过从谷歌浏览器上的文本复制和粘贴来制作这个 docx 文件。并且浏览器下一行字符(ENTER 或 \n)与我的键盘下一行字符(以及 Open XML Library)不同。当我在文件的字符串之间放置一个 ENTER 字符时,我逐个元素地获取。所以我认为我必须在所有字符串数据之间放置一个 ENTER 。你有其他意见吗? @MarkSchultheiss
  • 通过 cmets 就问题进行咨询并不是我真正的习惯。

标签: c# openxml docx


【解决方案1】:

循环段落:

using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(filepath, false))
{
    var paragraphs = wordDocument.MainDocumentPart.RootElement.Descendants<Paragraph>();
    foreach (var paragraph in paragraphs)
    {
        Console.WriteLine(paragraph.InnerText);
    }
    Console.ReadKey();
}

【讨论】:

  • 在有机收集的 docx 数据中,您的代码将正确运行。但是有一个问题,我通过从谷歌浏览器上的文本复制和粘贴来制作这个 docx 文件。并且浏览器下一行字符(ENTER 或 \n)与我的键盘下一行字符(以及 Open XML Library)不同。当我在文件的字符串之间放置一个 ENTER 字符时,我逐个元素地获取。所以我在所有字符串数据之间输入了一个 ENTER。
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多