导出为EXCEL文件并下载
使用ExcelUtil.writeToExcel(ExcelUtil.listToWorkbook(rows, ExcelType.xls), out);方法
生成一个export-wsdlpath-20141023135606.xls 文件并自动下载
直接从数据库中查数据后填充即可。
/** * 导出选定的服务的wsdl path * * @param info [id] */ @RequestMapping(value = "esbService/exportWsdlPath.do", method = RequestMethod.GET) @ResponseBody public void exportWsdlPath(@RequestParam String info, HttpServletResponse response){ //logger.debug("exportWsdlPath begin..."); //logger.debug("parm : " + info); //info = srvId1:srvName1,srvId2:srvName2,... if(StringUtils.isNotEmpty(info)){ // 要下载路径的服务id List<Long> srvId = new ArrayList<Long>(); for(String si : info.split(",")){ try { srvId.add(Long.parseLong(si)); } catch (Exception e) { logger.error("exportWsdlPath parse parm error... " + si); continue; } } //logger.debug("parse parm pass..."); // 拼装表格 List<Object> rows = new ArrayList<Object>(); List<String> header = new ArrayList<String>(6); // 服务标识 header.add("\u670d\u52a1\u6807\u8bc6"); // 服务英文名 header.add("\u670d\u52a1\u82f1\u6587\u540d"); // 服务中文名 header.add("\u670d\u52a1\u4e2d\u6587\u540d"); // 服务类型 header.add("\u670d\u52a1\u7c7b\u578b"); // 提供方系统 header.add("\u63d0\u4f9b\u65b9\u7cfb\u7edf"); // WSDL地址 header.add("WSDL\u5730\u5740"); rows.add(header); // 获取服务清单 List<EsbServiceV> esv = esbServiceVDS.getServiceList(srvId); logger.debug("service list : " + esv); for(EsbServiceV s : esv){ if(s.getWsdlUrl() == null) continue; List<String> row = new ArrayList<String>(6); row.add(s.getServiceNumber()); row.add(s.getServiceNameEn()); row.add(s.getServiceNameCN()); row.add(s.getServiceTypeName()); row.add(s.getProviderAppName()); String adr = SysConfigCache.getConfigByName(Constants.SERVER_ADDRESS); if(adr.endsWith("/")){ adr = adr.substring(0, adr.length() - 1); } row.add(adr + s.getWsdlUrl()); rows.add(row); } // httpheader设置 response.setContentType("application/x-msdownload;"); response.setHeader("Content-disposition", "attachment; filename = export-wsdlpath-" + String.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS", System.currentTimeMillis()) + ".xls"); OutputStream out = null; try { out = response.getOutputStream(); ExcelUtil.writeToExcel(ExcelUtil.listToWorkbook(rows, ExcelType.xls), out); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(out != null){ out.flush(); out.close(); } } catch (IOException e) { e.printStackTrace(); } } } //logger.debug("exportWsdlPath end..."); }
MAVEN POM:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> <exclusions> <exclusion> <artifactId>xml-apis</artifactId> <groupId>xml-apis</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency>
代码:
List<Object> readToList(String fileName, int sheetIndex, int skipRows)
//读取Excel文件数据,转换为一个List
Workbook listToWorkbook(List<?> rows, ExcelType type)
//将List数据转换为Wordbook格式
void writeToExcel(Workbook wb, OutputStream out)
//生成Excel文件,即将Wb转换为文件
转换Excel文件为List
List<Object> rows = null; try { rows = ExcelUtil.readToList(newName, 1, 1); } catch (Exception e) { result.put("code", 2); result.put("msg", e.getMessage()); // return result; } if (result.isEmpty()) { // List行转ProxyService对象 List<ProxyService> list = new ArrayList<ProxyService>(rows.size()); Map<String, Object> ut = new HashMap<String, Object>(); String key = ""; try { for (Object obj : rows) { @SuppressWarnings("unchecked") List<String> row = (List<String>) obj; if (StringUtils.isNotEmpty(row.get(2)) && StringUtils.isNotEmpty(row.get(5)) && StringUtils.isNotEmpty(row.get(7))) { // 验证输入 if (row.get(2).replaceAll("[a-zA-Z0-9_]", "").length() != 0) throw new Exception("【所属系统或模块】只能由字母、数字和下划线构成:" + row.get(2)); if (row.get(5).replaceAll("[a-zA-Z0-9_]", "").length() != 0) throw new Exception("【服务名】只能由字母、数字和下划线构成:" + row.get(5)); // 验证唯一键约束 key = row.get(2) + "-" + row.get(5); if (null != ut.get(key)) throw new Exception("【所属系统或模块】组合【服务名称】不能重复"); ut.put(key, row); ProxyService service = proxyServiceService.getByName(row.get(2), row.get(5)); if (null == service) { service = new ProxyService(); service.setState(0); } else { service.setState(1); } service.setModel(row.get(2)); service.setName(row.get(5)); service.setWsdl(row.get(7)); service.setDescribe(StringUtils.isNotEmpty(row.get(8)) ? row.get(8) : row.get(5)); list.add(service); } } // 服务列表写入Session session.setAttribute(SessionKey.EXCEL_PROXYSERVICE_LIST, rows); session.setAttribute(SessionKey.MULTIPLE_PROXYSERVICE_LIST, list); // 返回结果 result.put("code", 0); result.put("result", list); } catch (Exception e) { result.put("code", 3); result.put("msg", e.getMessage()); } }
工具类:
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; 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; public class ExcelUtil { /** * Excel文件到List * @param fileName * @param sheetIndex // 工作表索引 * @param skipRows // 跳过的表头 * @return * @throws Exception */ public static List<Object> readToList(String fileName, int sheetIndex, int skipRows) throws Exception{ List<Object> ls = new ArrayList<Object>(); Workbook wb = loadWorkbook(fileName); if (null != wb) { Sheet sh = wb.getSheetAt(sheetIndex); int rows = sh.getPhysicalNumberOfRows(); for (int i = skipRows; i < rows; i++) { Row row = sh.getRow(i); if(null==row){ break; } int cells = row.getPhysicalNumberOfCells(); if(cells==0){ continue; } List<String> r = new ArrayList<String>(cells); for (int c = 0; c < cells; c++) { if(c == 0 || c== 4){ try{ r.add(String.format("%.0f", row.getCell(c).getNumericCellValue())); }catch(Exception e){ throw new Exception("出现该错误请依次检查:<br>1、【序号】或【端口号】请使用数字<br>2、检查《Webservice信息》是否是第二个sheet页"); } }else{ r.add(row.getCell(c).getStringCellValue()); } } ls.add(r); } } return ls; } /** * 读取Excel文件,支持2000与2007格式 * @param fileName * @return * @throws Exception */ public static Workbook loadWorkbook(String fileName) throws Exception { if (null == fileName) return null; Workbook wb = null; if (fileName.toLowerCase().endsWith(".xls")) { try { InputStream in = new FileInputStream(fileName); POIFSFileSystem fs = new POIFSFileSystem(in); wb = new HSSFWorkbook(fs); in.close(); } catch (Exception e) { e.printStackTrace(); } } else if (fileName.toLowerCase().endsWith(".xlsx")) { try { InputStream in = new FileInputStream(fileName); wb = new XSSFWorkbook(in); in.close(); } catch (Exception e) { e.printStackTrace(); } }else{ throw new Exception("不是一个有效的Excel文件"); } return wb; } public static void writeToExcel(Workbook wb, OutputStream out){ try { wb.write(out); } catch (IOException e) { e.printStackTrace(); } } public static enum ExcelType{ xls, xlsx; } public static Workbook listToWorkbook(List<?> rows, ExcelType type){ Workbook wb = null; if(ExcelType.xls.equals(type)){ wb = new HSSFWorkbook(); }else if(ExcelType.xlsx.equals(type)){ wb = new XSSFWorkbook(); }else{ return null; } Sheet sh = wb.createSheet(); if(null!=rows){ for(int i=0; i<rows.size(); i++){ Object obj = rows.get(i); Row row = sh.createRow(i); if (obj instanceof Collection) { Collection<?> r = (Collection<?>) obj; Iterator<?> it = r.iterator(); int j = 0; while(it.hasNext()){ Cell cell = row.createCell(j++); cell.setCellValue(String.valueOf(it.next())); } }else if(obj instanceof Object[]){ Object[] r = (Object[]) obj; for(int j=0; j<r.length; j++){ Cell cell = row.createCell(j); cell.setCellValue(String.valueOf(r[j])); } }else{ Cell cell = row.createCell(0); cell.setCellValue(String.valueOf(obj)); } } } return wb; } public static void main(String[] args) { List<Object> rows = new ArrayList<Object>(); List<Object> row = new ArrayList<Object>(); row.add("字符串"); row.add(11); row.add(new Date()); row.add(1.0); rows.add(((Object)row)); rows.add("中文"); rows.add(new Date()); listToWorkbook(rows, ExcelType.xls); listToWorkbook(rows, ExcelType.xlsx); } }
。。
相关推荐
最新导入导出工具类ExcelUtil.java
ExcelUtil java excel工具类
easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
Excel的一个工具类,可以实现Excel的导入导出等功能
本人自主研发的ExcelUtil工具类,主要实现列表数据与excel文件互相转换的功能。 作用:快速实现数据导入和导出功能。 优势:只需配置注解即可实现数据导入导出功能,无需熟悉POI,并编写复杂的代码。
Excel导入导出工具类,ExcelUtil,Excel相关处理 导入方法importExcel( @param list导出数据集合* @param sheetName 工作表的名称),
实现一个配置简单功能强大的excel工具类搞定大多数导入导出. http://blog.csdn.net/lk_blog/article/details/8007777 http://blog.csdn.net/lk_blog/article/details/8007837 对于J2EE项目导入导出Excel是最普通和...
Excel操作工具类
一个用jxl做的导入导出excel表数据的工具类。
java实现Excel导入导出,附带一些简单的样式修改,添加,本来是没打算有偿分享的,可是没有0分的选项不知道是什么原因,估计缘于我是个新手
文章目录项目环境:实现功能:工具类实现定义参数bean:ExportExcelBean.java定义导出excel的表格主题:ExportExcelTheme.java【重点】导出excel的工具类:ExportExcelUtil.java测试导出excel编写测试controller:...
在开发中是经常遇到的问题,也是程序员比较费心思的开发问题,虽然现在有jxl,poi等第三方开发组件的支持,对excel的操作变的简单了很多,但是大多数都不通用,在此提供一个excel导出工具,内含源码,excelutil,...
1.使用poi excel jar 包 2.excel 表格需要有表头,名称可以是表字段的,也可以是java 实体属性的 3.最终封装的结果是java.util.List<?> 结果 4.有日期类型的,在excel表格里最好设置列属性为日期格式。
工具类作用:简化Excel import开发,节省开发事件,提高开发效率
ExcelUtils工具类支持按照固定模板导出Excel,简单、易上手
ExcelUtil使用场景可以想一下我们现在有个Excel导入任务,比如是导入一个班级的学生花名册, 比如学生这个实体类是Student.java一般的导入是需要每行每列对Excel进行遍历,然后给Student的各个属性进行赋值,然后...
封装了excel工具类,只需要几行代码就能实现导入导出功能,适用导出List和List的类型。项目来源于:https://github.com/SargerasWang/ExcelUtil