【问题标题】:how to open file.xlsx in UIWebView IOS using objective-c如何使用objective-c在UIWebView IOS中打开file.xlsx
【发布时间】:2017-09-10 15:00:57
【问题描述】:

我的 IOS 应用程序文档文件夹中有 file.xlsx。我想在 UIWebview 中显示打开这个 excel 文件。但我遇到了错误,

Error Domain=WebKitErrorDomain Code=102 "Frame load interrupted" 

但 pdf 和 CSV 文件正在打开, 我是 IOS 的新手,我想从过去 2 天开始,我尝试了所有可能的方法让它工作。什么都没解决..请帮帮我

更新:即使我将其重命名为 file.xls,它也不会打开 下面是我的代码,

    NSURL* nsUrl = [NSURL URLWithString:url];
        _urlReq = [NSURL URLWithString:url];
        [self performSelector:@selector(urlRequestForFile) withObject:nil afterDelay:0];
        _webView.delegate = self;
        NSURLRequest* request = [NSURLRequest requestWithURL: nsUrl];
        [_webView loadRequest: request];

-(void)urlRequestForFile{
    self.connection = nil;
    NSURLRequest *requestForFile = [NSURLRequest requestWithURL:_urlReq cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:300];
    _connection = [[NSURLConnection alloc]initWithRequest:requestForFile delegate:self startImmediately:YES];
    _ongingServiceFlag = YES;

}

在使用 UIWebView 在我的 IOS 应用程序中显示 xlsx 文件时需要帮助,或者是否有任何其他方法可以在不使用第三方应用程序的情况下在应用程序中显示 xlsx 文件?

更新(解决方案):
我很惊讶地看到即使在苹果网站中提到的 UIWebView 也没有对 XLSX 的支持,但实际上 UIWebView 完全支持 XLSX 格式。您需要确保的一件事是指定正确的“textEncodingName”值。如果您的文件以 base64 二进制编码存储,则必须将其提及为 textEncodingName:@"base64" 否则您必须将其提及为“utf-8”

下面一行对我有用:

[webView loadData:urlData MIMEType:@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" textEncodingName:@"base64" baseURL:nil];

【问题讨论】:

  • 您可能更喜欢使用QLPreviewController
  • 并使用相关代码更新您的问题,以便人们可以帮助您解决问题。
  • 仅供参考 - xls 和 xlsx 是两种完全不同的文件格式。只需将一个重命名为另一个不会更改文件的格式。
  • @rmaddy.. 我不知道 QLPreviewController。你有任何参考链接,他们展示了如何使用它来实现吗?
  • 您能找到适合您的答案吗?

标签: ios objective-c uiwebview


【解决方案1】:

【讨论】:

  • 嗨,Ganesh。非常感谢重播.. 我想知道除了 QLPreviewController 用于在 IOS 应用程序中显示 xlsx 文件之外还有其他方法吗?
【解决方案2】:

.XLSX 文件类型基于 openXML,这是个好消息!这意味着它很容易阅读,我们只需要让 webview 知道我们正在加载/显示的文件的类型,或者更确切地说是 mimeTYPE。根据微软的说法,用于 XLSX (OpenXML) 文件的 mimetype 是:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

来源:https://blogs.msdn.microsoft.com/dmahugh/2006/08/08/content-types-for-open-xml-documents/

为此,我们通过调用 webView 方法加载数据(dataWithContentsOfFile:dataWithContentsOfURL: 或您喜欢的方法):

[_webView loadData:<#(nonnull NSData *)#> MIMEType:<#(nonnull NSString *)#> textEncodingName:<#(nonnull NSString *)#> baseURL:<#(nonnull NSURL *)#>]

我的工作代码示例:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://mycoolserver.com/file.xlsx"]];
[_webView loadData:data MIMEType:@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" textEncodingName:@"utf-8" baseURL:nil];

【讨论】:

    【解决方案3】:

    .xlsx 无法使用UIWebView 打开文件。虽然您可以使用UIWebView 加载.xls 文件。 这是您可以使用 UIWebView 加载的文件列表

    https://developer.apple.com/library/content/qa/qa1630/_index.html

    如果你想使用.xlsx file,你必须使用包含QLPreviewControllerQuickLook FrameWork。你的代码应该是这样的 -

      - (void) initQlController{
      QLPreviewController *prev = [[QLPreviewController alloc]init];
      prev.delegate = self;
      prev.dataSource = self;
      [self presentModalViewController:prev animated:YES];
      [prev.navigationItem setRightBarButtonItem:nil]; }
    

    那么你必须使用相同的 dataSource 方法:-

    - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
    
    - (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多