Java使用POI生成Excel文件后打不开的问题

    在实际的工作中,有时会遇到获取数据后需要存入Excel文件的情况。但是,在生成Excel文件后,发现无法正常打开该文件。

    例如:以当前的时间点为文件名,新生成一个Excel文件。先来看看下面一段代码。

public class createExcel {public static void main(String[] args) throws IOException {
        Date now=new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String localname=dateFormat.format(now);
        String xlsxPath = "F:\20190507\"+ localname + ".xlsx";
        Workbook workBook = new XSSFWorkbook();
        OutputStream fos = null;
        try {
            fos = new FileOutputStream(xlsxPath);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        workBook.write(fos);
        fos.close();
    }
}

     有经验的同学看出什么问题来了吗?

  这里在相应的路径下会生成Excel文件。但是,双击打开的时候,会出现下面的情形。

 

     导致这个问题的原因是什么呢?

     我们回过头来再看看之前的代码。好像是少了点什么吧。

     我们实际在电脑中点击右键新生成一个Excel文件的时候,这个Excel文件会默认生成3个Sheet。而上面我们使用Java代码来生成Excel的时候,没有新建立Sheet的对象。这样,这个Excel文件中就是没有Sheet的。双击打开的时候就会报这个错误。

      实际上,我们只要在上面的代码中,增加一个Sheet的对象,就可以正常打开Excel了。

public static void main(String[] args) throws IOException {
       Date now=new Date();
       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
       String localname=dateFormat.format(now);
       String xlsxPath = "F:\20190507\"+ localname + ".xlsx";
       Workbook workBook = new XSSFWorkbook();
       OutputStream fos = null;
       try {
     //增加一个Sheet的对象 Sheet sheet
= workBook.createSheet("sheet1"); fos = new FileOutputStream(xlsxPath); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } workBook.write(fos); fos.close(); } }

    这样,即可正常打开Excel了。

原文地址:https://www.cnblogs.com/generalli2019/p/12100776.html