1. 程式人生 > >iOS-開啟本地或下載的Excel檔案

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;

效果如下:
在這裡插入圖片描述
注意:這裡documentController的要是用強引用,ARC環境下,避免documentController例項使用完後被釋放,類似於用GCD建立定時器。