实现需要的Maven仓库依赖:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.7</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.7</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.12</version></dependency><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>1.4.1</version></dependency>
实现Excel导出的工具类代码如下:
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;/*** <p>* <p>Title:excelUtil.java</p >* <p>Description: 导出Excel的工具类</p >* <p>Date:2020/1/7 10:49</p >** @author wsh* @version 1.0*/
public class ExcelExportUtil {//表头private String title;//各个列的表头private String[] heardList;//各个列的元素key值private String[] heardKey;//需要填充的数据信息private List<Map> data;//字体大小private int fontSize = 14;//行高private int rowHeight = 30;//列宽private int columWidth = 200;//工作表private String sheetName = "sheet1";public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String[] getHeardList() {return heardList;}public void setHeardList(String[] heardList) {this.heardList = heardList;}public String[] getHeardKey() {return heardKey;}public void setHeardKey(String[] heardKey) {this.heardKey = heardKey;}public List<Map> getData() {return data;}public void setData(List<Map> data) {this.data = data;}public int getFontSize() {return fontSize;}public void setFontSize(int fontSize) {this.fontSize = fontSize;}public int getRowHeight() {return rowHeight;}public void setRowHeight(int rowHeight) {this.rowHeight = rowHeight;}public int getColumWidth() {return columWidth;}public void setColumWidth(int columWidth) {this.columWidth = columWidth;}public String getSheetName() {return sheetName;}public void setSheetName(String sheetName) {this.sheetName = sheetName;}/*** 开始导出数据信息**/public byte[] exportExport(HttpServletRequest request, HttpServletResponse response) throws IOException {//检查参数配置信息checkConfig();//创建工作簿HSSFWorkbook wb = new HSSFWorkbook();//创建工作表HSSFSheet wbSheet = wb.createSheet(this.sheetName);//设置默认行宽wbSheet.setDefaultColumnWidth(20);// 标题样式(加粗,垂直居中)HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中HSSFFont fontStyle = wb.createFont();fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//fontStyle.setBold(true); //加粗fontStyle.setFontHeightInPoints((short)16); //设置标题字体大小cellStyle.setFont(fontStyle);//在第0行创建rows (表标题)HSSFRow title = wbSheet.createRow((int) 0);title.setHeightInPoints(30);//行高HSSFCell cellValue = title.createCell(0);cellValue.setCellValue(this.title);cellValue.setCellStyle(cellStyle);wbSheet.addMergedRegion(new CellRangeAddress(0,0,0,(this.heardList.length-1)));//设置表头样式,表头居中HSSFCellStyle style = wb.createCellStyle();//设置单元格样式style.setAlignment(HSSFCellStyle.ALIGN_CENTER);style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置字体HSSFFont font = wb.createFont();font.setFontHeightInPoints((short) this.fontSize);style.setFont(font);//在第1行创建rowsHSSFRow row = wbSheet.createRow((int) 1);//设置列头元素HSSFCell cellHead = null;for (int i = 0; i < heardList.length; i++) {cellHead = row.createCell(i);cellHead.setCellValue(heardList[i]);cellHead.setCellStyle(style);}//设置每格数据的样式 (字体红色)HSSFCellStyle cellParamStyle = wb.createCellStyle();HSSFFont ParamFontStyle = wb.createFont();cellParamStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);cellParamStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);ParamFontStyle.setColor(HSSFColor.DARK_RED.index); //设置字体颜色 (红色)ParamFontStyle.setFontHeightInPoints((short) this.fontSize);cellParamStyle.setFont(ParamFontStyle);//设置每格数据的样式2(字体蓝色)HSSFCellStyle cellParamStyle2 = wb.createCellStyle();cellParamStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);cellParamStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);HSSFFont ParamFontStyle2 = wb.createFont();ParamFontStyle2.setColor(HSSFColor.BLUE.index); //设置字体颜色 (蓝色)ParamFontStyle2.setFontHeightInPoints((short) this.fontSize);cellParamStyle2.setFont(ParamFontStyle2);//开始写入实体数据信息int a = 2;for (int i = 0; i < data.size(); i++) {HSSFRow roww = wbSheet.createRow((int) a);Map map = data.get(i);HSSFCell cell = null;for (int j = 0; j < heardKey.length; j++) {cell = roww.createCell(j);cell.setCellStyle(style);Object valueObject = map.get(heardKey[j]);String value = null;if (valueObject == null) {valueObject = "";}if (valueObject instanceof String) {//取出的数据是字符串直接赋值value = (String) map.get(heardKey[j]);} else if (valueObject instanceof Integer) {//取出的数据是Integervalue = String.valueOf(((Integer) (valueObject)).floatValue());} else if (valueObject instanceof BigDecimal) {//取出的数据是BigDecimalvalue = String.valueOf(((BigDecimal) (valueObject)).floatValue());} else {value = valueObject.toString();}//设置单个单元格的字体颜色if(heardKey[j].equals("ddNum") || heardKey[j].equals("sjNum")){if((Long)map.get("ddNum")!=null){if((Long)map.get("sjNum")==null){cell.setCellStyle(cellParamStyle);} else if(((Long) map.get("ddNum")).equals ((Long) map.get("sjNum"))){if ((Long) map.get("ddNum") > (Long) map.get("sjNum")) {cell.setCellStyle(cellParamStyle);}if ((Long) map.get("ddNum") < (Long) map.get("sjNum")) {cell.setCellStyle(cellParamStyle2);}}else {cell.setCellStyle(style);}}}cell.setCellValue(StringUtils.isNotEmpty(value) ? "" : value);}a++;}//导出数据try {//设置Http响应头告诉浏览器下载这个附件response.setHeader("Content-Disposition", "attachment;Filename=" + System.currentTimeMillis() + ".xls");OutputStream outputStream = response.getOutputStream();wb.write(outputStream);outputStream.close();return wb.getBytes();} catch (Exception ex) {ex.printStackTrace();throw new IOException("导出Excel出现严重异常,异常信息:" + ex.getMessage());}}/*** 检查数据配置问题** @throws IOException 抛出数据异常类*/protected void checkConfig() throws IOException {if (heardKey == null || heardList.length == 0) {throw new IOException("列名数组不能为空或者为NULL");}if (fontSize < 0 || rowHeight < 0 || columWidth < 0) {throw new IOException("字体、宽度或者高度不能为负值");}if (StringUtils.isNotEmpty(sheetName)) {throw new IOException("工作表表名不能为NULL");}}
}
如果对您的工作有一点帮助的话,请给个打赏或者点赞