Java的Apache POI打开文件?

我有一个Java程序,编辑一个现有的Excel文件,并将其保存为一个新的文件。 不过,我也希望程序在结束后自动打开新创build的文件。 是否有一个Apache的poi命令,让我这样做?

因为你没有提供代码,我使用ViralPatel教程的例子

让我们先创buildExcel文件

HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sample sheet"); Map<String, Object[]> data = new HashMap<String, Object[]>(); data.put("1", new Object[] { "Emp No.", "Name", "Salary" }); data.put("2", new Object[] { 1d, "John", 1500000d }); data.put("3", new Object[] { 2d, "Sam", 800000d }); data.put("4", new Object[] { 3d, "Dean", 700000d }); Set<String> keyset = data.keySet(); int rownum = 0; for (String key : keyset) { Row row = sheet.createRow(rownum++); Object[] objArr = data.get(key); int cellnum = 0; for (Object obj : objArr) { Cell cell = row.createCell(cellnum++); if (obj instanceof Date) cell.setCellValue((Date) obj); else if (obj instanceof Boolean) cell.setCellValue((Boolean) obj); else if (obj instanceof String) cell.setCellValue((String) obj); else if (obj instanceof Double) cell.setCellValue((Double) obj); } } try { FileOutputStream out = new FileOutputStream(new File("D:\\new.xls")); workbook.write(out); out.close(); System.out.println("Excel written successfully.."); /** Opening Excel File From Java **/ try { Desktop.getDesktop().open(new File("D:\\new.xls")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 

产量

在这里输入图像说明

解决scheme:在创build具有正确位置的Excel后,将此代码与Try / Catch Block放在一起,它将自动打开

Desktop.getDesktop()。open(new File(“D:\ new.xls”));

否则你也可以调用它

尝试使用Desktop.open()而不是Desktop.edit():

 Desktop dt = Desktop.getDesktop(); dt.open(new File("D:\\new.xls")); 

如果Desktop.open()不可用,则可以使用Windows文件关联:

  Process p = Runtime.getRuntime() .exec("rundll32 url.dll,FileProtocolHandler " + "D:\\new.xls"); 

看看如何与桌面类和桌面JavaDoc 集成

我不知道POI是否提供这样的方法。 但是,您可以使用简单的使用命令提示符的java方法执行此操作,并使用start命令打开所需的文件。

 public static void openExcelFile(){ try{ Runtime.getRuntime().exec("cmd /c start "+FilePath); }catch(IOException e){ e.printStackTrace(); } } 

注: start后的空间是强制性的。 不要忘记它