如何使用Java + Struts2在浏览器中打开Excel工作表?

我试图在浏览器中打开xls表单,而不是在MS Excel中。 我试过用Desktop.getDesktop().browse(fileName.toURI()); 但不工作。 这是执行方法的完整代码:

 public String execute() throws Exception { String rutaArchivo = System.getProperty("catalina.base")+"/ejemploExcelJava.xls"; File archivoXLS = new File(rutaArchivo); if(archivoXLS.exists()) { archivoXLS.delete(); } archivoXLS.createNewFile(); Workbook libro = new HSSFWorkbook(); FileOutputStream archivo = new FileOutputStream(archivoXLS); Sheet hoja = libro.createSheet("Mi hoja de trabajo 1"); Date fechaActual = new Date(); for (int f = 0; f < 10; f++) { Row fila = hoja.createRow(f); for (int c = 0; c < 5; c++) { Cell celda = fila.createCell(c); if (f == 0) { celda.setCellValue("Encabezado #" + c); } else { celda.setCellValue(fechaActual.getHours() + ":" + fechaActual.getMinutes()); } } } libro.write(archivo); archivo.close(); Desktop.getDesktop().browse(archivoXLS.toURI()); } 

无论如何,这项工作从Microsoft Office Excel应用程序打开excel,但只能通过从Netbeans运行项目。 如果我尝试从没有Netbeans的Tomcat中打开它,它不起作用。

  1. 您可以输出stream结果的任何二进制结果 ;
  2. 要输出一个Excel文件(通过读取现有文件并创build一个新文件),您需要根据您要输出的Excel文件的types(通常是XLS或XLSX)设置正确的内容types , 如本文所述回答 。
  3. 您可以指示用户代理程序需要在浏览器内部打开文件(而不是通过桌面应用程序请求下载/打开 ),方法是将默认内容处置attachment更改为inline ;
  4. 内联打开一个未知的二进制文件取决于客户端:如果你stream出一个JPEG,浏览器将很容易地打开; 如果stream出PDF(或Excel文档,Word文档等),浏览器将search适当的插件(例如Adobe Acrobat),如果找不到,将尝试使用桌面应用程序打开它(例如Adobe Reader)。 这就是为什么在Internet Explorer中打开一个Excel(它具有插件内置function),而在Firefox中打开它却不行。