Android无法打开.xls文件

在我的应用程序,我有一些数据,我想显示在Excel工作表。

几天前我已经设法build立文件.xls。

我也可以通过电子邮件发送这个代码:

FileOutputStream fos = null; try { file = new File(getContext().getFilesDir(), (main.getNomeAzienda() + "" + getDate(System.currentTimeMillis(), "dd-MM-yyyy_HH-mm")) + ".xls"); fos = new FileOutputStream(file); workbook.write(fos); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL, new String[]{FirebaseAuth.getInstance().getCurrentUser().getEmail()}); i.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(getActivity(), "com.example.authority.fileprovider", file)); i.putExtra(Intent.EXTRA_SUBJECT, "Raccolto globale aSista"); i.putExtra(Intent.EXTRA_TEXT, "In allegato il File Excel con i dati filtrati."); try { startActivity(Intent.createChooser(i, "Seleziona il Client di posta che vuoi utilizzare...")); } catch (android.content.ActivityNotFoundException ex) { Snackbar.make(main.getFab(), "Non ci sono client di posta disponibili installati sul dispositivo.", Snackbar.LENGTH_SHORT).show(); } } Snackbar.make(main.getFab(), "Foglio Excel generato.", Snackbar.LENGTH_SHORT).show(); 

对不起,如果代码的一些部分是意大利语。

无论如何,现在我想直接在手机上显示excel文件。

我下载了一些应该能够显示.xls文件的应用程序。 像Excel一样, 这个来自google和polaris办公室 。

有了这个代码,我打电话的目的是要求用户select其中一个应用程序并打开文件:

  Uri path = Uri.fromFile(finalFile); Intent excelIntent = new Intent(Intent.ACTION_VIEW); excelIntent.setDataAndType(path , "application/vnd.ms-excel"); excelIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); try { startActivity(excelIntent); } catch (ActivityNotFoundException e) { Snackbar.make(main.getFab(),"Impossibile aprire il file su questo dispositivo",Snackbar.LENGTH_LONG).show(); } 

我遇到了一些与文件名相关的问题,不应该包含一些特殊字符。 然后,我终于能够开始打开文件,但现在我有一个问题。

Excel告诉我“无法打开文件,发生错误”。

Google文档也一样。

北极星不显示错误,但显示一个空文件。

你的文件在getFilesDir() 。 这是内部存储的一部分,第三方应用程序无法访问您的部分内部存储。

由于您已经设置了FileProvider ,因此请使用FileProvider Uri ,然后使用Intent.FLAG_GRANT_READ_URI_PERMISSION为其他应用程序提供临时读取权限。