在实际的工作中,有时会遇到获取数据后需要存入Excel文件的情况。但是,在生成Excel文件后,发现无法正常打开该文件。
例如:以当前的时间点为文件名,新生成一个Excel文件。先来看看下面一段代码。
public classcreateExcel {public static void main(String[] args) throwsIOException {
Date now=newDate();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMddHHmmss");
String localname=dateFormat.format(now);
String xlsxPath= "F:\\0507\\"+ localname + ".xlsx";
Workbook workBook= newXSSFWorkbook();
OutputStream fos= null;try{
fos= newFileOutputStream(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) throwsIOException {
Date now=newDate();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMddHHmmss");
String localname=dateFormat.format(now);
String xlsxPath= "F:\\0507\\"+ localname + ".xlsx";
Workbook workBook= newXSSFWorkbook();
OutputStream fos= null;try{
//增加一个Sheet的对象
Sheet sheet= workBook.createSheet("sheet1");
fos= newFileOutputStream(xlsxPath);
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
workBook.write(fos);
fos.close();
}
}
这样,即可正常打开Excel了。