最近做一个项目要实现导出excel功能 项目用的是spring boot 框架 话不多说直接上代码
第1步:pom.xml中添加依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
第2部:导出excel工具类
package com.example.demo.until;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
public class ExportExcelUntil {
/**
*
* @param wb excel稳定
* @param sheetName
* @param headtitle
* @param subLeftTitle
* @param subRightTitle
* @param content
* @param titles
* @param cellWiths
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(HSSFWorkbook wb,String sheetName,String headTitle,String subLeftTitle,String subRightTitle,String[][] content,String[] titles,int[] cellWiths) {
//如果 wb 为空则新建
if(wb==null) {
wb = new HSSFWorkbook();
}
//创建一个工作表 工作表名称为sheetName
HSSFSheet sheet = wb.createSheet(sheetName);
//在第0行中添加表头
HSSFRow row = sheet.createRow(0);
//合并单元格
CellRangeAddress cra = new CellRangeAddress(0,0,0,titles.length-1);
sheet.addMergedRegion(cra);
//设置表头风格 字体
HSSFFont font =wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short)15);
HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setFont(font);
//设置表头风格对齐
headStyle.setAlignment(HorizontalAlignment.CENTER);
//设置表头风格边框
headStyle.setBorderBottom(BorderStyle.THIN);
headStyle.setBorderRight(BorderStyle.THIN);
headStyle.setBorderTop(BorderStyle.THIN);
headStyle.setBorderLeft(BorderStyle.THIN);
for(int i=0;i<titles.length;i++) {
HSSFCell cell = row.createCell(i);
if(i==0) {
cell.setCellValue(headTitle);
}
cell.setCellStyle(headStyle);
sheet.setColumnWidth(i, cellWiths[i]*256);
}
//在第一行添加左标题和右标题
row = sheet.createRow(1);
//左下标题合并单元格
int subcellNum = titles.length/2-1;
CellRangeAddress leftTitlecra = new CellRangeAddress(1,1,0,subcellNum);
sheet.addMergedRegion(leftTitlecra);
//左标题风格
HSSFFont subTiteFont = wb.createFont();
subTiteFont.setFontName("黑体");
subTiteFont.setFontHeightInPoints((short)10);
HSSFCellStyle leftTitleStyle = wb.createCellStyle();
leftTitleStyle.setFont(subTiteFont);
leftTitleStyle.setBorderLeft(BorderStyle.THIN);
leftTitleStyle.setBorderTop(BorderStyle.THIN);
leftTitleStyle.setBorderBottom(BorderStyle.THIN);
for(int i=0;i<titles.length/2;i++) {
HSSFCell cell= row.createCell(i);
cell.setCellStyle(leftTitleStyle);
if(i==0) {
cell.setCellValue(subLeftTitle);
}
}
//右下标题合并单元格
int startcellNum = titles.length/2;
int endcellNum = titles.length-1;
CellRangeAddress rightTtitelcra = new CellRangeAddress(1,1,startcellNum,endcellNum);
sheet.addMergedRegion(rightTtitelcra);
//右下标题风格
HSSFCellStyle rightTitleStytle = wb.createCellStyle();
rightTitleStytle.setFont(subTiteFont);
rightTitleStytle.setBorderTop(BorderStyle.THIN);
rightTitleStytle.setBorderRight(BorderStyle.THIN);
rightTitleStytle.setBorderBottom(BorderStyle.THIN);
for(int i = titles.length/2;i<titles.length;i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(rightTitleStytle);
if(i==titles.length/2) {
cell.setCellValue(subRightTitle);
}
}
//生成表头标题
row = sheet.createRow(2);
HSSFFont titleFont = wb.createFont();
titleFont.setFontName("黑体");
titleFont.setFontHeightInPoints((short)10);
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setFont(titleFont);
titleStyle.setAlignment(HorizontalAlignment.CENTER);
titleStyle.setBorderLeft(BorderStyle.THIN);
titleStyle.setBorderTop(BorderStyle.THIN);
titleStyle.setBorderRight(BorderStyle.THIN);
titleStyle.setBorderBottom(BorderStyle.THIN);
for(int i=0;i<titles.length;i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(titleStyle);
cell.setCellValue(titles[i]);
}
//生成表格主体
int len = content.length;
//设置表格主体风格
HSSFFont bodyFont = wb.createFont();
bodyFont.setFontName("黑体");
bodyFont.setFontHeightInPoints((short)9);
HSSFCellStyle bodyStyle = wb.createCellStyle();
bodyStyle.setFont(bodyFont);
bodyStyle.setAlignment(HorizontalAlignment.CENTER);
bodyStyle.setBorderLeft(BorderStyle.THIN);
bodyStyle.setBorderTop(BorderStyle.THIN);
bodyStyle.setBorderRight(BorderStyle.THIN);
bodyStyle.setBorderBottom(BorderStyle.THIN);
for(int i=0;i<len;i++) {
row = sheet.createRow(i+3);
for(int j=0;j<titles.length;j++) {
HSSFCell cell = row.createCell(j);
cell.setCellStyle(bodyStyle);
cell.setCellValue(content[i][j]);
}
}
return wb;
}
}
导出测试
@Test
public void contextLoads() {
String[] titles = {"姓名","性别","班级","特长"};
int[] cellWiths = {30,30,30,30};
String[][] content = new String[2][titles.length];
content[0][0] = "麦兜";
content[0][1] = "男";
content[0][2] = "0-3班";
content[0][3] = "唱歌、讲冷笑话";
content[1][0] = "阿may";
content[1][1] = "女";
content[1][2] = "0-3班";
content[1][3] = "唱歌、讲冷笑话";
HSSFWorkbook wb =ExportExcelUntil.getHSSFWorkbook(null, "test", "春天花花幼稚园同学录", "校长:光头校长", "老师:阿花", content, titles, cellWiths);
try {
wb.write(new File("D://test/test.xls"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
导出效果