如何使用 objective-c 在 UIWebView IOS 中打开 file.xlsx
how to open file.xlsx in UIWebView IOS using objective-c
我的 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];
.xlsx
无法使用 UIWebView
打开文件。虽然您可以使用 UIWebView
加载 .xls
文件。
这是您可以使用 UIWebView
加载的文件列表
https://developer.apple.com/library/content/qa/qa1630/_index.html
如果要使用 .xlsx file
,则必须使用包含 QLPreviewController
的 QuickLook FrameWork
。你的代码应该是这样的 -
- (void) initQlController{
QLPreviewController *prev = [[QLPreviewController alloc]init];
prev.delegate = self;
prev.dataSource = self;
[self presentModalViewController:prev animated:YES];
[prev.navigationItem setRightBarButtonItem:nil]; }
然后您必须使用数据源方法来实现相同的目的:-
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
使用 QLPreviewController 在您的应用程序中显示 xlsx 文档。在下面找到教程的链接。
https://developer.apple.com/documentation/quicklook/qlpreviewcontroller
http://iosdevelopertips.com/data-file-management/preview-documents-with-qlpreviewcontroller.html
https://www.appcoda.com/quick-look-framework/
.XLSX 文件类型基于 openXML,这是个好消息!这意味着它很容易阅读,我们只需要让 webview 知道我们的文件的类型,或者更确切地说是 mimeTYPE loading/displaying。根据微软的说法,用于 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];
我的 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];
.xlsx
无法使用 UIWebView
打开文件。虽然您可以使用 UIWebView
加载 .xls
文件。
这是您可以使用 UIWebView
https://developer.apple.com/library/content/qa/qa1630/_index.html
如果要使用 .xlsx file
,则必须使用包含 QLPreviewController
的 QuickLook FrameWork
。你的代码应该是这样的 -
- (void) initQlController{
QLPreviewController *prev = [[QLPreviewController alloc]init];
prev.delegate = self;
prev.dataSource = self;
[self presentModalViewController:prev animated:YES];
[prev.navigationItem setRightBarButtonItem:nil]; }
然后您必须使用数据源方法来实现相同的目的:-
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
使用 QLPreviewController 在您的应用程序中显示 xlsx 文档。在下面找到教程的链接。
https://developer.apple.com/documentation/quicklook/qlpreviewcontroller http://iosdevelopertips.com/data-file-management/preview-documents-with-qlpreviewcontroller.html https://www.appcoda.com/quick-look-framework/
.XLSX 文件类型基于 openXML,这是个好消息!这意味着它很容易阅读,我们只需要让 webview 知道我们的文件的类型,或者更确切地说是 mimeTYPE loading/displaying。根据微软的说法,用于 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];