如何使用F#读取.docx文件。如果我使用
System.IO.File.ReadAllText("D:/test.docx")
它会给我一些垃圾输出并发出哔哔声。
答案 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
使用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 automation,Packaging或OpenXML API