在實際的工作中,有時會遇到獲取數據后需要存入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了。