如何在不使用microsoft.office.interop的情况下将word文档转换为c#中的文本文件?

问题描述 投票:0回答:2

我有很多不同版本的 Word 文档需要转换为文本文件。
我希望这个链接给你带来正确的方式 如何使用C#从Word文件中提取文本? 我想读取word文档的内容并删除所有格式(只有文本文件中的单词)。我已经通过使用 microsoft.office.interop(此处,始终在客户端上实例化 Word)来完成,但不推荐这样做。所以我试图创建一个 C# 项目,它应该自动将单词转换为文本。任何人都可以向我推荐任何 3rd 方工具,该工具对于 c# 中的所有版本的单词到文本文件转换来说应该是高效的开源或合理的价格吗?

致以问候, 珊蒂尼

c# file-conversion
2个回答
1
投票

最后我找到了目前非常适合我的解决方案。我还没有测试过 10000 个文档。给你。,http://sourceforge.net/projects/word-reader/?source=dlp 期待对此解决方案的评论和建议...

谢谢你, 珊蒂尼


0
投票

如果您不需要Interop,您可以使用NPOI。这是一个成熟的开源项目,可处理 Word 和 Excel 文件。

请注意,Word 文件可能具有复杂的结构,例如嵌套表格或连接/拆分单元格。我认为这就是为什么 NPOI 没有明确的

SaveAsText()
方法。但如果您只需要段落或表格中的文本,您可以像这样轻松提取它(.NET 6 示例):

public static IEnumerable<string> WordFileToText(string wordFilePath)
{
    using var fileStream = File.OpenRead(wordFilePath);
    using var doc = new XWPFDocument(fileStream);
    var result = WordFileToText(doc);
    return result;
}

private static IEnumerable<string> WordFileToText(XWPFDocument doc)
{
    var result = new List<string>();
    foreach (var bodyElement in doc.BodyElements)
    {
        if (bodyElement is XWPFParagraph paragraph)
        {
            result.Add(paragraph.Text);
            continue;
        }
        if (bodyElement is not XWPFTable table)
            continue;

        foreach (var row in table.Rows)
        {
            var tableLine = new StringBuilder();
            foreach (var cell in row.GetTableCells())
            {
                foreach (var cellParagraph in cell.Paragraphs)
                {
                    tableLine.Append(cellParagraph.Text);
                    tableLine.Append("| ");
                }
            }
            result.Add(tableLine.ToString());
        }
    }
    return result;
}
© www.soinside.com 2019 - 2024. All rights reserved.