Как прочитать файл .docx, используя F # - PullRequest
1 голос
/ 31 декабря 2011

Как я могу прочитать файл .docx, используя F #.Если я использую

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

Он возвращает мне какой-то мусор с звуковыми сигналами.

Ответы [ 4 ]

3 голосов
/ 01 января 2012

Вот фрагмент кода F #, который может дать вам толчок к началу. Он успешно извлекает все текстовое содержимое файла .docx, созданного Word2010, в виде строки объединенных строк:

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")

Чтобы заставить его работать, не забудьте упомянуть WindowsBase.dll в своем проекте VS.

1 голос
/ 31 декабря 2011

Попробуйте использовать OpenXML SDK от Microsoft.

Также на связанной странице находится инструмент Microsoft, который можно использовать для декомпиляции файлов Office 2007.Декомпилированный код может быть довольно длинным даже для простых документов, хотя имейте это в виду.Существует большая кривая обучения, связанная с OpenXML SDK.Я нахожу это довольно сложным в использовании.

1 голос
/ 31 декабря 2011

System.IO.File.ReadAllText имеет тип string -> string.

Поскольку файл .docx является двоичным файлом, вероятно, что некоторые символы в строках имеют символ колокольчика.Вместо ReadAllText посмотрите Word автоматизация , Packaging или OpenXML API

1 голос
/ 31 декабря 2011

.docx файлов следуют Open Packaging Convention спецификациям.На самом низком уровне это файлы .ZIP.Чтобы прочитать это программно, см. Пример здесь:

Новый стандарт для упаковки ваших данных

Упаковка и детали

ИспользованиеF #, это та же история, вам придется использовать классы в System.IO.Packaging Namespace .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...