一、官網傳送門:http://easypoi.mydoc.io/
二、引入依賴
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>3.2.0</version> </dependency>
三、常用注解,方法見官方文檔 或下載https://files-cdn.cnblogs.com/files/blogs/694443/EasyPoi%E6%95%99%E7%A8%8B_1.0.zip
@ExcelTarget
@Excel
@Excel(name="Last Name", orderNum = "0") @JSONField(name = "First Name",ordinal = 0) private String firstName; @Excel(name="First Name", orderNum = "1") @JSONField(name = "Last Name", ordinal = 1) private String lastName; @Excel(name="Email Address", orderNum = "2") @JSONField(name="Email Address", ordinal = 2) private String emailAddress;
四、要快速的導入導出,還需要用到Easy poi中的兩個工具類
ExcelImportUtil和ExcelExportUtil
import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.afterturn.easypoi.excel.imports.ExcelImportServer; import cn.afterturn.easypoi.excel.imports.sax.SaxReadExcel; import cn.afterturn.easypoi.excel.imports.sax.parse.ISaxRowRead; import cn.afterturn.easypoi.exception.excel.ExcelImportException; import cn.afterturn.easypoi.handler.inter.IExcelReadRowHanlder; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.List; import org.apache.poi.util.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExcelImportUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ExcelImportUtil.class); private ExcelImportUtil() { } public static <T> List<T> importExcel(File file, Class<?> pojoClass, ImportParams params) { FileInputStream in = null; List var4; try { in = new FileInputStream(file); var4 = (new ExcelImportServer()).importExcelByIs(in, pojoClass, params).getList(); } catch (ExcelImportException var9) { throw new ExcelImportException(var9.getType(), var9); } catch (Exception var10) { LOGGER.error(var10.getMessage(), var10); throw new ExcelImportException(var10.getMessage(), var10); } finally { IOUtils.closeQuietly(in); } return var4; } public static <T> List<T> importExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception { return (new ExcelImportServer()).importExcelByIs(inputstream, pojoClass, params).getList(); } public static <T> ExcelImportResult<T> importExcelMore(InputStream inputstream, Class<?> pojoClass, ImportParams params) throws Exception { return (new ExcelImportServer()).importExcelByIs(inputstream, pojoClass, params); } public static <T> ExcelImportResult<T> importExcelMore(File file, Class<?> pojoClass, ImportParams params) { FileInputStream in = null; ExcelImportResult var4; try { in = new FileInputStream(file); var4 = (new ExcelImportServer()).importExcelByIs(in, pojoClass, params); } catch (ExcelImportException var9) { throw new ExcelImportException(var9.getType(), var9); } catch (Exception var10) { LOGGER.error(var10.getMessage(), var10); throw new ExcelImportException(var10.getMessage(), var10); } finally { IOUtils.closeQuietly(in); } return var4; } public static <T> List<T> importExcelBySax(InputStream inputstream, Class<?> pojoClass, ImportParams params) { return (new SaxReadExcel()).readExcel(inputstream, pojoClass, params, (ISaxRowRead)null, (IExcelReadRowHanlder)null); } public static void importExcelBySax(InputStream inputstream, Class<?> pojoClass, ImportParams params, IExcelReadRowHanlder hanlder) { (new SaxReadExcel()).readExcel(inputstream, pojoClass, params, (ISaxRowRead)null, hanlder); } public static <T> List<T> importExcelBySax(InputStream inputstream, ISaxRowRead rowRead) { return (new SaxReadExcel()).readExcel(inputstream, (Class)null, (ImportParams)null, rowRead, (IExcelReadRowHanlder)null); } } ExcelImportUtil
import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.export.ExcelBatchExportServer; import cn.afterturn.easypoi.excel.export.ExcelExportServer; import cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelExportUtil { private ExcelExportUtil() { } public static Workbook exportBigExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) { ExcelBatchExportServer batachServer = ExcelBatchExportServer.getExcelBatchExportServer(entity, pojoClass); return batachServer.appendData(dataSet); } public static void closeExportBigExcel() { ExcelBatchExportServer batachServer = ExcelBatchExportServer.getExcelBatchExportServer((ExportParams)null, (Class)null); batachServer.closeExportBigExcel(); } public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) { Workbook workbook = getWorkbook(entity.getType(), dataSet.size()); (new ExcelExportServer()).createSheet(workbook, entity, pojoClass, dataSet); return workbook; } private static Workbook getWorkbook(ExcelType type, int size) { if (ExcelType.HSSF.equals(type)) { return new HSSFWorkbook(); } else { return (Workbook)(size < 100000 ? new XSSFWorkbook() : new SXSSFWorkbook()); } } public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, Collection<? extends Map<?, ?>> dataSet) { Workbook workbook = getWorkbook(entity.getType(), dataSet.size()); (new ExcelExportServer()).createSheetForMap(workbook, entity, entityList, dataSet); return workbook; } public static Workbook exportExcel(List<Map<String, Object>> list, ExcelType type) { Workbook workbook = getWorkbook(type, 0); Iterator var3 = list.iterator(); while(var3.hasNext()) { Map<String, Object> map = (Map)var3.next(); ExcelExportServer server = new ExcelExportServer(); server.createSheet(workbook, (ExportParams)map.get("title"), (Class)map.get("entity"), (Collection)map.get("data")); } return workbook; } /** @deprecated */ @Deprecated public static Workbook exportExcel(TemplateExportParams params, Class<?> pojoClass, Collection<?> dataSet, Map<String, Object> map) { return (new ExcelExportOfTemplateUtil()).createExcleByTemplate(params, pojoClass, dataSet, map); } public static Workbook exportExcel(TemplateExportParams params, Map<String, Object> map) { return (new ExcelExportOfTemplateUtil()).createExcleByTemplate(params, (Class)null, (Collection)null, map); } public static Workbook exportExcel(Map<Integer, Map<String, Object>> map, TemplateExportParams params) { return (new ExcelExportOfTemplateUtil()).createExcleByTemplate(params, map); } } ExcelExportUtil
這個兩個工具類提供了ImportExcel 和ExportExcel方法.我們導入導出excel主要就是通過這兩個方法完成功能
五、import (導入)
public void importUsers(String userFilePath) { try { ImportParams params = new ImportParams(); //調用導入方法,並且制定按照use對象格式導入 List<User> users = ExcelImportUtil.importExcel(new File(userFilePath), User.class, params); File file = new File(userFilePath.replace(".xls", ".json")); if(!file.exists()){ file.createNewFile(); } //這里是把Json字符串按照格式輸出到文件夾里。如果只需要從excel中獲取對象,那么下面都不需要看了。 String jsonString = JsonFormatTool.formatJson(JSON.toJSONString(users)); Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); write.write(jsonString); write.flush(); write.close(); } catch (Exception e) { e.printStackTrace(); } }
六、導出
public void exportUsers() throws Exception{ List<User> users = new ArrayList<User>(); users.add(new User("amber", "lei", "amberlei@123.com")); users.add(new User("amber", "lei", "amberlei@123.com")); users.add(new User("amber", "lei", "amberlei@123.com")); //調用exportExcel獲得Workbook,然后輸出到指定文件 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("user information","users"),User.class, users); workbook.write(new FileOutputStream("C:\\Users\\amber.lei\\Documents\\Learning\\ParseExcel\\src\\main\\resources\\export_user.xls")); }
七、工具類,把Json字符串按照格式輸出到文件
public class JsonFormatTool { /** * 單位縮進字符串。 */ private static String SPACE = " "; /** * 返回格式化JSON字符串。 * * @param json 未格式化的JSON字符串。 * @return 格式化的JSON字符串。 */ public static String formatJson(String json) { StringBuffer result = new StringBuffer(); int length = json.length(); int number = 0; char key = 0; // 遍歷輸入字符串。 for (int i = 0; i < length; i++) { // 1、獲取當前字符。 key = json.charAt(i); // 2、如果當前字符是前方括號、前花括號做如下處理: if ((key == '[') || (key == '{')) { // (1)如果前面還有字符,並且字符為“:”,打印:換行和縮進字符字符串。 if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) { result.append('\n'); result.append(indent(number)); } // (2)打印:當前字符。 result.append(key); // (3)前方括號、前花括號,的后面必須換行。打印:換行。 result.append('\n'); // (4)每出現一次前方括號、前花括號;縮進次數增加一次。打印:新行縮進。 number++; result.append(indent(number)); // (5)進行下一次循環。 continue; } // 3、如果當前字符是后方括號、后花括號做如下處理: if ((key == ']') || (key == '}')) { // (1)后方括號、后花括號,的前面必須換行。打印:換行。 result.append('\n'); // (2)每出現一次后方括號、后花括號;縮進次數減少一次。打印:縮進。 number--; result.append(indent(number)); // (3)打印:當前字符。 result.append(key); // (4)如果當前字符后面還有字符,並且字符不為“,”,打印:換行。 if (((i + 1) < length) && (json.charAt(i + 1) != ',')) { result.append('\n'); } // (5)繼續下一次循環。 continue; } // 4、如果當前字符是逗號。逗號后面換行,並縮進,不改變縮進次數。 if ((key == ',')) { result.append(key); result.append('\n'); result.append(indent(number)); continue; } // 5、打印:當前字符。 result.append(key); } return result.toString(); } /** * 返回指定次數的縮進字符串。每一次縮進三個空格,即SPACE。 * * @param number 縮進次數。 * @return 指定縮進次數的字符串。 */ private static String indent(int number) { StringBuffer result = new StringBuffer(); for (int i = 0; i < number; i++) { result.append(SPACE); } return result.toString(); } }