如何使用objective-c在UIWebView IOS中打开file.xlsx

kum*_*mar 7 objective-c uiwebview ios

我的IOS应用程序文档文件夹中有file.xlsx.我想在UIWebview中显示这个excel文件.但我得到低于错误,

Error Domain=WebKitErrorDomain Code=102 "Frame load interrupted" 
Run Code Online (Sandbox Code Playgroud)

但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];
Run Code Online (Sandbox Code Playgroud)
-(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;

}
Run Code Online (Sandbox Code Playgroud)

需要帮助在我的IOS应用程序中使用UIWebView显示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];
Run Code Online (Sandbox Code Playgroud)

Chr*_*s J 2

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

应用程序/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 *)#>]
Run Code Online (Sandbox Code Playgroud)

我的工作代码示例:

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];
Run Code Online (Sandbox Code Playgroud)

原始文件和 webview 渲染文件的并排比较