如何使用F#读取.docx文件

时间:2011-12-31 07:11:09

标签: f#

如何使用F#读取.docx文件。如果我使用

System.IO.File.ReadAllText("D:/test.docx")

它会给我一些垃圾输出并发出哔哔声。

4 个答案:

答案 0 :(得分:3)

这是一个可以为您提供快速启动的F#代码段。它成功地将Word2010创建的.docx文件的所有文本内容提取为一串连接的行:

open System
open System.IO
open System.IO.Packaging
open System.Xml

let getDocxContent (path: string) =
    use package = Package.Open(path, FileMode.Open)
    let stream = package.GetPart(new Uri("/word/document.xml", UriKind.Relative)).GetStream()
    stream.Seek(0L, SeekOrigin.Begin) |> ignore
    let xmlDoc = new XmlDocument()
    xmlDoc.Load(stream)
    xmlDoc.DocumentElement.InnerText

printfn "%s" (getDocxContent @"..\..\test.docx")

为了使其正常工作,请不要忘记在VS项目中引用WindowsBase.dll

答案 1 :(得分:1)

.docx文件遵循Open Packaging Convention规范。在最低级别,它们是.ZIP文件。要以编程方式阅读,请参阅此处的示例:

A New Standard For Packaging Your Data

Packages and Parts

使用F#,它是相同的故事,您必须使用System.IO.Packaging Namespace中的类。

答案 2 :(得分:1)

尝试使用Microsoft的OpenXML SDK

链接页面上还有可用于反编译Office 2007文件的Microsoft工具。即使对于简单的文档,反编译的代码也可能非常冗长,但请注意。与OpenXML SDK相关的学习曲线很大。我发现它很难使用。

答案 3 :(得分:1)

System.IO.File.ReadAllText的类型为string -> string

因为.docx文件是二进制文件,所以字符串中的某些字符可能具有贝尔字符。而不是ReadAllText,请查看Word automationPackagingOpenXML API