java多sheet页导出Excel
程序员文章站
2022-07-13 12:58:39
...
前言
之前导出一直用的是EasyPoi,但这次有个需求是需要导出多sheet页的一个Excel,在EasyPoi没有找到所以自己用了一些资料加自己整合了一下,先看一下导出样式
导出的Excel里面的格式字体什么请自行百度
正文
代码里面写了详细的注解,请看代码
/**
* @description: 导出演示 使用这个demo只需要吧红色的部分替换成你的数据就好了
* @author: 秉笙
* @time: 2020/3/30 14:28
*/
@Controller
@RequestMapping("dataExport")
@Api(tags = {"人员信息导出【蒋秉笙】"})
public class PersommelController {
@ApiOperation(value = "人员信息导出【蒋秉笙】", notes = "列表导出", httpMethod = "get")
@GetMapping("/personnel")
public void downloadHouseList(HttpServletRequest request, HttpServletResponse response,
@RequestParam("identitycard") String identitycard) {
//你要导出的数据Object
List<PersonnelBasicInformationDTO> basicInformationDTOList = new ArrayList<>();
//另外一个需要导出的object(这里只有一条数据我没有使用List)
PersonnelHealthRecordDTO healthRecordDTO = new PersonnelHealthRecordDTO();
try {
//personnelService是我注解进来的一个Service(这一步就是获取了数据结果集)
basicInformationDTO = personnelService.getBasicInformationDTO();
healthRecordDTO = healthService.getHealthRecordDTO();
//数据
List<String[]> dataset1 = new ArrayList<String[]>();
for (int i = 0; i < basicInformationDTOList.size(); i++) {
String[] arr1 = new String[2];//有几列就写几
//如果数据不为空则赋值(这里就是循环每行的数据)
arr1[0] = basicInformationDTOList.get(i).getClbz0001()==null ? "" : basicInformationDTOList.get(i).getClbz0001().toString();
arr1[1] = basicInformationDTOList.get(i).getClbz0003()==null ? "" : basicInformationDTOList.get(i).getClbz0003().toString();
dataset1.add(arr1);
}
List<String[]> dataset2 = new ArrayList<String[]>();
String[] arr2 = new String[2];
arr2[0] = healthRecordDTO.getCxac0001()==null ? "" : healthRecordDTO.getCxac0001().toString();
arr2[1] = healthRecordDTO.getCxac0008()==null ? "" : healthRecordDTO.getCxac0008().toString();
dataset2.add(arr2);
//为了演示简单点,这个地方就是表头
String[] handers1 = {"姓名","曾用名"};
String[] handers2 = {"姓名","血型"};
//然后需要把你的数据对象放进来
ExcelExp e1 = new ExcelExp("基本信息", handers1, dataset1);
ExcelExp e2 = new ExcelExp("健康档案", handers2, dataset2);
List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
mysheet.add(e1);
mysheet.add(e2);
//fileName是你导出的文件名
String fileName = "人员信息";
//ExcelExportUtil是你设置Excel和下载控制的地方
ExcelExportUtil.exportManySheetExcel(fileName,mysheet,response); //生成sheet
}catch (Exception e){
}
}
}
里面使用的ExcelExp类
/**
* @description:
* @author: 秉笙
* @time: 2020/3/25 17:07
*/
@Data
public class ExcelExp {
private String fileName;// sheet的名称
private String[] handers;// sheet里的标题
private List<String[]> dataset;// sheet里的数据集
public ExcelExp(String fileName, String[] handers, List<String[]> dataset) {
this.fileName = fileName;
this.handers = handers;
this.dataset = dataset;
}
}
设置样式和下载控制的类ExcelExportUtil
/**
* @description:
* @author: 秉笙
* @time: 2020/3/25 17:16
*/
public class ExcelExportUtil {
public static void exportManySheetExcel(String fileName, List<ExcelExp> mysheets, HttpServletResponse response){
HSSFWorkbook wb = new HSSFWorkbook();//创建工作薄
List<ExcelExp> sheets = mysheets;
//表头样式
HSSFCellStyle style = wb.createCellStyle();
style.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直
style.setAlignment(HorizontalAlignment.CENTER);// 水平
//字体样式
HSSFFont fontStyle = wb.createFont();
fontStyle.setFontName("微软雅黑");
fontStyle.setFontHeightInPoints((short)12);
style.setFont(fontStyle);
for(ExcelExp excel: sheets){
//新建一个sheet
HSSFSheet sheet = wb.createSheet(excel.getFileName());//获取该sheet名称
String[] handers = excel.getHanders();//获取sheet的标题名
HSSFRow rowFirst = sheet.createRow(0);//第一个sheet的第一行为标题
//写标题
for(int i=0;i<handers.length;i++){
//获取第一行的每个单元格
HSSFCell cell = rowFirst.createCell(i);
//往单元格里写数据
cell.setCellValue(handers[i]);
cell.setCellStyle(style); //加样式
sheet.setColumnWidth(i, 4000); //设置每列的列宽
}
//写数据集
List<String[]> dataset = excel.getDataset();
for(int i=0;i<dataset.size();i++){
String[] data = dataset.get(i);//获取该对象
//创建数据行
HSSFRow row = sheet.createRow(i+1);
for(int j=0;j<data.length;j++){
//设置对应单元格的值
row.createCell(j).setCellValue(data[j]);
}
}
}
// 下载文件谷歌文件名会乱码,用IE
try {
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "utf-8"));
response.setHeader("Cache-Control", "No-cache");
response.flushBuffer();
wb.write(response.getOutputStream());
wb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}