【问题标题】:How to save Excel xlsx after iOS drag and dropiOS拖放后如何保存Excel xlsx
【发布时间】:2017-12-14 16:53:42
【问题描述】:

我正在尝试使用拖放功能在我的 iOS 应用程序中读取 xlsx 电子表格,感谢一些帮助,我已经到了可以获取数据的阶段并编写了这个 NSItemProviderReading 类来访问它:

class ExcelDocument:NSObject, NSItemProviderReading {
let data:Data?

required init(excelData:Data, typeIdentifier:String) {
    data = excelData
}

static var readableTypeIdentifiersForItemProvider: [String] {
    return ["org.openxmlformats.spreadsheetml.sheet"]
}

static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self {
    return self.init(excelData: data, typeIdentifier: typeIdentifier)
}

func write(toFile: String) -> URL?{
    let fileManager = FileManager.default
    do {
        let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
        let fileURL = documentDirectory.appendingPathComponent(toFile)
            try self.data?.write(to: fileURL)
            return fileURL
    } catch {
        print(error)
    }
    return nil
}
}

这一切运行良好,我可以打开并读取self.data?.write 行写入的文件,但是xlsx 文件的结构似乎丢失了——没有[Content_Types].xml 或.rels,所以尝试读取文件的实用程序(我使用的是XlsxReaderWriter)会引发错误。

鉴于 Office Open XML 是压缩的 XML,我原以为字节流会起作用,解压缩会重新创建结构,但似乎不是......

有什么想法吗?

【问题讨论】:

    标签: ios swift excel drag-and-drop openxml


    【解决方案1】:

    我已经解决了……

    问题是我正在使用上面创建的 NSItemProvider 检索放置项..

    func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
        session.loadObjects(ofClass: ExcelDocument.self) { excelItems in
            if let workbooks = excelItems as? [ExcelDocument], let book = workbooks.first, let excelData = book.data {
    

    我应该做的(以及有效的)是:

    func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
        session.items[0].itemProvider.loadFileRepresentation(forTypeIdentifier: "org.openxmlformats.spreadsheetml.sheet") { url, error in
            if url != nil {
                (read the excel data from the URL)
            }
        }
    

    我在 Apple 文档中偶然发现 session.loadFileRepresentation 作为 iOS 11 中的一个新功能 - 我在 iOS 11 中的任何拖放示例中都没有看到它。无论如何,现在一切正常

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 2016-07-22
      • 2023-04-11
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      相关资源
      最近更新 更多