<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                AutoPOI (Excel和 Word簡易工具類) =========================== AutoPOI 功能如同名字auto,追求的就是自動化,讓一個沒接觸過poi的人員,可以傻瓜式半智能化的快速實現Excel導入導出、Word模板導出、可以僅僅5行代碼就可以完成Excel的導入導出。 詳細文檔見:[http://doc.autopoi.jeecg.com](http://doc.autopoi.jeecg.com) --------------------------- AutoPOI的主要特點 -------------------------- 1.設計精巧,使用簡單 2.接口豐富,擴展簡單 3.默認值多,write less do more 4.AbstractView 支持,web導出可以簡單明了 --------------------------- AutoPOI的幾個入口工具類 --------------------------- 1.ExcelExportUtil Excel導出(普通導出,模板導出) 2.ExcelImportUtil Excel導入 3.WordExportUtil Word導出(只支持docx ,doc版本poi存在圖片的bug,暫不支持) --------------------------- 關于Excel導出XLS和XLSX區別 --------------------------- 1.導出時間XLS比XLSX快2-3倍 2.導出大小XLS是XLSX的2-3倍或者更多 3.導出需要綜合網速和本地速度做考慮^~^ --------------------------- 幾個工程的說明 --------------------------- 1.autopoi-parent 父包--作用大家都懂得 2.autopoi 導入導出的工具包,可以完成Excel導出,導入,Word的導出,Excel的導出功能 3.autopoi-web 耦合了spring-mvc 基于AbstractView,極大的簡化spring-mvc下的導出功能 4.sax 導入使用xercesImpl這個包(這個包可能造成奇怪的問題哈),word導出使用poi-scratchpad,都作為可選包了 -------------------------- maven -------------------------- ```xml <dependency> <groupId>org.jeecgframework</groupId> <artifactId>autopoi-web</artifactId> <version>1.3.6</version> </dependency> ``` -------------------------- AutoPoi 模板 表達式支持 -------------------------- - 空格分割 - 三目運算 {{test ? obj:obj2}} - n: 表示 這個cell是數值類型 {{n:}} - le: 代表長度{{le:()}} 在if/else 運用{{le:() > 8 ? obj1 : obj2}} - fd: 格式化時間 {{fd:(obj;yyyy-MM-dd)}} - fn: 格式化數字 {{fn:(obj;###.00)}} - fe: 遍歷數據,創建row - !fe: 遍歷數據不創建row - $fe: 下移插入,把當前行,下面的行全部下移.size()行,然后插入 - !if: 刪除當前列 {{!if:(test)}} - 單引號表示常量值 '' 比如'1' 那么輸出的就是 1 --------------------------- AutoPoi導出實例 --------------------------- 1.注解,導入導出都是基于注解的,實體上做上注解,標示導出對象,同時可以做一些操作 ```Java @ExcelTarget("courseEntity") public class CourseEntity implements java.io.Serializable { /** 主鍵 */ private String id; /** 課程名稱 */ @Excel(name = "課程名稱", orderNum = "1", needMerge = true) private String name; /** 老師主鍵 */ @ExcelEntity(id = "yuwen") @ExcelVerify() private TeacherEntity teacher; /** 老師主鍵 */ @ExcelEntity(id = "shuxue") private TeacherEntity shuxueteacher; @ExcelCollection(name = "選課學生", orderNum = "4") private List<StudentEntity> students; ``` 2.基礎導出 傳入導出參數,導出對象,以及對象列表即可完成導出 ```Java HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( "2412312", "測試", "測試"), CourseEntity.class, list); ``` ```Java HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( "2412312", "測試", "測試"), CourseEntity.class, list,exportFields); ``` 3.基礎導出,帶有索引 在到處參數設置一個值,就可以在導出列增加索引 ```Java ExportParams params = new ExportParams("2412312", "測試", "測試"); params.setAddIndex(true); HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params, TeacherEntity.class, telist); ``` 4.導出Map 創建類似注解的集合,即可完成Map的導出,略有麻煩 ```Java List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>(); entity.add(new ExcelExportEntity("姓名", "name")); entity.add(new ExcelExportEntity("性別", "sex")); List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> map; for (int i = 0; i < 10; i++) { map = new HashMap<String, String>(); map.put("name", "1" + i); map.put("sex", "2" + i); list.add(map); } HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( "測試", "測試"), entity, list); ``` 5.模板導出 根據模板配置,完成對應導出 ```Java TemplateExportParams params = new TemplateExportParams(); params.setHeadingRows(2); params.setHeadingStartRow(2); Map<String,Object> map = new HashMap<String, Object>(); map.put("year", "2013"); map.put("sunCourses", list.size()); Map<String,Object> obj = new HashMap<String, Object>(); map.put("obj", obj); obj.put("name", list.size()); params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls"); Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list, map); ``` 6.導入 設置導入參數,傳入文件或者流,即可獲得相應的list ```Java ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(2); //params.setSheetNum(9); params.setNeedSave(true); long start = new Date().getTime(); List<CourseEntity> list = ExcelImportUtil.importExcel(new File( "d:/tt.xls"), CourseEntity.class, params); ``` 7.SpringMvc的無縫融合 簡單幾句話,Excel導出搞定 ```Java @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List<JeecgDemo> pageList = jeecgDemoService.list(); //導出文件名稱 mv.addObject(NormalExcelConstants.FILE_NAME,"導出Excel文件名字"); //注解對象Class mv.addObject(NormalExcelConstants.CLASS,JeecgDemo.class); //自定義導出字段 mv.addObject(NormalExcelConstants.EXPORT_FIELDS,"name,keyWord,punchTime"); //自定義表格參數 mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("自定義導出Excel模板內容標題", "自定義Sheet名字")); //導出數據列表 mv.addObject(NormalExcelConstants.DATA_LIST,pageList); return mv; } ``` | 自定義視圖 | 用途 | 描述 | | ------ | ------ | ------ | | JeecgEntityExcelView | 實體對象導出視圖 | 例如:List < JeecgDemo> list | | JeecgMapExcelView | Map對象導出視圖 | List<Map<String, String>> list | | JeecgTemplateExcelView | Excel模板導出視圖 | - | | JeecgTemplateWordView | Word模板導出視圖 | - | 8.Excel導入校驗,過濾不符合規則的數據,追加錯誤信息到Excel,提供常用的校驗規則,已經通用的校驗接口 ```Java /** * Email校驗 */ @Excel(name = "Email", width = 25) @ExcelVerify(isEmail = true, notNull = true) private String email; /** * 手機號校驗 */ @Excel(name = "Mobile", width = 20) @ExcelVerify(isMobile = true, notNull = true) private String mobile; ExcelImportResult<ExcelVerifyEntity> result = ExcelImportUtil.importExcelVerify(new File( "d:/tt.xls"), ExcelVerifyEntity.class, params); for (int i = 0; i < result.getList().size(); i++) { System.out.println(ReflectionToStringBuilder.toString(result.getList().get(i))); } ``` 9.導入Map 設置導入參數,傳入文件或者流,即可獲得相應的list,自定義Key,需要實現IExcelDataHandler接口 ```Java ImportParams params = new ImportParams(); List<Map<String,Object>> list = ExcelImportUtil.importExcel(new File( "d:/tt.xls"), Map.class, params); ``` 10.字典用法 在實體屬性注解excel中添加dicCode="",此處dicCode即為jeecg系統中數據字典的Code ```Java @Excel(name="性別",width=15,dicCode="sex") private java.lang.String sex; ``` 11.字典表用法 此處dictTable為數據庫表名,dicCode為關聯字段名,dicText為excel中顯示的內容對應的字段 ```Java @Excel(name="部門",dictTable="t_s_depart",dicCode="id",dicText="departname") private java.lang.String depart; ``` 12.Replace用法 若數據庫中存儲的是0/1 ,則導出/導入的excel單元格中顯示的是女/男 ```Java @Excel(name="測試替換",width=15,replace={"男_1","女_0"}) private java.lang.String fdReplace; ``` 13.高級字段轉換用法 - exportConvert:在導出的時候需要替換值則配置該值為true,同時增加一個方法,方法名為原get方法名前加convert。 - importConvert:在導入的時候需要替換值則配置該值為true,同時增加一個方法,方法名為原set方法名前加convert。 ```Java @Excel(name="測試轉換",width=15,exportConvert=true,importConvert=true) private java.lang.String fdConvert; /** * 轉換值示例: 在該字段值的后面加上元 * @return */ public String convertgetFdConvert(){ return this.fdConvert+"元"; } /** * 轉換值示例: 替換掉excel單元格中的"元" * @return */ public void convertsetFdConvert(String fdConvert){ this.fdConvert = fdConvert.replace("元",""); } ``` --------------------------- Excel 注解說明 --------------------------- @Excel | 屬性 | 類型 | 默認值 | 功能 | |----------------|----------|------------------|------------------------------------------------------------------------| | name | String | null | 列名,支持name_id | | needMerge | boolean | fasle | 是否需要縱向合并單元格(用于含有list中,單個的單元格,合并list創建的多個row) | | orderNum | String | "0" | 列的排序,支持name_id | | replace | String[] | {} | 值得替換 導出是{a_id,b_id} 導入反過來 | | savePath | String | "upload" | 導入文件保存路徑,如果是圖片可以填寫,默認是upload/className/ IconEntity這個類對應的就是upload/Icon/ | | type | int | 1 | 導出類型 1 是文本 2 是圖片,3 是函數,10 是數字 默認是文本 | | width | double | 10 | 列寬 | | height | double | 10 | 列高,后期打算統一使用@ExcelTarget的height,這個會被廢棄,注意 | | isStatistics | boolean | fasle | 自動統計數據,在追加一行統計,把所有數據都和輸出 這個處理會吞沒異常,請注意這一點 | | ~~isHyperlink~~| ~~boolean~~ | ~~FALSE~~| ~~超鏈接,如果是需要實現接口返回對象~~ | | isImportField | boolean | TRUE | (作廢參數)校驗字段,看看這個字段是不是導入的Excel中有,如果沒有說明是錯誤的Excel,讀取失敗,支持name_id | | exportFormat | String | "" | 導出的時間格式,以這個是否為空來判斷是否需要格式化日期 | | importFormat | String | "" | 導入的時間格式,以這個是否為空來判斷是否需要格式化日期 | | format | String | "" | 時間格式,相當于同時設置了exportFormat 和 importFormat | | databaseFormat | String | "yyyyMMddHHmmss" | 導出時間設置,如果字段是Date類型則不需要設置 數據庫如果是string 類型,這個需要設置這個數據庫格式,用以轉換時間格式輸出 | | numFormat | String | "" | 數字格式化,參數是Pattern,使用的對象是DecimalFormat ,請在數值類型的字段上使用 [用法參考 ]([https://www.jianshu.com/p/b3699d73142e](https://www.jianshu.com/p/b3699d73142e)) | | imageType | int | 1 | 導出類型 1 從file讀取 2 是從數據庫中讀取 默認是文件 同樣導入也是一樣的 | | suffix | String | "" | 文字后綴,如% 90 變成90% | | isWrap | boolean | TRUE | 是否換行 即支持\n | | mergeRely | int[] | {} | 合并單元格依賴關系,比如第二列合并是基于第一列 則{0}就可以了 | | mergeVertical | boolean | fasle | 縱向合并內容相同的單元格 | | fixedIndex | int | -1 | 對應excel的列,忽略名字 | | isColumnHidden | boolean | FALSE | 導出隱藏列 | @ExcelCollection | 屬性 | 類型 | 默認值 | 功能 | |----------|----------|-----------------|------------------| | id | String | null | 定義ID | | name | String | null | 定義集合列名,支持nanm_id | | orderNum | int | 0 | 排序,支持name_id | | type | Class<?> | ArrayList.class | 導入時創建對象使用 | 單表導出實體注解源碼 ```Java public class SysUser implements Serializable { /**id*/ private String id; /**登錄賬號 */ @Excel(name = "登錄賬號", width = 15) private String username; /**真實姓名*/ @Excel(name = "真實姓名", width = 15) private String realname; /**頭像*/ @Excel(name = "頭像", width = 15) private String avatar; /**生日*/ @Excel(name = "生日", width = 15, format = "yyyy-MM-dd") private Date birthday; /**性別(1:男 2:女)*/ @Excel(name = "性別", width = 15,dicCode="sex") private Integer sex; /**電子郵件*/ @Excel(name = "電子郵件", width = 15) private String email; /**電話*/ @Excel(name = "電話", width = 15) private String phone; /**狀態(1:正常 2:凍結 )*/ @Excel(name = "狀態", width = 15,replace={"正常_1","凍結_0"}) private Integer status; ``` 一對多導出實體注解源碼 ```Java @Data public class JeecgOrderMainPage { /**主鍵*/ private java.lang.String id; /**訂單號*/ @Excel(name="訂單號",width=15) private java.lang.String orderCode; /**訂單類型*/ private java.lang.String ctype; /**訂單日期*/ @Excel(name="訂單日期",width=15,format = "yyyy-MM-dd") private java.util.Date orderDate; /**訂單金額*/ @Excel(name="訂單金額",width=15) private java.lang.Double orderMoney; /**訂單備注*/ private java.lang.String content; /**創建人*/ private java.lang.String createBy; /**創建時間*/ private java.util.Date createTime; /**修改人*/ private java.lang.String updateBy; /**修改時間*/ private java.util.Date updateTime; @ExcelCollection(name="客戶") private List<JeecgOrderCustomer> jeecgOrderCustomerList; @ExcelCollection(name="機票") private List<JeecgOrderTicket> jeecgOrderTicketList; } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看