左图生成的excel,右图是数据库数据
生成Excel所有jar包
org.apache.poi
poi-ooxml
3.17
package com.lemon.pojo;
import java.io.Serializable;
import java.util.List;
/**
* Excel封装类
* @author lemon
* @since 2019/11/1 0001
*/
public class ExcelData implements Serializable {
// 表头
private List titles;
// 数据
private List> rows;
// 页签名称
private String name;
public List getTitles() {
return titles;
}
public void setTitles(List titles) {
this.titles = titles;
}
public List> getRows() {
return rows;
}
public void setRows(List> rows) {
this.rows = rows;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.lemon.utils;
import com.lemon.pojo.ExcelData;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder.BorderSide;
import javax.servlet.http.HttpServletResponse;
import java.awt.Color;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
/**
* Excel工具类
* @author lemon
* @since 2019/11/2 0002
*/
public class ExcelUtils {
public static void exportExcel(HttpServletResponse response, String fileName, ExcelData data) throws Exception {
// 告诉浏览器用什么软件可以打开此文件
response.setHeader("content-Type", "application/vnd.ms-excel");
// 下载文件的默认名称
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName, "utf-8"));
//把内容写入Excel表
exportExcel(data, response.getOutputStream());
}
/**
* 把内容写入Excel表
* @param data 传入要写的内容,此处以一个ExcelData分装类内容为例
* @param out 把输出流怼到要写入的Excel上,然后往里面写数据
* @author lemon
* @since 2019/11/2 0002
*/
public static void exportExcel(ExcelData data, OutputStream out) throws Exception {
/**
使用的是JAVA POI实现的导出Excel表;
POI 提供了对2003版本的Excel的支持 ---- HSSFWorkbook
POI 提供了对2007版本以及更高版本的支持 ---- XSSFWorkbook
*/
//创建Excel工作簿
XSSFWorkbook wb = new XSSFWorkbook();
try {
//设置工作表名称 为空默名认为Sheet1
String sheetName = data.getName();
if (null == sheetName) {
sheetName = "Sheet1";
}
//创建Excel工作表
XSSFSheet sheet = wb.createSheet(sheetName);
//参数: 工作簿、工作表、数据
writeExcel(wb, sheet, data);
wb.write(out);
} catch(Exception e){
e.printStackTrace();
}finally{
//此处需要关闭 wb 变量
out.close();
}
}
private static void writeExcel(XSSFWorkbook wb, Sheet sheet, ExcelData data) {
int rowIndex = 0;
//写标题内容
rowIndex = writeTitlesToExcel(wb, sheet, data.getTitles());
//填充和颜色设置
writeRowsToExcel(wb, sheet, data.getRows(), rowIndex);
//自动根据长度调整单元格长度
autoSizeColumns(sheet, data.getTitles().size() + 1);
}
//写标题内容
private static int writeTitlesToExcel(XSSFWorkbook wb, Sheet sheet, List titles) {
//行数
int rowIndex = 0;
//列数
int colIndex = 0;
//字体类
Font titleFont = wb.createFont();
titleFont.setFontName("simsun");
//titleFont.setBoldweight(Short.MAX_VALUE);
// titleFont.setFontHeightInPoints((short) 14);
titleFont.setColor(IndexedColors.BLACK.index);
//创建单元格样式
XSSFCellStyle titleStyle = wb.createCellStyle();
//titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
//自定义颜色
titleStyle.setFillForegroundColor(new XSSFColor(new Color(182, 184, 192)));
//titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
//设置字体样式
titleStyle.setFont(titleFont);
//设置边框
setBorder(titleStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0)));
//创建Excel工作表的行
Row titleRow = sheet.createRow(rowIndex);
// titleRow.setHeightInPoints(25);
colIndex = 0;
for (String field : titles) {
//创建Excel工作表指定行的单元格
Cell cell = titleRow.createCell(colIndex);
//单元格内容
cell.setCellValue(field);
//自定义颜色
cell.setCellStyle(titleStyle);
colIndex++;
}
rowIndex++;
return rowIndex;
}
//填充和颜色设置
private static int writeRowsToExcel(XSSFWorkbook wb, Sheet sheet, List> rows, int rowIndex) {
int colIndex = 0;
Font dataFont = wb.createFont();
dataFont.setFontName("simsun");
// dataFont.setFontHeightInPoints((short) 14);
dataFont.setColor(IndexedColors.BLACK.index);
XSSFCellStyle dataStyle = wb.createCellStyle();
//dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
//dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
dataStyle.setFont(dataFont);
setBorder(dataStyle, BorderStyle.THIN, new XSSFColor(new Color(0, 0, 0)));
for (List
package com.lemon.service;
import com.lemon.dao.ExcelDao;
import com.lemon.pojo.ExcelData;
import com.lemon.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class ExcelService {
/**
* 网评结果中的导出
* @author lemon
* @since 2019/11/1 0001
*/
public ExcelData getOutputExcelProjectData() {
ExcelDao excelDao = new ExcelDao();
//Excel实体类
ExcelData excelData = new ExcelData();
//找到表中需要添加的数据
List list = excelDao.getUserList();
//设置sheet名称
excelData.setName("用户信息");
//设置表头字段
List titles = new ArrayList();
titles.add("Id");
titles.add("账号");
titles.add("密码");
excelData.setTitles(titles);
//把expertUserList转换为List> rows
List> rows = new ArrayList>();
//加入数据
for (User user : list) {
List
可以整合mybatis、hibernate,进行数据库查询
public List getUserList(){
String sql = "select * from user";
........
}
package com.lemon.controller;
import com.lemon.service.ExcelService;
import com.lemon.utils.ExcelUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/excel")
public class ExcelController {
@Autowired
private ExcelService excelService;
/**
* 去打印界面
* @author: lemon
* @since: 2019/11/1 0001
*/
@RequestMapping("/")
public String toExcel(){
return "views/makeExcel";
}
/**
* 导出excel表
* @author lemon
* @since 2019/11/1 0001
*/
@RequestMapping("/makeExcel")
public void makeExcel(HttpServletResponse response) throws Exception {
//打印Excel表
ExcelUtils.exportExcel(response, "文件名.xlsx", excelService.getOutputExcelProjectData());
}
}
打印界面:
生成Excel表
http://localhost:8080/excel