在实际的工作中,有时会遇到获取数据后需要存入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了。