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

时间:2014-05-28 11:25:46

标签: java excel netbeans struts2

我试图在浏览器中打开xls表,而不是在MS Excel中打开。我曾尝试Desktop.getDesktop().browse(fileName.toURI());,但无法正常工作。这是execute方法的完整代码:

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 个答案:

答案 0 :(得分:0)

  1. 您可以使用Stream Result;
  2. 输出任何二进制结果
  3. 要输出Excel文件(通过读取现有文件并创建新文件),您需要根据要流出的Excel文件类型设置正确的内容类型(通常是XLS或XLSX),like described in this answer
  4. 您可以通过更改默认内容处置来指示用户代理需要在浏览器中打开文件(而不是要求使用桌面应用程序下载/打开) strong>从attachmentinline;
  5. 内联打开未知二进制文件取决于客户端:如果您流出JPEG,浏览器将轻松打开它;如果您流出PDF(或Excel文档,Word文档等),浏览器将搜索适当的插件(例如Adobe Acrobat),如果没有找到,将尝试使用桌面应用程序打开它(例如Adobe Reader)无论如何。这就是为什么在Internet Explorer中打开Excel(内置插件)的工作原理,而在Firefox中打开它则不行。