package com.example.demo1.controller;
import com.example.demo1.modal.DzBmdjT;
import com.example.demo1.modal.DzKaoChangT;
import com.example.demo1.service.DzbmdjService;
import com.example.demo1.service.DzkaochangService;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* 导出excel控制层
*/
@Controller
public class ExportController {
//注入服务层
@Resource
private DzbmdjService dzBmdjService;
@Resource
private DzkaochangService dzKaoChangService;
/**
* 考生信息导出逻辑
*
* @return
* @throws IOException
*/
@RequestMapping(value = "ksxxExport", method = RequestMethod.GET)
public ResponseEntity<byte[]> ksxxExport() throws IOException {
//创建工作薄
XSSFWorkbook wb = new XSSFWorkbook();
//分页名称
XSSFSheet sheet = wb.createSheet("结果");
//生成一种样式
XSSFCellStyle style = wb.createCellStyle();
//设值样式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
//生成一种字体
XSSFFont font = wb.createFont();
//设值字体
font.setFontName("微软雅黑");
//设值字体大小
font.setFontHeightInPoints((short) 12);
//字体加粗
font.setBold(true);
//在样式中引用这种字体
style.setFont(font);
//
//生成并设值另一个样式
XSSFCellStyle style2 = wb.createCellStyle();
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setVerticalAlignment(VerticalAlignment.CENTER);
//生成另一种字体
XSSFFont font2 = wb.createFont();
//设值字体
font2.setFontName("微软雅黑");
//设值字体大小
font2.setFontHeightInPoints((short) 12);
//在样式2中引用这种字体
style2.setFont(font2);
//设值列宽
sheet.setColumnWidth(0, 25 * 256);//身份证号列宽
sheet.setColumnWidth(1, 22 * 256);//考生号列宽
sheet.setColumnWidth(2, 11 * 256);//姓名列宽
sheet.setColumnWidth(3, 9 * 256);//性别列宽
sheet.setColumnWidth(4, 18 * 256);//政治面貌列宽
sheet.setColumnWidth(5, 28 * 256);//毕业高中列宽
sheet.setColumnWidth(6, 18 * 256);//联系电话列宽
String[] excelHeaderArr = {"身份证号码", "考生号", "姓名", "性别", "政治面貌", "毕业高中", "联系电话"};
//生成表格第一行 表头
XSSFRow row = sheet.createRow(0);
XSSFCell cell = null;
for (int i = 0; i < excelHeaderArr.length; i++) {
cell = row.createCell(i);
//设值数据
cell.setCellValue(excelHeaderArr[i]);
cell.setCellStyle(style);
}
//报名登记信息列表
DzBmdjT dzBmdjT = new DzBmdjT();
List<DzBmdjT> bmdjList = dzBmdjService.getBmdjList(dzBmdjT);
//循环报名登记列表并创建行与列
for (int i = 0; i < bmdjList.size(); i++) {
XSSFRow row1 = sheet.createRow(i + 1);
cell = row1.createCell(0);
cell.setCellValue(bmdjList.get(i).getSfzh());
cell.setCellStyle(style2);
cell = row1.createCell(1);
cell.setCellValue(String.valueOf(bmdjList.get(i).getKsh()));
cell.setCellStyle(style2);
cell = row1.createCell(2);
cell.setCellValue(bmdjList.get(i).getXm());
cell.setCellStyle(style2);
cell = row1.createCell(3);
cell.setCellValue(bmdjList.get(i).getXb());
cell.setCellStyle(style2);
cell = row1.createCell(4);
cell.setCellValue(bmdjList.get(i).getZzmm());
cell.setCellStyle(style2);
cell = row1.createCell(5);
cell.setCellValue(bmdjList.get(i).getBygz());
cell.setCellStyle(style2);
cell = row1.createCell(6);
cell.setCellValue(bmdjList.get(i).getLxdh());
cell.setCellStyle(style2);
}
//创建输出流对象
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
outputStream.close();
}
//下载文件
HttpHeaders httpHeaders = new HttpHeaders();
String fileName = new String("考生信息表.xlsx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
httpHeaders.setContentDispositionFormData("attachment", fileName);
httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> filebyte = new ResponseEntity<byte[]>(outputStream.toByteArray(), httpHeaders, HttpStatus.CREATED);
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
outputStream.close();
}
return filebyte;
}
/**
* 考场信息导出
* @return
* @throws IOException
*/
@RequestMapping(value = "kcExport", method = RequestMethod.GET)
public ResponseEntity<byte[]> kcExport() throws IOException {
//创建工作薄
XSSFWorkbook wb = new XSSFWorkbook();
//分页名称
XSSFSheet sheet = wb.createSheet("结果");
//生成一种样式
XSSFCellStyle style = wb.createCellStyle();
//设值样式
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
//生成一种字体
XSSFFont font = wb.createFont();
//设值字体
font.setFontName("微软雅黑");
//设值字体大小
font.setFontHeightInPoints((short) 12);
//字体加粗
font.setBold(true);
//在样式中引用这种字体
style.setFont(font);
//生成并设值另一个样式
XSSFCellStyle style2 = wb.createCellStyle();
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setVerticalAlignment(VerticalAlignment.CENTER);
//生成另一种字体
XSSFFont font2 = wb.createFont();
//设值字体
font2.setFontName("微软雅黑");
//设值字体大小
font2.setFontHeightInPoints((short) 12);
//在样式2中引用这种字体
style2.setFont(font2);
//设值列宽
sheet.setColumnWidth(0, 25 * 256);//考场编号列宽
sheet.setColumnWidth(1, 22 * 256);//考场地点列宽
sheet.setColumnWidth(2, 11 * 256);//容纳人数列宽
String[] excelHeaderArr = {"考场编号", "考场地点", "容纳人数"};
//生成表格第一行 表头
XSSFRow row = sheet.createRow(0);
XSSFCell cell = null;
for (int i = 0; i < excelHeaderArr.length; i++) {
cell = row.createCell(i);
//设值数据
cell.setCellValue(excelHeaderArr[i]);
cell.setCellStyle(style);
}
//考场信息列表
List<DzKaoChangT> kaochangT = dzKaoChangService.selectkaochang();
for (int i = 0; i < kaochangT.size(); i++) {
XSSFRow row1 = sheet.createRow(i + 1);
cell = row1.createCell(0);
cell.setCellValue(kaochangT.get(i).getKcbh());
cell.setCellStyle(style2);
cell = row1.createCell(1);
cell.setCellValue(kaochangT.get(i).getKcdd());
cell.setCellStyle(style2);
cell = row1.createCell(2);
cell.setCellValue(String.valueOf(kaochangT.get(i).getRnrs()));
cell.setCellStyle(style2);
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
wb.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
HttpHeaders httpHeaders = new HttpHeaders();
String fileName = new String("考场信息表.xlsx".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
httpHeaders.setContentDispositionFormData("attachment", fileName);
httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ResponseEntity<byte[]> filebyte = new ResponseEntity<byte[]>(outputStream.toByteArray(), httpHeaders, HttpStatus.CREATED);
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return filebyte;
}
}
推荐阅读: