在Swift中将Docx文件转换为文本

时间:2016-11-05 21:54:53

标签: swift ms-word local-storage docx

我的临时存储空间中有.docx文件:

    let location: NSURL = NSURL.fileURLWithPath(NSTemporaryDirectory())
    let file_Name = location.URLByAppendingPathComponent("5 November 2016.docx")

我现在想要做的是提取本文档中的文本。但我似乎无法找到任何转换器或方法。

我试过这个:

    let file_Content = try? NSString(contentsOfFile: String(file_Name), encoding: NSUTF8StringEncoding)
    print(file_Content)

然而它打印为零。

那么如何阅读docx文件中的文本?

2 个答案:

答案 0 :(得分:3)

您最初的问题是如何从URL获取字符串。 String(File_Name)不是将文件URL转换为文件路径的正确方法。正确的方法是使用path函数。

let location = NSURL.fileURLWithPath(NSTemporaryDirectory())
let fileURL = location.URLByAppendingPathComponent("My File.docx")
let fileContent = try? NSString(contentsOfFile: fileURL.path, encoding: NSUTF8StringEncoding)

请注意许多变化。使用适当的命名约定。更清楚地命名变量。

现在就是这样。这仍然不起作用,因为docx文件是XML和其他文件的压缩集合。您无法将docx文件加载到NSString。您需要使用NSData来加载zip内容。然后你需要解压缩它。然后,您需要浏览所有文件并找到所需的文本。它远非微不足道,它远远超出了单个堆栈溢出的范围。

答案 1 :(得分:3)

Swift 4,Xcode 9.1,OSX目标从10.10到10.13

我发现以下代码可以从Word .doc文件中轻松地提取文本,然后可以轻松地将其转换为字符串。 (属性字符串包含可能被解析为良好效果的格式信息。)我想传达的主要信息是关于使用.docFormat指定文档类型的一点。

    let openPanel   = NSOpenPanel()
    var fileString  = String("")
    var fileData    = NSData()
    let fileURL     = openPanel.url

    do {
        fileData =  try NSData(contentsOf: fileURL!)
        if let tryForString = try? NSAttributedString(data: fileData as Data, options: [
            .documentType: NSAttributedString.DocumentType.docFormat,
            .characterEncoding: String.Encoding.utf8.rawValue
            ], documentAttributes: nil) {
            fileString = tryForString.string
        } else {
            fileString = "Data conversion error."
        }
        fileString = fileString.trimmingCharacters(in: .whitespacesAndNewlines)
    } catch {
        print("Word Document File Not Found")
    }