EXCEL导入导出使用的框架
生活随笔
收集整理的這篇文章主要介紹了
EXCEL导入导出使用的框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前excel使用的都是poi但是在使用過程中比較麻煩,上次做一個項目,發現一個很好用的工具們今天分享給大家。
1、使用Easypoi,免費開源是國內開發的,中文文檔看起來比較方便,這個我就不評論了,大家上官網看看。
官網地址:http://easypoi.mydoc.io/#text_173307
2、這個是重點,也是我們項目中使用到的。這個Excle導出工具不知是哪位大神寫的,我只是分享。
引入pom:
復制一下代碼到項目:
新建你要導出的實體類:
新建注解:
/*** Copyright © 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.*/ package com.newtouch.common.utils.excel.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** Excel注解定義* @author ThinkGem* @version 2013-03-10*/ @Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface ExcelField {/*** 導出字段名(默認調用當前字段的“get”方法,如指定導出字段為對象,請填寫“對象名.對象屬性”,例:“area.name”、“office.name”)*/String value() default "";/*** 導出字段標題(需要添加批注請用“**”分隔,標題**批注,僅對導出模板有效)*/String title();/*** 字段類型(0:導出導入;1:僅導出;2:僅導入)*/int type() default 0;/*** 導出字段對齊方式(0:自動;1:靠左;2:居中;3:靠右)*/int align() default 0;/*** 導出字段字段排序(升序)*/int sort() default 0;/*** 如果是字典類型,請設置字典的type值*/String dictType() default "";/*** 反射類型*/Class<?> fieldType() default Class.class;/*** 字段歸屬組(根據分組導出導入)*/int[] groups() default {}; }導出excle的文件工具類
/*** Copyright © 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.*/ package com.newtouch.common.utils.excel;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Comment; import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.google.common.collect.Lists; import com.newtouch.common.utils.Encodes; import com.newtouch.common.utils.Reflections; import com.newtouch.common.utils.excel.annotation.ExcelField; import com.newtouch.modules.sys.utils.DictUtils;/*** 導出Excel文件(導出“XLSX”格式,支持大數據量導出 @see org.apache.poi.ss.SpreadsheetVersion)* @author ThinkGem* @version 2013-04-21*/ public class ExportExcel {public static int index = 1;private static Logger log = LoggerFactory.getLogger(ExportExcel.class);/*** 工作薄對象*/private SXSSFWorkbook wb;/*** 工作表對象*/private Sheet sheet;/*** 樣式列表*/private Map<String, CellStyle> styles;/*** 當前行號*/private int rownum;/*** 注解列表(Object[]{ ExcelField, Field/Method })*/List<Object[]> annotationList = Lists.newArrayList();/*** 構造函數* @param title 表格標題,傳“空值”,表示無標題* @param cls 實體對象,通過annotation.ExportField獲取標題*/public ExportExcel(String title, Class<?> cls){this(title, cls, 1);index = 1;}/*** 構造函數* @param title 表格標題,傳“空值”,表示無標題* @param cls 實體對象,通過annotation.ExportField獲取標題* @param type 導出類型(1:導出數據;2:導出模板)* @param groups 導入分組*/public ExportExcel(String title, Class<?> cls, int type, int... groups){// Get annotation field Field[] fs = cls.getDeclaredFields();for (Field f : fs){ExcelField ef = f.getAnnotation(ExcelField.class);if (ef != null && (ef.type()==0 || ef.type()==type)){if (groups!=null && groups.length>0){boolean inGroup = false;for (int g : groups){if (inGroup){break;}for (int efg : ef.groups()){if (g == efg){inGroup = true;annotationList.add(new Object[]{ef, f});break;}}}}else{annotationList.add(new Object[]{ef, f});}}}// Get annotation methodMethod[] ms = cls.getDeclaredMethods();for (Method m : ms){ExcelField ef = m.getAnnotation(ExcelField.class);if (ef != null && (ef.type()==0 || ef.type()==type)){if (groups!=null && groups.length>0){boolean inGroup = false;for (int g : groups){if (inGroup){break;}for (int efg : ef.groups()){if (g == efg){inGroup = true;annotationList.add(new Object[]{ef, m});break;}}}}else{annotationList.add(new Object[]{ef, m});}}}// Field sortingCollections.sort(annotationList, new Comparator<Object[]>() {public int compare(Object[] o1, Object[] o2) {return new Integer(((ExcelField)o1[0]).sort()).compareTo(new Integer(((ExcelField)o2[0]).sort()));};});// InitializeList<String> headerList = Lists.newArrayList();for (Object[] os : annotationList){String t = ((ExcelField)os[0]).title();// 如果是導出,則去掉注釋if (type==1){String[] ss = StringUtils.split(t, "**", 2);if (ss.length==2){t = ss[0];}}headerList.add(t);}initialize(title, headerList);}/*** 構造函數* @param title 表格標題,傳“空值”,表示無標題* @param headers 表頭數組*/public ExportExcel(String title, String[] headers) {initialize(title, Lists.newArrayList(headers));}/*** 構造函數* @param title 表格標題,傳“空值”,表示無標題* @param headerList 表頭列表*/public ExportExcel(String title, List<String> headerList) {initialize(title, headerList);}/*** 初始化函數* @param title 表格標題,傳“空值”,表示無標題* @param headerList 表頭列表*/private void initialize(String title, List<String> headerList) {this.wb = new SXSSFWorkbook(500);this.sheet = wb.createSheet("Export");this.styles = createStyles(wb);// Create titleif (StringUtils.isNotBlank(title)){Row titleRow = sheet.createRow(rownum++);titleRow.setHeightInPoints(30);Cell titleCell = titleRow.createCell(0);titleCell.setCellStyle(styles.get("title"));titleCell.setCellValue(title);sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(),titleRow.getRowNum(), titleRow.getRowNum(), headerList.size()-1));}// Create headerif (headerList == null){throw new RuntimeException("headerList not null!");}Row headerRow = sheet.createRow(rownum++);headerRow.setHeightInPoints(16);for (int i = 0; i < headerList.size(); i++) {Cell cell = headerRow.createCell(i);cell.setCellStyle(styles.get("header"));String[] ss = StringUtils.split(headerList.get(i), "**", 2);if (ss.length==2){cell.setCellValue(ss[0]);Comment comment = this.sheet.createDrawingPatriarch().createCellComment(new XSSFClientAnchor(0, 0, 0, 0, (short) 3, 3, (short) 5, 6));comment.setString(new XSSFRichTextString(ss[1]));cell.setCellComment(comment);}else{cell.setCellValue(headerList.get(i));}sheet.autoSizeColumn(i);}for (int i = 0; i < headerList.size(); i++) { int colWidth = sheet.getColumnWidth(i)*2;sheet.setColumnWidth(i, colWidth < 3000 ? 3000 : colWidth); }log.debug("Initialize success.");}/*** 創建表格樣式* @param wb 工作薄對象* @return 樣式列表*/private Map<String, CellStyle> createStyles(Workbook wb) {Map<String, CellStyle> styles = new HashMap<String, CellStyle>();CellStyle style = wb.createCellStyle();style.setAlignment(CellStyle.ALIGN_CENTER);style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);Font titleFont = wb.createFont();titleFont.setFontName("Arial");titleFont.setFontHeightInPoints((short) 16);titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);style.setFont(titleFont);styles.put("title", style);style = wb.createCellStyle();style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);style.setBorderRight(CellStyle.BORDER_THIN);style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());style.setBorderLeft(CellStyle.BORDER_THIN);style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());style.setBorderTop(CellStyle.BORDER_THIN);style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());style.setBorderBottom(CellStyle.BORDER_THIN);style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());Font dataFont = wb.createFont();dataFont.setFontName("Arial");dataFont.setFontHeightInPoints((short) 10);style.setFont(dataFont);styles.put("data", style);style = wb.createCellStyle();style.cloneStyleFrom(styles.get("data"));style.setAlignment(CellStyle.ALIGN_LEFT);styles.put("data1", style);style = wb.createCellStyle();style.cloneStyleFrom(styles.get("data"));style.setAlignment(CellStyle.ALIGN_CENTER);styles.put("data2", style);style = wb.createCellStyle();style.cloneStyleFrom(styles.get("data"));style.setAlignment(CellStyle.ALIGN_RIGHT);styles.put("data3", style);style = wb.createCellStyle();style.cloneStyleFrom(styles.get("data")); // style.setWrapText(true);style.setAlignment(CellStyle.ALIGN_CENTER);style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());style.setFillPattern(CellStyle.SOLID_FOREGROUND);Font headerFont = wb.createFont();headerFont.setFontName("Arial");headerFont.setFontHeightInPoints((short) 10);headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);headerFont.setColor(IndexedColors.WHITE.getIndex());style.setFont(headerFont);styles.put("header", style);return styles;}/*** 添加一行* @return 行對象*/public Row addRow(){return sheet.createRow(rownum++);}/*** 添加一個單元格* @param row 添加的行* @param column 添加列號* @param val 添加值* @return 單元格對象*/public Cell addCell(Row row, int column, Object val){return this.addCell(row, column, val, 0, Class.class);}/*** 添加一個單元格* @param row 添加的行* @param column 添加列號* @param val 添加值* @param align 對齊方式(1:靠左;2:居中;3:靠右)* @return 單元格對象*/public Cell addCell(Row row, int column, Object val, int align, Class<?> fieldType){Cell cell = row.createCell(column);CellStyle style = styles.get("data"+(align>=1&&align<=3?align:""));try {if (val == null){cell.setCellValue("");} else if (val instanceof String) {cell.setCellValue((String) val);} else if (val instanceof Integer) {cell.setCellValue((Integer) val);} else if (val instanceof Long) {cell.setCellValue((Long) val);} else if (val instanceof Double) {cell.setCellValue((Double) val);} else if (val instanceof Float) {cell.setCellValue((Float) val);} else if (val instanceof Date) {DataFormat format = wb.createDataFormat();style.setDataFormat(format.getFormat("yyyy-MM-dd"));cell.setCellValue((Date) val);} else {if (fieldType != Class.class){cell.setCellValue((String)fieldType.getMethod("setValue", Object.class).invoke(null, val));}else{cell.setCellValue((String)Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(), "fieldtype."+val.getClass().getSimpleName()+"Type")).getMethod("setValue", Object.class).invoke(null, val));}}} catch (Exception ex) {log.info("Set cell value ["+row.getRowNum()+","+column+"] error: " + ex.toString());cell.setCellValue(val.toString());}cell.setCellStyle(style);return cell;}/*** 添加數據(通過annotation.ExportField添加數據)* @return list 數據列表*/public <E> ExportExcel setDataList(List<E> list){for (E e : list){int colunm = 0;Row row = this.addRow();StringBuilder sb = new StringBuilder();for (Object[] os : annotationList){ExcelField ef = (ExcelField)os[0];Object val = null;// Get entity valuetry{if (StringUtils.isNotBlank(ef.value())){val = Reflections.invokeGetter(e, ef.value());}else{if (os[1] instanceof Field){val = Reflections.invokeGetter(e, ((Field)os[1]).getName());}else if (os[1] instanceof Method){val = Reflections.invokeMethod(e, ((Method)os[1]).getName(), new Class[] {}, new Object[] {});}}// If is dict, get dict labelif (StringUtils.isNotBlank(ef.dictType())){val = DictUtils.getDictLabel(val==null?"":val.toString(), ef.dictType(), "");}}catch(Exception ex) {// Failure to ignorelog.info(ex.toString());val = "";}this.addCell(row, colunm++, val, ef.align(), ef.fieldType());sb.append(val + ", ");}log.debug("Write success: ["+row.getRowNum()+"] "+sb.toString());}return this;}/*** 輸出數據流* @param os 輸出數據流*/public ExportExcel write(OutputStream os) throws IOException{wb.write(os);return this;}/*** 輸出到客戶端* @param fileName 輸出文件名*/public ExportExcel write(HttpServletResponse response, String fileName) throws IOException{response.reset();response.setContentType("application/octet-stream; charset=utf-8");response.setHeader("Content-Disposition", "attachment; filename="+Encodes.urlEncode(fileName));write(response.getOutputStream());return this;}/*** 輸出到文件* @param fileName 輸出文件名*/public ExportExcel writeFile(String name) throws FileNotFoundException, IOException{FileOutputStream os = new FileOutputStream(name);this.write(os);return this;}/*** 清理臨時文件*/public ExportExcel dispose(){wb.dispose();return this;}// /** // * 導出測試 // */ // public static void main(String[] args) throws Throwable { // // List<String> headerList = Lists.newArrayList(); // for (int i = 1; i <= 10; i++) { // headerList.add("表頭"+i); // } // // List<String> dataRowList = Lists.newArrayList(); // for (int i = 1; i <= headerList.size(); i++) { // dataRowList.add("數據"+i); // } // // List<List<String>> dataList = Lists.newArrayList(); // for (int i = 1; i <=1000000; i++) { // dataList.add(dataRowList); // } // // ExportExcel ee = new ExportExcel("表格標題", headerList); // // for (int i = 0; i < dataList.size(); i++) { // Row row = ee.addRow(); // for (int j = 0; j < dataList.get(i).size(); j++) { // ee.addCell(row, j, dataList.get(i).get(j)); // } // } // // ee.writeFile("target/export.xlsx"); // // ee.dispose(); // // log.debug("Export success."); // // }}導入excel的工具類
/*** Copyright © 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.*/ package com.newtouch.common.utils.excel;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List;import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile;import com.google.common.collect.Lists; import com.newtouch.common.utils.Reflections; import com.newtouch.common.utils.excel.annotation.ExcelField; import com.newtouch.modules.sys.utils.DictUtils;/*** 導入Excel文件(支持“XLS”和“XLSX”格式)* @author ThinkGem* @version 2013-03-10*/ public class ImportExcel {private static Logger log = LoggerFactory.getLogger(ImportExcel.class);/*** 工作薄對象*/private Workbook wb;/*** 工作表對象*/private Sheet sheet;/*** 標題行號*/private int headerNum;/*** 構造函數* @param path 導入文件,讀取第一個工作表* @param headerNum 標題行號,數據行號=標題行號+1* @throws InvalidFormatException * @throws IOException */public ImportExcel(String fileName, int headerNum) throws InvalidFormatException, IOException {this(new File(fileName), headerNum);}/*** 構造函數* @param path 導入文件對象,讀取第一個工作表* @param headerNum 標題行號,數據行號=標題行號+1* @throws InvalidFormatException * @throws IOException */public ImportExcel(File file, int headerNum) throws InvalidFormatException, IOException {this(file, headerNum, 0);}/*** 構造函數* @param path 導入文件* @param headerNum 標題行號,數據行號=標題行號+1* @param sheetIndex 工作表編號* @throws InvalidFormatException * @throws IOException */public ImportExcel(String fileName, int headerNum, int sheetIndex) throws InvalidFormatException, IOException {this(new File(fileName), headerNum, sheetIndex);}/*** 構造函數* @param path 導入文件對象* @param headerNum 標題行號,數據行號=標題行號+1* @param sheetIndex 工作表編號* @throws InvalidFormatException * @throws IOException */public ImportExcel(File file, int headerNum, int sheetIndex) throws InvalidFormatException, IOException {this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);}/*** 構造函數* @param file 導入文件對象* @param headerNum 標題行號,數據行號=標題行號+1* @param sheetIndex 工作表編號* @throws InvalidFormatException * @throws IOException */public ImportExcel(MultipartFile multipartFile, int headerNum, int sheetIndex) throws InvalidFormatException, IOException {this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex);}/*** 構造函數* @param path 導入文件對象* @param headerNum 標題行號,數據行號=標題行號+1* @param sheetIndex 工作表編號* @throws InvalidFormatException * @throws IOException */public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex) throws InvalidFormatException, IOException {if (StringUtils.isBlank(fileName)){throw new RuntimeException("導入文檔為空!");}else if(fileName.toLowerCase().endsWith("xls")){ this.wb = new HSSFWorkbook(is); }else if(fileName.toLowerCase().endsWith("xlsx")){ this.wb = new XSSFWorkbook(is);}else{ throw new RuntimeException("文檔格式不正確!");} if (this.wb.getNumberOfSheets()<sheetIndex){throw new RuntimeException("文檔中沒有工作表!");}this.sheet = this.wb.getSheetAt(sheetIndex);this.headerNum = headerNum;log.debug("Initialize success.");}/*** 獲取行對象* @param rownum* @return*/public Row getRow(int rownum){return this.sheet.getRow(rownum);}/*** 獲取數據行號* @return*/public int getDataRowNum(){return headerNum+1;}/*** 獲取最后一個數據行號* @return*/public int getLastDataRowNum(){return this.sheet.getLastRowNum()+headerNum;}/*** 獲取最后一個列號* @return*/public int getLastCellNum(){return this.getRow(headerNum).getLastCellNum();}/*** 獲取單元格值* @param row 獲取的行* @param column 獲取單元格列號* @return 單元格值*/public Object getCellValue(Row row, int column){Object val = "";try{Cell cell = row.getCell(column);if (cell != null){if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC){val = cell.getNumericCellValue();}else if (cell.getCellType() == Cell.CELL_TYPE_STRING){val = cell.getStringCellValue();}else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA){val = cell.getCellFormula();}else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){val = cell.getBooleanCellValue();}else if (cell.getCellType() == Cell.CELL_TYPE_ERROR){val = cell.getErrorCellValue();}}}catch (Exception e) {return val;}return val;}/*** 獲取導入數據列表* @param cls 導入對象類型* @param groups 導入分組*/public <E> List<E> getDataList(Class<E> cls, int... groups) throws InstantiationException, IllegalAccessException{List<Object[]> annotationList = Lists.newArrayList();// Get annotation field Field[] fs = cls.getDeclaredFields();for (Field f : fs){ExcelField ef = f.getAnnotation(ExcelField.class);if (ef != null && (ef.type()==0 || ef.type()==2)){if (groups!=null && groups.length>0){boolean inGroup = false;for (int g : groups){if (inGroup){break;}for (int efg : ef.groups()){if (g == efg){inGroup = true;annotationList.add(new Object[]{ef, f});break;}}}}else{annotationList.add(new Object[]{ef, f});}}}// Get annotation methodMethod[] ms = cls.getDeclaredMethods();for (Method m : ms){ExcelField ef = m.getAnnotation(ExcelField.class);if (ef != null && (ef.type()==0 || ef.type()==2)){if (groups!=null && groups.length>0){boolean inGroup = false;for (int g : groups){if (inGroup){break;}for (int efg : ef.groups()){if (g == efg){inGroup = true;annotationList.add(new Object[]{ef, m});break;}}}}else{annotationList.add(new Object[]{ef, m});}}}// Field sortingCollections.sort(annotationList, new Comparator<Object[]>() {public int compare(Object[] o1, Object[] o2) {return new Integer(((ExcelField)o1[0]).sort()).compareTo(new Integer(((ExcelField)o2[0]).sort()));};});//log.debug("Import column count:"+annotationList.size());// Get excel dataList<E> dataList = Lists.newArrayList();for (int i = this.getDataRowNum(); i < this.getLastDataRowNum(); i++) {E e = (E)cls.newInstance();int column = 0;Row row = this.getRow(i);StringBuilder sb = new StringBuilder();for (Object[] os : annotationList){Object val = this.getCellValue(row, column++);if (val != null){ExcelField ef = (ExcelField)os[0];// If is dict type, get dict valueif (StringUtils.isNotBlank(ef.dictType())){val = DictUtils.getDictValue(val.toString(), ef.dictType(), "");//log.debug("Dictionary type value: ["+i+","+colunm+"] " + val);}// Get param type and type castClass<?> valType = Class.class;if (os[1] instanceof Field){valType = ((Field)os[1]).getType();}else if (os[1] instanceof Method){Method method = ((Method)os[1]);if ("get".equals(method.getName().substring(0, 3))){valType = method.getReturnType();}else if("set".equals(method.getName().substring(0, 3))){valType = ((Method)os[1]).getParameterTypes()[0];}}//log.debug("Import value type: ["+i+","+column+"] " + valType);try {if (valType == String.class){String s = String.valueOf(val.toString());if(StringUtils.endsWith(s, ".0")){val = StringUtils.substringBefore(s, ".0");}else{val = String.valueOf(val.toString());}}else if (valType == Integer.class){val = Double.valueOf(val.toString()).intValue();}else if (valType == Long.class){val = Double.valueOf(val.toString()).longValue();}else if (valType == Double.class){val = Double.valueOf(val.toString());}else if (valType == Float.class){val = Float.valueOf(val.toString());}else if (valType == Date.class){val = DateUtil.getJavaDate((Double)val);}else{if (ef.fieldType() != Class.class){val = ef.fieldType().getMethod("getValue", String.class).invoke(null, val.toString());}else{val = Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(), "fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString());}}} catch (Exception ex) {log.info("Get cell value ["+i+","+column+"] error: " + ex.toString());val = null;}// set entity valueif (os[1] instanceof Field){Reflections.invokeSetter(e, ((Field)os[1]).getName(), val);}else if (os[1] instanceof Method){String mthodName = ((Method)os[1]).getName();if ("get".equals(mthodName.substring(0, 3))){mthodName = "set"+StringUtils.substringAfter(mthodName, "get");}Reflections.invokeMethod(e, mthodName, new Class[] {valType}, new Object[] {val});}}sb.append(val+", ");}dataList.add(e);log.debug("Read success: ["+i+"] "+sb.toString());}return dataList;}// /** // * 導入測試 // */ // public static void main(String[] args) throws Throwable { // // ImportExcel ei = new ImportExcel("target/export.xlsx", 1); // // for (int i = ei.getDataRowNum(); i < ei.getLastDataRowNum(); i++) { // Row row = ei.getRow(i); // for (int j = 0; j < ei.getLastCellNum(); j++) { // Object val = ei.getCellValue(row, j); // System.out.print(val+", "); // } // System.out.print("\n"); // } // // }}導出excle:
/*** 導出考生數據* * @param applyOnline* @param request* @param response* @param redirectAttributes* @return*/// @RequiresPermissions("mba:applyOnline:view")@RequestMapping(value = "export", method = RequestMethod.POST)public String exportFile(ApplyOnline applyOnline, HttpServletRequest request, HttpServletResponse response,RedirectAttributes redirectAttributes) {try {User user = UserUtils.getUser();String project = user.getProject();if (project != null) {applyOnline.setProject(project);}String fileName = "考生數據" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";List<ApplyOnline> list = applyOnlineService.findList(applyOnline);new ExportExcel("考生數據", ApplyOnline.class).setDataList(list).write(response, fileName).dispose();return null;} catch (Exception e) {logger.error("導出學生信息異常", e);addMessage(redirectAttributes, "導出用戶失敗!失敗信息:" + e.getMessage());}return "redirect:" + adminPath + "/mba/applyOnline/list?repage";}總結
以上是生活随笔為你收集整理的EXCEL导入导出使用的框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springmvc+spring+hib
- 下一篇: 导出PDF和Zip文件的工具类