1. 程式人生 > 實用技巧 >自定義實現Poi工具類

自定義實現Poi工具類

新增依賴

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

瞭解API

HSSF:Excel97-2003版本,副檔名為.xls。一個sheet最大行數65536,最大列數256。
XSSF:Excel2007版本開始,副檔名為.xlsx。一個sheet最大行數1048576,最大列數16384。
SXSSF:是在XSSF基礎上,POI3.8版本開始提供的支援低記憶體佔用的操作方式,副檔名為.xlsx。

HSSF:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell   [Excel97-2003版本]
XSSF:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell   [Excel2007版本開始]
SXSSF:SXSSFWorkbook、Sheet、Row、Cell             [記憶體優化]

以XSSF為例:
XSSFWorkbook 代表一個excel文件物件
XSSFSheet    代表一個excel中的工作表
XSSFRow      代表一個工作表中的一行
XSSFCell     代表一行中的一個單元格

自定義匯出工具類

建立註解類

@Target(ElementType.FIELD)   //ElementType.FIELD 當前註解可以新增到類中的屬性上
@Retention(RetentionPolicy.RUNTIME)
public @interface MyExcel {

    String value();

}

實體類

public class User {

    @MyExcel(value = "使用者編號")
    private int id;

    @MyExcel(value = "姓名")
    private String name;

    @MyExcel(value 
= "成績") private double score;

工具類

 public static void export2(Class clazz,List list,String sheetName,String path) throws Exception {
        XSSFWorkbook workbook = new XSSFWorkbook();

        XSSFSheet sheet = workbook.createSheet(sheetName);

        XSSFRow row = sheet.createRow(0);

        Field[] fields 
= clazz.getDeclaredFields(); int x = 0; for (Field field:fields){ //拿到屬性上的註解 MyExcel annotation = field.getAnnotation(MyExcel.class); //判斷是否有註解 if(annotation!=null){ //有註解則建立表格並填充內容 row.createCell(x).setCellValue(annotation.value()); x++; } } for (int i = 0; i < list.size(); i++) { XSSFRow row1 = sheet.createRow(i + 1); Object o = list.get(i); //獲取類物件 int y = 0; for (Field field:fields) { //判斷屬性上是否有註解 MyExcel annotation = field.getAnnotation(MyExcel.class); if(annotation!=null){ //獲取屬性名 String name = field.getName(); //通過屬性名拿到get方法 String methodName ="get"+ name.substring(0, 1).toUpperCase() + name.substring(1); Method method = clazz.getMethod(methodName); //通過方法獲取屬性 Object invoke = method.invoke(o); row1.createCell(y).setCellValue(invoke.toString()); y++; } } } //輸出到指定路徑 workbook.write(new FileOutputStream(path)); }