package utils; import common.Constant; import models.ExportHead; import org.apache.poi.hssf.usermodel.*; import play.Logger; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Created by yang on 2017-10-14. */ public class ExportFileUtil { private List<Map<String,Object>> list ; private List<ExportHead> headList; private String fileName = Constant.EXPORTADDRESS + File.separator + Constant.EXPORTFILENAME; public String getFileName(){ return this.fileName; } /** * 导出工具类 * 使用时先实例化,然后获取文件 * @param list 数据内容列表 * @param headList 数据头部列表 ExportHead 三个参数分别为 每列的fieldName 每列头部展现的列名filedAliasName 每列的类型默认为String * key 与数据内容列表中map的key相同 * @throws CustomException 如果数据列为空,或者首行标题为空抛出异常 */ public ExportFileUtil(List<Map<String,Object>> list,List<ExportHead> headList ) throws Exception { if(list==null||headList==null||headList.size()<1||list.size()<1){ throw new CustomException("传入的两个列表都不能为空"); } this.list = list; this.headList = headList; getExcel(); } private void getExcel() throws IOException { // 第一步,创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = null; HSSFRow row = null; int rowNum = 0; //循环数据内容并进行填充 for (Map<String,Object> map:list ) { //行数大于65535需要分页 if((rowNum+65535)%65535==0){ // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet sheet = wb.createSheet(); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short HSSFRow headRow = sheet.createRow(rowNum); // 第四步,创建单元格,并设置值表头 设置表头居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 //循环列表头写入excel第一行 int i = 0; for (ExportHead val : headList ) { HSSFCell cell = headRow.createCell(i); cell.setCellValue(val.getFieldAliasName()); cell.setCellStyle(style); i++; } rowNum = 1; } row = sheet.createRow(rowNum); int cellNum = 0; for(ExportHead entry : headList ){ String currentVal=""; try { //默认是直接转换成String if(entry.getFieldType().getName().equals("java.lang.String")){ currentVal = map.get(entry.getFieldName()).toString(); } //如果是毫秒数Long需要转换为date格式则进行转换 else if(entry.getFieldType().getName().equals("java.util.Date")){ if(StringUtils.objToString(map.get(entry.getFieldName())).equals("")){ currentVal =""; }else { Date date = new Date(Long.valueOf(StringUtils.objToString(map.get(entry.getFieldName())))); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd日 HH:mm:ss"); currentVal = format.format(date); } } }catch (NullPointerException e){ Logger.warn("导出数据时有一些问题,"+entry.getFieldName()+ "这个列在当前行中找不到"); } row.createCell(cellNum).setCellValue(currentVal); cellNum++; } rowNum++; } FileOutputStream out = new FileOutputStream(fileName); wb.write(out); out.close(); } }
java导出excle的工具类
最新推荐文章于 2024-05-23 09:13:44 发布