如果使用的XSSFWorkbook创建的xls,打开的时候会有这样的提示:
这样 XSSFWorkbook 和HSSFWorkbook的区别。
-
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
-
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
-
HWPF - 提供读写Microsoft Word DOC97格式档案的功能。
-
XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。
-
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
-
HDGF - 提供读Microsoft Visio格式档案的功能。
-
HPBF - 提供读Microsoft Publisher格式档案的功能。
-
HSMF - 提供读Microsoft Outlook格式档案的功能。
-
使用POI创建一个新的xlsx,提示创建成功,但是打开xlsx文件的时候,会报错打不开
代码如下:
1 package com.it.poiTest; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.apache.poi.ss.usermodel.Sheet; 8 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 9 10 public class CreateWorkBook { 11 public static void main(String[] args) { 12 //可以表示xls和xlsx格式文件的类 13 XSSFWorkbook workbook = new XSSFWorkbook(); 14 try { 15 FileOutputStream out = new FileOutputStream("createWorkBook.xlsx"); 16 workbook.write(out); 17 out.close(); 18 System.out.println("createWorkBook success"); 19 } catch (FileNotFoundException e) { 20 e.printStackTrace(); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 } 24 25 26 } 27 }
报错是因为,微软offine自己创建一个新的xlsx的时候,会默认的创建三个新的sheet,工作簿.而我们使用程序创建的xlsx默认不会,因此需要我们自己新建的时候,也创建一个sheet,这样就不会错了。
代码改良如下:
1 package com.it.poiTest; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.apache.poi.ss.usermodel.Sheet; 8 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 9 10 public class CreateWorkBook { 11 public static void main(String[] args) { 12 //可以表示xls和xlsx格式文件的类 13 XSSFWorkbook workbook = new XSSFWorkbook(); 14 try { 15 //新创建的xls需要新创建新的工作簿,offine默认创建的时候会默认生成三个sheet 16 Sheet sheet = workbook.createSheet("first sheet"); 17 FileOutputStream out = new FileOutputStream("createWorkBook.xlsx"); 18 workbook.write(out); 19 out.close(); 20 System.out.println("createWorkBook success"); 21 } catch (FileNotFoundException e) { 22 e.printStackTrace(); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 27 28 } 29 }