自定義實現Poi工具類
阿新 • • 發佈:2020-10-27
新增依賴
<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)); }