在我的应用程序中,我有一些数据,我想在Excel表格中显示。
前几天我已经设法构建了.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,this one from google和polaris office一样。
使用此代码,我调用intent,要求用户选择其中一个应用程序并打开文件:
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也是如此。
Polaris不显示错误,但显示空文件。
答案 0 :(得分:3)
您的文件位于getFilesDir()
。这是internal storage的一部分,第三方应用无法访问您的部分内部存储空间。
由于您已经设置了FileProvider
,因此请使用FileProvider
Uri
,并使用Intent.FLAG_GRANT_READ_URI_PERMISSION
为其他应用提供临时读取权限。