iOS-打开本地或下载的Excel文件

刚迭代个项目小功能,打开本地或下载excel文件。打开本地的比较简单,这里只说下载文件并且打开。

主要步骤:
1.判断沙盒里面是否已经存在了文件,没有就下载,有就打开。
2.下载文件,下载完成后打开。

下载文件比较简单,封装一个下载的方法:

+ (void)downloadExcelFileWithUrlString:(NSString *)urlString filePath:(NSString *)filePath netProgress:(netProgress)netProgress success:(netSuccess)success{
    AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];    
    // 下载地址 
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];  
    //开始请求下载 
    NSURLSessionDownloadTask * downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        //NSLog(@"下载进度:%f",downloadProgress.fractionCompleted);
        netProgress(downloadProgress);
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        /* 设定下载到的位置 */
        return [NSURL fileURLWithPath:filePath];
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        //NSLog(@"下载完成");
        success(response);
    }];
    [downloadTask resume];
}

下载完成后,怎么打开文件呢?有三个方法:

1.用webView打开

- (UIWebView *)webView{
    if (!_webView) {
        _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
        _webView.backgroundColor = LightGRAY;
        _webView.scalesPageToFit = YES;
        NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL fileURLWithPath:self.filePath]];
        [_webView loadRequest:request];
    }
    return _webView;
}

2.用系统提供的QLPreveiewController打开:

从iOS4.0后,苹果推出新的文件预览控件:QLPreveiewController,支持pdf等格式文件的在线阅读功能。首先需要导入系统库文件:#import <QuickLook/QuickLook.h>,然后实现 QLPreviewControllerDataSource代理方法。

QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.view.frame = self.view.bounds;
previewController.dataSource = self;
[self addChildViewController:previewController];
[self.view addSubview:previewController.view];
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller{
      return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{
       //需要在线预览的文件的路径
       return [NSURL fileURLWithPath:self.filePath];
}

3.第三方打开:
UIDocumentInteractionController是从iOS 3.2的SDK开始支持的,他是直接继承自NSObject。

    UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:self.filePath]];
    documentController.delegate = self;
    [documentController presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
    self.documentController = documentController;

效果如下:
iOS-打开本地或下载的Excel文件
注意:这里documentController的要是用强引用,ARC环境下,避免documentController实例使用完后被释放,类似于用GCD创建定时器。