項目地址:https://gitee.com/sanri/sanri-excel-poi
優勢:簡單的配置便可實現導出精美的 Excel 表格,能夠不用配置來導入一列數據,導入 map 數據,簡單配置能夠導入實體數據。
解決了一些常見問題,好比java
發現BUG能夠提Issue,能夠給我發郵件,能夠加我QQ,能夠進9420技術羣討論.git
做者QQ: 2441719087redis
做者郵箱: ningxiangsanri@163.com數據庫
9420 技術交流羣: 645576465apache
做者微信:sanri1993-
微信
之後會上傳中央倉庫,引用 maven 地址爲maven
<dependency> <groupId>com.sanri.excel</groupId> <artifactId>sanri-excel-poi</artifactId> <version>1.0-RELEASE</version> </dependency>
目前須要本身下載代碼來構建,或下載已經構建好的 release 包 :工具
https://gitee.com/sanri/sanri-excel-poi/repository/archive/v1.0-RELEASE?format=zip大數據
<!-- Excel poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10-FINAL</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </dependency> <!--apache commons --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.2</version> </dependency> <!-- slf4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency>
@ExcelExport @ExcelImport(startRow = 1) @Data public class Simple { @ExcelColumn(value = "年齡",order = 2) private int age; @ExcelColumn(value = "級別",order = 1) private Integer level; @ExcelColumn(value = "姓名",order = 0,chineseWidth = true) private String name; @ExcelColumn(value = "生日",order = 3) private Date birthday; @ExcelColumn(value = "序號",order = 4,hidden = true) private long id; @ExcelColumn(value = "是否成功",order = 5) private boolean success; @ExcelColumn(value = "薪水",order = 6,precision = 2) private double money; @ExcelColumn(value = "獎金",order = 7,precision = 2) private float comm; }
實測在 i5 3 代 cpu ,8 G 內存,導出 10 萬數據,用時 5 秒spa
// 從數據庫,redis,消息中間件...... 獲取的數據 List<Simple> simpleList= simpleBeanDatas(10); // 建立導出類 ExcelExportWriter excelExportWriter = new ExcelExportWriter(Simple.class); // 開始導出 excelExportWriter.export(simpleList); // 寫到輸出流 excelExportWriter.writeTo(new FileOutputStream("d:/test/"+System.currentTimeMillis()+".xlsx"));
FileInputStream fileInputStream = FileUtils.openInputStream(new File("D:\\test/1567833685699.xlsx")); // 0 表明導入第 0 列數據,1 表示從第 1 行開始 List<String> strings = ExcelImportUtil.importListData(fileInputStream, String.class, 0, 1);
FileInputStream fileInputStream = FileUtils.openInputStream(new File("D:\\test/1567833685699.xlsx")); // 0 表示 key 的列爲第 0 列;8 表示第 8 列爲值列; 1 表示從第 1 行開始 Map<String, String> stringStringMap = ExcelImportUtil.importMapData(fileInputStream, String.class, 0, 8, 1);
FileInputStream fileInputStream = FileUtils.openInputStream(new File("D:\\test/1567833427823.xlsx")); List<Simple> simples = ExcelImportUtil.importData(fileInputStream, Simple.class);
// Excel 導出版本,可選值 ExcelVersion.EXCEL2007,ExcelVersion.EXCEL2003 ExcelVersion version() default ExcelVersion.EXCEL2007; // 當導出有設置標題時,設置標題行的高度 short titleRowHeight() default 40; // 頭部行的高度,即列說明行的高度 short headRowHeight() default 30; // 每一行數據的高度 short bodyRowHeight() default 25; // 是否自動寬度,Excel 的自動寬度對中文支持很差,我這裏對中文寬度作了適應 boolean autoWidth() default true; // 一個 sheet 頁的最大數據量,設置 -1 表示不限制,2003 版本最大 60000 行;超過的行數會另起 sheet 頁 int sheetMaxRow() default -1; // 快速導出模式,使用 new SXSSFWorkbook(rowAccessWindowSize) workbook 對象 boolean fastModel() default true; // 快速導出模式的一個設置,通常默認就行 int rowAccessWindowSize() default 1000;
// 數據起始行,通常設置 1 就行,從 0 開始 int startRow(); // 支持導入的版本,默認都支持 ExcelVersion[] support() default {ExcelVersion.EXCEL2003,ExcelVersion.EXCEL2007};
// 導出的中文頭部列的值,導入不用管 String value(); // 導入的順序,默認從 0 開始,導出不用管 int order() default -1; // 寬度,Excel 寬度單元 int width() default -1; // 使用字符數來定義寬度,一箇中文算一個字符 int charWidth() default -1; // 使用像素值來定義寬度 int pxWidth() default -1; // 在使用自動寬度的時候,標記當前列是中文列 boolean chineseWidth() default false; // 導出是否隱藏當前列 boolean hidden() default false; // 導入的時候對當前列作字符串先後空格過濾 boolean trim() default true; // 導出的時候的單元格類型,可選值有CELL_TYPE_NUMERIC,CELL_TYPE_STRING,CELL_TYPE_BLANK,CELL_TYPE_BOOLEAN CellType cellType() default CellType.CELL_TYPE_STRING; // 導入、導出日期格式 String pattern() default "yyyy-MM-dd"; // 導入、導出的數字精度設置,會對浮點型作處理 int precision() default -1;