java中实现Excel表格导出(后端部分)

添加maven依赖

    
        org.apache.poi
        poi
        3.13-beta1
    

主体代码

package net.sppan.base;

import javax.servlet.http.HttpServletResponse;

import com.ecopro.base.ResultData;
import com.ecopro.utils.CollectionUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.CellRangeAddress;

import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * Author: SamGroves
 * 

* Description: 创建excel表格,导出数据 *

* Date: 2017/10/28 */ public class CreateExcel { @SuppressWarnings({ "deprecation" }) public void guancha( ResultData>> dataset,// 接收数据 HttpServletResponse response) { HSSFWorkbook workBook = new HSSFWorkbook();// 创建excel工作簿 // 设置表头字体样式 HSSFFont headfont = workBook.createFont(); headfont.setFontName("黑体"); headfont.setFontHeightInPoints((short) 22);// 字体大小 headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗 HSSFCellStyle headstyle = workBook.createCellStyle(); headstyle.setFont(headfont); headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 headstyle.setLocked(true); headstyle.setWrapText(true);// 自动换行 // 设置列头字体样式 HSSFFont columnHeadFont = workBook.createFont(); columnHeadFont.setFontName("宋体"); columnHeadFont.setFontHeightInPoints((short) 11); columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置列头的样式 HSSFCellStyle columnHeadStyle = workBook.createCellStyle(); columnHeadStyle.setFont(columnHeadFont); columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 columnHeadStyle.setLocked(true); columnHeadStyle.setWrapText(true); HSSFFont font = workBook.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 11); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置普通单元格样式 HSSFCellStyle style = workBook.createCellStyle(); style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中 style.setWrapText(true); HSSFCellStyle centerstyle = workBook.createCellStyle(); centerstyle.setFont(font); centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 centerstyle.setWrapText(true); // 时间样式 HSSFFont font1 = workBook.createFont(); font1.setFontName("Arial"); font1.setFontHeightInPoints((short) 10); font1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); HSSFCellStyle timeStyle = workBook.createCellStyle(); timeStyle.setFont(font1); timeStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中 timeStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 HSSFSheet sheet = workBook.createSheet();// 创建一个工作表sheet // 对第一行做处理,标题的创建 HSSFRow row = sheet.createRow(0);// 创建第一行 row.setHeight((short) 600);// 设置表格行的高度 HSSFCell cell0 = row.createCell(0); cell0.setCellValue(new HSSFRichTextString("充值记录统计表"));// 设置表名 cell0.setCellStyle(headstyle); /** * 合并单元格 * 第一个参数:第一个单元格的行数(从0开始)a * 第二个参数:第二个单元格的行数(从0开始)b * 第三个参数:第一个单元格的列数(从0开始)c * 第四个参数:第二个单元格的列数(从0开始)d * 合并 a行c列 的那一个单元格 到 b行d列 的那一个单元格 */ CellRangeAddress range = new CellRangeAddress(0, 0, 0, 9); sheet.addMergedRegion(range); HSSFRow row2 = sheet.createRow(1); row2.setHeight((short) 500); HSSFCell cell = null; String[] headers = { "时间", "充值订单号","用户ID", "用户姓名", "银行卡号", "充值金额"}; // 插入第一行数据标题 for (int i = 0; i < headers.length; i++) { cell = row2.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(columnHeadStyle); sheet.setColumnWidth(i, 5500); } // 数据的处理中最好每一行都判断是否为空,以免出现空指针错误 // 转字符型的时候最好用String.ValueOf()方法 if (CollectionUtils.isNotEmpty(dataset.getData())) { for (int i = 0; i < dataset.getData().size(); i++) { HSSFRow nextRow = sheet.createRow(i + 2); nextRow.createCell(0).setCellValue( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(dataset.getData().get(i) .getCreatedAt())); nextRow.createCell(1).setCellValue( dataset.getData().get(i).getOrderId()); nextRow.createCell(2).setCellValue( dataset.getData().get(i).getUserId()); nextRow.createCell(3).setCellValue( dataset.getData().get(i).getAcname()); nextRow.createCell(4).setCellValue( dataset.getData().get(i).getAcno()); nextRow.createCell(5).setCellValue( dataset.getData().get(i).getAmt() .doubleValue()); nextRow.createCell(6).setCellValue( dataset.getData().get(i).getStatus().name()); } } // 设置输出文本格式及名称 SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss"); String title = format.format(new Date()) + ".xls"; response.reset(); response.setHeader("Content-disposition", "attachment; filename=" + title); response.setContentType("application/msexcel"); try { ServletOutputStream out = response.getOutputStream(); workBook.write(out); out.close(); } catch (IOException e) { e.printStackTrace(); } } }

前端调用

#if(!$detailRecords)
#else
  
#end

你可能感兴趣的:(java中实现Excel表格导出(后端部分))