尝试使用OpenXML从Microsoft Word文档获取单词的错误值?

时间:2016-06-06 13:28:47

标签: c# c#-4.0 openxml

有一个word文档,我希望使用OpenXML sdk以编程方式获取字数,  我设法得到字数但openXML返回错误的值。 请注意,测试文档是混合语言(阿拉伯语,英语)阿拉伯语是RTL语言。

如果您在UI中使用Microsoft Word打开word文档,它会为您提供正确的单词数

但是如果你去获取存储在同一文档的app.xml文件中的值,你将得到不同的值。

我尝试了此链接中的代码

https://msdn.microsoft.com/en-us/library/office/bb521237(v=office.14).aspx

// To retrieve the properties of a document part.
public static void GetPropertyFromDocument(string document)
{
    XmlDocument xmlProperties = new XmlDocument();

    using (WordprocessingDocument wordDoc = 
        WordprocessingDocument.Open(document, false))
    {
        ExtendedFilePropertiesPart appPart = wordDoc.ExtendedFilePropertiesPart;

        xmlProperties.Load(appPart.GetStream());
    }
    XmlNodeList chars = xmlProperties.GetElementsByTagName("Characters");

    MessageBox.Show("Number of characters in the file = " +
        chars.Item(0).InnerText, "Character Count"); 
}

我测试的文件包含

字数是13,但使用上面的代码,它给了我11! enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

DocIO是一个.NET库,可以读取,写入和呈现Word 2003/2007/2010/2013/2016文件。使用Syncfusion的DocIO库,您可以获得正确的字数。如果您符合条件,则可以通过community license program免费获得整套控件(商业应用程序)。社区许可是完整的产品,没有任何限制或水印。

步骤1:创建控制台应用程序
第2步:添加对Syncfusion.DocIO.Base,Syncfusion.Compression.Base和Syncfusion.OfficeChart.Base的引用;您也可以使用NuGet将这些引用添加到您的项目中 第3步:复制&粘贴以下代码段。

此代码段将根据您的要求在Word文档中生成单词count。

using Syncfusion.DocIO.DLS;
using Syncfusion.DocIO;
using System.IO;

namespace DocIO_MergeDocument
{
class Program
{
    static void Main(string[] args)
    {
       //Creates a new Word document
        WordDocument document = new WordDocument(@"InputDocument.docx");
        //Update the words count in the document.
        document.UpdateWordCount(false);
        //Get the updated words count
        int wordCount = document.BuiltinDocumentProperties.WordCount;
        //Releases the resources occupied by WordDocument instance
        document.Dispose();
    }
}    
}

有关DocIO的更多信息,请参阅我们的help documentation

注意:我为Syncfusion工作