今天在这里给大家分享一个自己写的excel导出工具类,详细的介绍都写在带啊吗的注释里面了,废话不多说直接上代码:
/**
* @version 1.0
* @Author: LJP
* @Description: excel导出工具类
*/
@Slf4j
public class ExcelUtils {
/**
* @Description: 导出excel (默认xls格式)
* @param fileName 导出时默认的文件名
* @param titleList 标题行集合
* @param dataList 数据集合
* @return ResponseEntity<byte>
* @Author:LJP
* @Date: 2021/3/30 10:10
* @version 1.0
*/
public static ResponseEntity<byte[]> export(String fileName,String[] titleList, LinkedList<LinkedList<String>> dataList) {
//1.创建一个excel文档
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
//2.创建文档摘要
hssfWorkbook.createInformationProperties();
//3.获取并配置文档摘要信息
DocumentSummaryInformation docInfo = hssfWorkbook.getDocumentSummaryInformation();
//文档类别
docInfo.setCategory(fileName);
//文档管理员
docInfo.setManager("ljp");
//文档所属公司
docInfo.setCompany("liantu");
//文档版本
docInfo.setApplicationVersion(1);
//4.获取文档摘要信息
SummaryInformation summaryInformation = hssfWorkbook.getSummaryInformation();
//文档标题
summaryInformation.setAuthor("aqi");
//文档创建时间
summaryInformation.setCreateDateTime(new Date());
//文档备注
summaryInformation.setComments("文档备注");
//5.创建样式
//创建标题行的样式
HSSFCellStyle style = hssfWorkbook.createCellStyle();
//设置单元格背景颜色
style.setFillForegroundColor(HSSFColor.WHITE.index);
//设置图案填充的样式
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//设置单元格边框格式
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
//创建一个居中格式
style.setAlignment(HorizontalAlignment.CENTER);
//生成一个字体
HSSFFont font = hssfWorkbook.createFont();
//设置字体颜色
font.setColor(HSSFColor.BLACK.index);
//字体加粗
font.setBold(false);
//把字体应用到当前样式
style.setFont(font);
//sheet名称
HSSFSheet sheet = hssfWorkbook.createSheet("预警记录");
//6.创建标题行并设置样式
HSSFRow r0 = sheet.createRow(0);
for (int i = 0; i < titleList.length; i++) {
HSSFCell hssfCell = r0.createCell(i);
hssfCell.setCellStyle(style);
hssfCell.setCellValue(titleList[i]);
}
//7.写入数据
for (int i = 0; i < dataList.size(); i++) {
HSSFRow row = sheet.createRow(i+1);
LinkedList<String> linkedList = dataList.get(i);
for (int j = 0; j < linkedList.size(); j++) {
String content = linkedList.get(j);
row.createCell(j).setCellValue(content);
}
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
HttpHeaders headers = new HttpHeaders();
try {
//文件名
String fileNamePlus = fileName + ".xls";
//将数据表这几个中文的字转码 防止导出后乱码
headers.setContentDispositionFormData("attachment",
new String(fileNamePlus.getBytes("UTF-8"),"ISO-8859-1"));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
hssfWorkbook.write(stream);
} catch (IOException e) {
log.error("",e);
}
return new ResponseEntity<byte[]>(stream.toByteArray(),headers, HttpStatus.CREATED);
}
}
详细的poi学习请参考: https://www.cnblogs.com/fqfanqi/p/6172223.html
POI HSSFColor 颜色索引对照表: http://www.voidcn.com/article/p-nsqlkmby-hh.html