在Swift中下载和处理.xls(Excel)文件

时间:2015-01-13 19:03:43

标签: ios excel swift

我想构建一个可以下载Excel文件并在表格中显示内容的Iphone应用程序。

我想我设法下载了该文件,但我得到的数据如下:

<d0cf11e0 a1b11ae1 00000000 00000000 00000000 00000000 3e000300 feff0900 06000000 00000000 00000000 01000000 45000000 00000000 00100000 feffffff 00000000 feffffff 00000000 44000000 ffffffff ffffffff ffffffff ffffffff ........ >    

这是下载代码:

let url = NSURL(string: "https://s3-eu-west-1.amazonaws.com/schooly/handasaim/news/f_1312015203355628490.xls")

    let urlRequest = NSURLRequest(URL: url!)

    NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue(), completionHandler: {
        response, data, error in

        if error != nil {
            println("There was an error")

        } else {
            println(data)
        } 
    })    

如果下载代码正确,我如何解码数据并访问它?

如果错误,下载Excel文件和访问数据的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

我建议您使用Alamofire下载文件,这是第三方库,如AFNetworking。然后,您可以将下载的文件保留为默认DocumentDirectory

在这里,您可以获得框架Alamofire并将其与项目一起设置。

下载功能就是这样,

let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)

Alamofire.download(.GET, "https://s3-eu-west-1.amazonaws.com/schooly/handasaim/news/f_1312015203355628490.xls", destination)

然后你得到了困难的部分。尝试这些。但是在Objective-C

DRCollectionViewTableLayout

答案 1 :(得分:0)

我也没有回答您的问题,但如果您只是在excel文件中使用纯文本,请考虑将文本保存为纯文本CSV(逗号分隔)或制表符分隔文本文件。纯文本很容易在iOS中解析,因为没有用于编码/解码excel文件的SDK,我知道你可能不想继续沿着你所处的路径前进。 Excel是一种专有格式。 下载纯文本后,您将在返回字符上拆分,然后在选项卡(或逗号)上拆分以获取mxn文本数组。例如,类似于: 让allRows = text.split {$ 0 ==&#34; \ n&#34;} for allRows中的行 {   allColumns = row.split {$ 0 ==&#34; \ t&#34;} //如果您的文本文件是制表符分隔的   // ..为你的列做这个行... } 我还没有测试过这段代码,但希望你能得到这个想法

答案 2 :(得分:0)

下载文件后,您可以使用CoreXLSX 库对其进行解析。该库可以与CocoaPodsSwift Package Manager集成。之后,您可以像这样使用它:

import CoreXLSX

guard let file = XLSXFile(filepath: "./file.xlsx") else {
  fatalError("XLSX file corrupted or does not exist")
}

for path in try file.parseWorksheetPaths() {
  let ws = try file.parseWorksheet(at: path)
  for row in ws.sheetData.rows {
    for c in row.cells {
      print(c)
    }
  }
}

这将打印给定Excel文件中的每个单元格,但是如果需要,您还可以按其引用过滤单元格和列。