代码之家  ›  专栏  ›  技术社区  ›  user6421669

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

  •  2
  • user6421669  · 技术社区  · 8 年前

    我的临时存储中有一个.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 回复  |  直到 8 年前
        1
  •  5
  •   clyrinkpress    7 年前

    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")
        }
    
        2
  •  3
  •   rmaddy    8 年前

    最初的问题是如何从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内容。然后你需要解开它。然后,您需要浏览所有文件并找到所需的文本。这远远不是微不足道的,也远远超出了单个堆栈溢出帖子的范围。