这个是转载的,直接贴代码 :
在pom.xml 文件中依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
ExcelUtil 工具类:
package com.ylink.aps.util; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * Excel导出工具类 * @author qi.deng * 2017-06-05 */ public class ExcelUtil { private XSSFWorkbook wb = null; private XSSFSheet sheet = null; /** * @param wb * @param sheet */ public ExcelUtil(XSSFWorkbook wb, XSSFSheet sheet) { this.wb = wb; this.sheet = sheet; } /** * 合并单元格后给合并后的单元格加边框 * * @param region * @param cs */ public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) { int toprowNum = region.getFirstRow(); for (int i = toprowNum; i <= region.getLastRow(); i++) { XSSFRow row = sheet.getRow(i); for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) { XSSFCell cell = row.getCell(j);// XSSFCellUtil.getCell(row, // (short) j); cell.setCellStyle(cs); } } } /** * 设置表头的单元格样式 * * @return */ public XSSFCellStyle getHeadStyle() { // 创建单元格样式 XSSFCellStyle cellStyle = wb.createCellStyle(); // 设置单元格的背景颜色为淡蓝色 cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); // 设置单元格居中对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 // 设置单元格字体样式 // 设置单元格边框为细线条 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } /** * 设置表体的单元格样式 * * @return */ public XSSFCellStyle getBodyStyle() { // 创建单元格样式 XSSFCellStyle contentStyle = wb.createCellStyle(); contentStyle.setAlignment(CellStyle.ALIGN_LEFT); contentStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); contentStyle.setBorderTop(CellStyle.BORDER_THIN); contentStyle.setBorderBottom(CellStyle.BORDER_THIN); contentStyle.setBorderLeft(CellStyle.BORDER_THIN); contentStyle.setBorderRight(CellStyle.BORDER_THIN); contentStyle.setTopBorderColor(IndexedColors.BLACK.index); contentStyle.setBottomBorderColor(IndexedColors.BLACK.index); contentStyle.setLeftBorderColor(IndexedColors.BLACK.index); contentStyle.setRightBorderColor(IndexedColors.BLACK.index); return contentStyle; } }Action 代码:
@Action(value = "exportExcel", results = { @Result(name = "success", type = "stream", params = { "contentType", "application/octet-stream;charset=ISO8859-1", "inputName", "inputStream", "contentDisposition", "attachment;filename=\"${downloadFileName}\"", "bufferSize", "1024" })}) public String exportExcel() { if(model == null){ model = new ClearSettlementIndirectModel(); } ClearSettleSearch clearSettleSearch = model.getClearSettleSearch(); if(clearSettleSearch == null){ clearSettleSearch = new ClearSettleSearch(); } Date startDate = clearSettleSearch.getSettleDate().getStart(); Date endDate = clearSettleSearch.getSettleDate().getEnd(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); try { String fileName = "aps-mch-cls" + "-" + sdf.format(startDate) + "-" + sdf.format(endDate) + ".xls"; ServletOutputStream outputStream = response.getOutputStream(); String[] titles = { "结算编号", "商户编号", "商户名称","结算金额","银行名称","账户类别","户名","账号" }; response.setHeader("Content-Disposition", "attachment;filename="+fileName); this.exportExcelto(titles, outputStream,clearSettleSearch); } catch (IOException e) { e.printStackTrace(); } return null; } public void exportExcelto(String[] titles, OutputStream outputStream, ClearSettleSearch clearSettleSearch) { ListPage<ClearSettleSearch> page = mechSettlementQueryAppService.getList(null,clearSettleSearch); List<ClearSettleSearch> list = page.getList(); if (null != list && list.size() > 0) { // 创建一个workbook 对应一个excel应用文件 XSSFWorkbook workBook = new XSSFWorkbook(); // 在workbook中添加一个sheet,对应Excel文件中的sheet XSSFSheet sheet = workBook.createSheet("非直清结算数据"); sheet.setColumnWidth(0, 3000); // 调整第一列宽度 sheet.setColumnWidth(1, 3000); // 调整第二列宽度 sheet.setColumnWidth(2, 3000); // 调整第三列宽度 sheet.setColumnWidth(3, 3000); // 调整第四列宽度 sheet.setColumnWidth(4, 7000); // 调整第二列宽度 sheet.setColumnWidth(5, 2000); // 调整第二列宽度 sheet.setColumnWidth(6, 7000); // 调整第二列宽度 sheet.setColumnWidth(7, 6000); // 调整第二列宽度 ExcelUtil exportUtil = new ExcelUtil(workBook, sheet); XSSFCellStyle headStyle = exportUtil.getHeadStyle(); XSSFCellStyle bodyStyle = exportUtil.getBodyStyle(); // 构建表头 XSSFRow headRow = sheet.createRow(0); XSSFCell cell = null; for (int i = 0; i < titles.length; i++) { cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } // 构建表体数据 if (list != null && list.size() > 0) { for (int j = 0; j < list.size(); j++) { XSSFRow bodyRow = sheet.createRow(j + 1); cell = bodyRow.createCell(0); cell.setCellStyle(bodyStyle); cell.setCellValue(list.get(j).getId()); cell = bodyRow.createCell(1); cell.setCellStyle(bodyStyle); cell.setCellValue(list.get(j).getMchCode()); cell = bodyRow.createCell(2); cell.setCellStyle(bodyStyle); cell.setCellValue(list.get(j).getMchName()); cell = bodyRow.createCell(3); cell.setCellStyle(bodyStyle); cell.setCellValue(list.get(j).getAmountSettle()); cell = bodyRow.createCell(4); cell.setCellStyle(bodyStyle); try { cell.setCellValue(BankcardHelper.getBankInfoById(list.get(j).getBackType()).getBankName().toString()); } catch (Exception e) { e.printStackTrace(); } cell = bodyRow.createCell(5); cell.setCellStyle(bodyStyle); cell.setCellValue(AccountType.valueOf(list.get(j).getAccountType()).toString()); cell = bodyRow.createCell(6); cell.setCellStyle(bodyStyle); cell.setCellValue(list.get(j).getCardName()); cell = bodyRow.createCell(7); cell.setCellStyle(bodyStyle); cell.setCellValue(list.get(j).getCardNo()); } } try { workBook.write(outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }jsp 代码:
<script>
function aa(){ var start = $($(".date")[0]).val(); var end = $($(".date")[1]).val(); window.location.href='<%=request.getContextPath()%>'+'/cls/clearsettle/exportExcel.do?model.clearSettleSearch.settleDate.start='+start+'&model.clearSettleSearch.settleDate.end='+end; } </script>
<button type="button" class="btn btn-primary btn-sm pull-right" οnclick="aa()"> <i class="fa fa-search"></i> 导出Excel </button>
希望对大家有用。
补充一下, @Result(name = "success", type = "stream", params = { "contentType", "application/octet-stream;charset=ISO8859-1", "inputName", "inputStream", "contentDisposition", "attachment;filename=\"${downloadFileName}\"", "bufferSize", "1024" })})
里面的 application/octet-stream 是在不知道导出的是什么文件的情况下使用的,如果知道要导出的文件是Excel,那么将这里改成application/vnd.ms-excel 就行了。
