最近做了些导出excel,主要分两种,直接导出和根据模板导出两种形式。
值得导出就不说了,网上比较多的例子,
模板导出还是有点意思.
1.先看要导出的模板:
${exportTitle} | ||||||||||
编号:QDZB-6.3-06 | ||||||||||
序号 | 设备名称 | 型号规格 | 启用年份 | 原值(万元) | 安装地点 | 使用单位 | 当前技术状况评估 | |||
${serialNumber} | ${assetName} | ${model} | ${usingDate} | ${preValue} | ${installPlace} | ${usingOuName} | ${assetStatusCn} | |||
${applicantName} | ${depCommentName} | ${zbbmCommentName} |
/** * 根据Xls模板文件创建并填充数据 * @param templateXlsFilePath 获取xls模板文件的路径 * @param dataSourceList 填充的数据对象 * @param exportFilePath 要导出的文件路径 * @param parameters 传入的参数 * @param dataRowIndex 数据起始行索引 * @return * @throws EgrandException */ public void createXlsFileWithList(String templateXlsFilePath,List dataSourceList,String exportFilePath,Map parameters,int dataRowIndex) throws EgrandException{ if(null == templateXlsFilePath || templateXlsFilePath.length() == 0 || null == dataSourceList || dataSourceList.isEmpty()) return ; logger.debug(" dataSourceList size :"+dataSourceList.size()); logger.debug(" templateXlsFilePath :"+templateXlsFilePath); try { logger.debug(" exportFilePath :"+exportFilePath); //创建导出文件的目录 File exportFile=new File(exportFilePath.substring(0,exportFilePath.lastIndexOf("/"))); logger.debug(" exportFile value:"+exportFile+" path :"+exportFilePath.substring(0,exportFilePath.lastIndexOf("/"))); if(!exportFile.exists() || !exportFile.isDirectory()){ exportFile.mkdirs(); } FileOutputStream outStream = new FileOutputStream(exportFilePath); //定义正则表达式匹配对象 Pattern pattern = Pattern.compile("\\$\\{(.*)\\}"); // Excel获得文件 Workbook templateWorkbook = Workbook.getWorkbook(new File(templateXlsFilePath)); // 打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book = Workbook.createWorkbook(outStream, templateWorkbook); // 添加一个工作表 WritableSheet sheet = book.getSheet(0); //获取工作表格中的行数 int rows = sheet.getRows(); //获取工作表格中的列数 int cols = sheet.getColumns(); //正则表达式的匹配对象 Matcher matcher=null; //单元格的格式对象 CellFormat cellFormat=null; //获取数据表达式 Map patternColumMap=new HashMap(); //单元格对象 Cell curCell=null; for (int row = 0; row 0) sheet.insertRow(currDataStartRowIndex); for(Iterator patternColIterator=patternColumMap.keySet().iterator();patternColIterator.hasNext();){ String patternColumnName=(String)patternColIterator.next(); Object value=null; try{ value = Ognl.getValue(patternColumnName, domain); logger.debug(" property name :"+patternColumnName+" value:"+value); }catch(OgnlException ex){ ex.printStackTrace(); } Label tempLabel=(Label)patternColumMap.get(patternColumnName); sheet.addCell(new Label(tempLabel.getColumn(), currDataStartRowIndex, null == value ? "" : value.toString(),tempLabel.getCellFormat())); colIndex++; } index++; } book.write(); book.close(); outStream.flush(); outStream.close(); } catch (Exception ex) { throw new EgrandException(ex); } }
4.操作起来还是比较简单,方法可以不断改善,做到更符合实际,这是上传了ExcelUtils工具包,可以不断改进
,还有一些比较好导出excel的网上资料:http://jxls.sourceforge.net/samples/collectionsample.html。