继上一篇导出pdf,这篇导出excel。

1、导入依赖

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>

2、代码

import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.util.CellRangeAddress;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Title: ExcelController.java
* @Description: TODO
* @author zhangjunhong
* @date 2018年11月9日
*/
@RestController
public class ExcelController {
@RequestMapping(“/test/excel”)
public String createExcel(HttpServletResponse response ) throws Exception{
//创建文档
HSSFWorkbook wb=new HSSFWorkbook();
//创建sheet
HSSFSheet sheet=wb.createSheet(“用户表”);
//创建行在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
HSSFRow row1=sheet.createRow(0);
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
HSSFCell cell=row1.createCell(0);
cell.setCellValue(“呵呵呵呵呵呵,闲闲闲,水群水群”);
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));

HSSFRow row2=sheet.createRow(1);
row2.createCell(0).setCellValue(“姓名”);
row2.createCell(1).setCellValue(“班级”);

HSSFRow row3=sheet.createRow(2);
row3.createCell(0).setCellValue(“张三”);
row3.createCell(1).setCellValue(“1121”);
OutputStream out=response.getOutputStream();
response.reset();
String filename=”用户表.xls”;
response.setHeader(“Content-disposition”, “attachment; filename=”+URLEncoder.encode(filename, “UTF-8”));
response.setContentType(“application/msexcel”);
wb.write(out);

out.close();
return null;
}}

3、结果

 

关于导出excel的工具类:网上有很多,但是我都没找到适合自己业务需要的,我的需要在一个excel文档里放多个sheet,

然后就自己参看网上的整理了一个,但其实也不是很好用。。。。

1、工具类,这个工具类是生成一个sheet,利用的是泛型和反射实现。

public class ExportExcel<T> {
/**
* @Title: createSheet
* @Description: 生成一个sheet
* @param sheet
* @param headersName :excel要显示的表头
* @param headersId : 对应表头,要显示对象的属性(利用反射做得)
* @param list 数据
* @return: void
*/
public void createSheet(HSSFSheet sheet, List<String> headersName, List<String> headersId, List<T> list) {
// 表头———————————
Map<Integer, String> headersNameMap = new HashMap<>();
int key = 0;
for (int i = 0; i < headersName.size(); i++) {
if (!headersName.get(i).equals(null)) {
headersNameMap.put(key, headersName.get(i));
key++;
}
}
// 显示的字段———————————–
Map<Integer, String> titleFieldMap = new HashMap<>();
int value = 0;
for (int i = 0; i < headersId.size(); i++) {
if (!headersId.get(i).equals(null)) {
titleFieldMap.put(value, headersId.get(i));
value++;
}
}

HSSFRow row = sheet.createRow(0);
HSSFCell cell;

Collection c = headersNameMap.values();
Iterator<String> iterator = c.iterator();
// 生成表头———————————————
int size = 0;
while (iterator.hasNext()) {
cell = row.createCell(size);
cell.setCellValue(iterator.next().toString());
size++;
}
// 记录———————————————
Collection c1 = titleFieldMap.values();
Iterator<T> labIt = list.iterator(); // 记录数据
int i = 1;
while (labIt.hasNext()) {
T l = labIt.next();
row = sheet.createRow(i);
i++;
// 根据反射,获得实体所有的属性
Field[] fields = l.getClass().getDeclaredFields();
int j = 0;
for (Field field : fields) {
String fieldName = field.getName();// 属性名
Iterator<String> column = c1.iterator();// 属性,对应一条记录的字段
while (column.hasNext()) {
if (column.next().equals(fieldName)) {
String getMethodName = “get” + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);// 取得属性的get方法
Class tClass = l.getClass();
try {
// 通过JavaBean对象拿到该属性的get方法,从而进行操控
Method getMethod = tClass.getDeclaredMethod(getMethodName, new Class[] {});
// 操控该对象属性的get方法,从而拿到属性值
Object val = getMethod.invoke(l, new Object[] {});
if (val != null) {
if(val instanceof Date){
SimpleDateFormat format=new SimpleDateFormat(DateUtil.DEFAULT_DATETIME_FORMAT);
row.createCell(j).setCellValue(format.format(val));
} else if(val instanceof Integer){
row.createCell(j).setCellValue(Integer.parseInt(String.valueOf(val)));
} else if(val instanceof Long){
row.createCell(j).setCellValue(Long.parseLong(String.valueOf(val)));
} else {
row.createCell(j).setCellValue(String.valueOf(val));
}
}else{
row.createCell(j).setCellValue(“”);
}
j++;
} catch (Exception e) {
e.printStackTrace();
}
}
}

}
}
// 设置自动调整列宽,必须在填值之后
for (int j = 0; j < headersName.size(); j++) {
sheet.autoSizeColumn(j);
}
// 中文自动调整列宽
this.setSizeColumn(sheet, headersName.size());
}

 

 

2、导出excel工具类,使用JSONObject,

/**
* @Title: createSheet1
* @Description: 生成一个sheet
* @param sheet
* @param headersName excel要显示的表头
* @param headersId : 对应表头,要显示对象的属性
* @param list 数据
* @return: void
*/
public void createSheet1(HSSFSheet sheet, List<String> headersName, List<String> headersId, List<JSONObject> list){
HSSFRow row1=sheet.createRow(0);
//表头———————————————————————–
for(int i=0;i<headersName.size();i++){
row1.createCell(i).setCellValue(headersName.get(i));
}
//记录———————————————————————–
for(int i=0;i<list.size();i++){
HSSFRow row=sheet.createRow(i+1);
//取出一条记录的JSONObject
JSONObject jsonObj=list.get(i);
for(int j=0;j<headersId.size();j++){
//根据要显示的字段属性在json对象取得对应的值
Object val=jsonObj.get(headersId.get(j));
if (val != null) {
//格式处理
if(val instanceof Date){
SimpleDateFormat format=new SimpleDateFormat(DateUtil.DEFAULT_DATETIME_FORMAT);
row.createCell(j).setCellValue(format.format(val));
} else if(val instanceof Integer){
row.createCell(j).setCellValue(Integer.parseInt(String.valueOf(val)));
} else if(val instanceof Long){
//判断是否是时间戳(因将对象装换为json对象 会将时间格式装换为时间戳,这里判断是否是13位来判断,如果是做时间格式处理),这样处理室友问题的但是暂时还没找到更好的//办法,好希望有人能指点啊
if(getCount(Long.parseLong(String.valueOf(val))) ==13){
SimpleDateFormat format=new SimpleDateFormat(DateUtil.DEFAULT_DATETIME_FORMAT);
row.createCell(j).setCellValue(format.format(val));
}else{
row.createCell(j).setCellValue(Long.parseLong(String.valueOf(val)));
}
} else {
row.createCell(j).setCellValue(String.valueOf(val));
}
}else{
row.createCell(j).setCellValue(“”);
}
}
}
}

//用到的方法———————————————————————————————————————-

//取num的位数
public static int getCount(Long num){
if(num <= 0){
return 0;
}
int count=0;
while(num > 0){
num=num/10;
count++;
}
return count;
}

 

// 自适应宽度(中文支持)
private void setSizeColumn(HSSFSheet sheet, int size) {
for (int columnNum = 0; columnNum < size; columnNum++) {
int columnWidth = sheet.getColumnWidth(columnNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
HSSFRow currentRow;
// 当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}

if (currentRow.getCell(columnNum) != null) {
HSSFCell currentCell = currentRow.getCell(columnNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
sheet.setColumnWidth(columnNum, columnWidth * 256);
}
}

 2.1、使用第一种工具类,

// 导出excel
public void createExcel(OutputStream os, Map<String, Object> data) throws Exception {
// 数据准备
List<WidespreadDelay> wdDelays = (List<WidespreadDelay>) data.get(“wdDelays”);

// 创建文档
HSSFWorkbook wb = new HSSFWorkbook();
// 创建sheet
HSSFSheet sheet1 = wb.createSheet(“大面积延误信息”);
List<String> headersName1 = Arrays.asList(“ID”, “开始时间”, “结束时间”, “状态”, “创建时间”, “用户ID”);
List<String> headersId1 = Arrays.asList(“id”, “beginTime”, “endTime”, “status”, “createTime”, “userId”);

//调用工具类生成sheet
ExportExcel<WidespreadDelay> e = new ExportExcel<>();
e.createSheet(sheet1, headersName1, headersId1, wdDelays);

wb.write(os);
}

 

2.2 使用第二种工具类

// 导出excel
public void createExcel(OutputStream os, Map<String, Object> data) throws Exception {
// 数据准备
List<WidespreadDelay> wdDelays = (List<WidespreadDelay>) data.get(“wdDelays”);

// 创建文档
HSSFWorkbook wb = new HSSFWorkbook();

// 创建sheet
HSSFSheet sheet1 = wb.createSheet(“大面积延误信息”);
List<String> headersName1 = Arrays.asList(“ID”, “开始时间”, “结束时间”, “状态”, “创建时间”, “用户ID”);
List<String> headersId1 = Arrays.asList(“id”, “beginTime”, “endTime”, “status”, “createTime”, “userId”);

//需要将对象装换为JSONObject
List<JSONObject> jsonList=new ArrayList<>(wdDelays.size());
for(WidespreadDelay d:wdDelays){
JSONObject o=JSONObject.parseObject(JSON.toJSONString(d));
jsonList.add(o);
}

ExportExcel e = new ExportExcel();
e.createSheet1(sheet1, headersName1, headersId1, jsonList);

wb.write(os);
}

————————————————————–

ps:这个方法是昨天下午下班时一位同事告诉我的思路,

———————————————————————————–一条成熟的分割线—————————————————————————————————-

贴我的导出excel和pdf的代码:

/** 导出接口 ,ids:id。 type:导出类型,默认导出pdf */
@RequestMapping(“/Flight/delay/export”)
public ResponseMessage exportWD(HttpServletResponse response, String[] ids, String type) throws Exception {
if (CollectionUtil.isEmpty(ids)) {
return toReturnException();
}
OutputStream os = null;
try {
//根据id查询需要导出的数据,如果为空,返回异常
Map<String, Object> data = flightWDHistoricRecordService.findAll(ids);
List<WidespreadDelay> wdDelays = (List<WidespreadDelay>) data.get(“wdDelays”);
if (CollectionUtil.isEmpty(wdDelays)) {
return toReturnException();
}
//导出类型,xls表示导出excel,否则导出pdf
if (StringUtil.isNotEmpty(type) && “xls”.equals(type)) {
String filename = “大面积延误历史记录详情.xls”;
// 指定解析器
response.setHeader(“Content-disposition”,
“attachment; filename=” + URLEncoder.encode(filename, “UTF-8”));
response.setContentType(“application/msexcel”);
os = new BufferedOutputStream(response.getOutputStream());
createExcel(os, data);
} else {
// 指定解析器
System.setProperty(“javax.xml.parsers.DocumentBuilderFactory”,
“com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl”);
String filename = “大面积延误历史记录详情.pdf”;
response.setContentType(“application/pdf”);
response.setHeader(“Content-Disposition”,
“attachment;fileName=” + URLEncoder.encode(filename, “UTF-8”));
os = new BufferedOutputStream(response.getOutputStream());
createPdf(os, data);
}
os.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
os.close();
}
return null;
}

// 导出pdf
public void createPdf(OutputStream os, Map<String, Object> data) throws Exception {
// 数据准备
List<WidespreadDelay> wdDelays = (List<WidespreadDelay>) data.get(“wdDelays”);
Map<String, List<WdBoard>> wdBoardMap = (Map<String, List<WdBoard>>) data.get(“wdBoardMap”);
Map<String, List<WdReducebatch>> reduceMap = (Map<String, List<WdReducebatch>>) data.get(“reduceMap”);
Map<String, List<WdReducebatchAirline>> airlinesMap = (Map<String, List<WdReducebatchAirline>>) data
.get(“airlinesMap”);
Map<String, List<WdReducebatchAirlineFlight>> flightsMap = (Map<String, List<WdReducebatchAirlineFlight>>) data
.get(“flightsMap”);
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, os);
// 页面大小
Rectangle rectangle = new Rectangle(PageSize.A4);
// 页面背景颜色
rectangle.setBackgroundColor(BaseColor.WHITE);
document.setPageSize(rectangle);
// 页边距 左,右,上,下
document.setMargins(20, 20, 20, 20);
document.open();
// 显示中文
// BaseFont bf = BaseFont.createFont(“STSong-Light”,
// “UniGB-UCS2-H”,BaseFont.NOT_EMBEDDED);
// 微软雅黑 –资源文件中
BaseFont bf = BaseFont.createFont(“/MSYH.TTF”, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
// 标题—————————————————————-
Font font = new Font(bf, 14, Font.BOLD, BaseColor.BLACK);
Paragraph title = new Paragraph(“大面积延误历史记录详情”, font);
// 居中
title.setAlignment(Element.ALIGN_CENTER);
document.add(title);
// 副标题—————————————————————-
Font font2 = new Font(bf, 6, Font.NORMAL, BaseColor.BLACK);
List<String> list = new ArrayList<>();
for (WidespreadDelay w : wdDelays) {
list.add(w.getId());
}
int num = 1;
for (WidespreadDelay wdealy : wdDelays) {
if (num > 1) {
document.newPage();
}
num++;
String start = “开始:” + DateUtil.format(wdealy.getBeginTime(), DateUtil.DEFAULT_DATETIME_FORMAT) + ” | “;
String end = “结束:” + DateUtil.format(wdealy.getEndTime(), DateUtil.DEFAULT_DATETIME_FORMAT) + ” | “;
//计算两个时间相差的时间
Integer diff = FilghtRuleTools.getDiffDateSeoncds(wdealy.getBeginTime(), wdealy.getEndTime());
int hour = 0;
int minutes = 0;
int seconds = 0;
if (diff != null) {
hour = (diff / 60) / 60;
minutes = (diff / 60) % 60;
seconds = ((diff / 60) / 60) % 60;
}
String chang = “时长:” + hour + “小时” + minutes + “分钟” + seconds + “秒”;
Paragraph title2 = new Paragraph(start + end + chang, font2);
title2.setSpacingAfter(15);
title2.setSpacingBefore(15);
title2.setAlignment(Element.ALIGN_CENTER);
document.add(title2);

// 表格1—————————————————————————————————————-
float[] tableNums = { 0.04f, 0.1f, 0.12f, 0.12f, 0.12f, 0.12f, 0.12f, 0.12f, 0.14f };
// 表头—————————-
String[] table1Headers = { “序号”, “动态时段”, “关舱门(实际/计划)”, “登机(实际/计划)”, “未登机(实际/计划)”, “预计流量(开始/结束)”, “本小时计划起飞”,
“本小时实际起飞”, “航班积压量(开始/结束)” };
PdfPTable table1 = getPdfTableHeader(tableNums,table1Headers,bf,14);
// 根据查大面积延误看板的记录———————————–
List<WdHistoricWdBoardVo> wds = getWdBoardPer(wdBoardMap.get(wdealy.getId()));
String dateformat = “HH:mm”;
// 表格字体
Font font4 = new Font(bf, 6, Font.NORMAL, BaseColor.BLACK);
if (CollectionUtil.isNotEmpty(wds)) {
for (int i = 1; i <= wds.size(); i++) {
WdHistoricWdBoardVo wd = wds.get(i – 1);
// 序号
Paragraph p1 = new Paragraph(i + “”, font4);
// p1.setAlignment(Element.ALIGN_CENTER);
table1.addCell(p1);
// 动态时段
p1 = new Paragraph(wd.getSomeTime(), font4);
table1.addCell(p1);
// 关舱门
p1 = new Paragraph(
wd.getCloseDoorPer() + “% 【” + wd.getCloseDoorUsed() + “/” + wd.getCloseDoorTotal() + “】”,
font4);
table1.addCell(p1);
// 登机
p1 = new Paragraph(
wd.getBoardingUsedPer() + “% 【” + wd.getBoardingUsed() + “/” + wd.getBoardingTotal() + “】”,
font4);
table1.addCell(p1);
// 未登机
p1 = new Paragraph(wd.getUnboardingUsedPer() + “% 【” + wd.getUnboardingUsed() + “/”
+ wd.getBoardingTotal() + “】”, font4);
table1.addCell(p1);
// 预计流量
p1 = new Paragraph(wd.getEstimateFloat() + “”, font4);
table1.addCell(p1);
// 本小时计划起飞
p1 = new Paragraph(wd.getDeparturePlan() + “”, font4);
table1.addCell(p1);
// 本小时实际起飞
p1 = new Paragraph(wd.getDepartureActual() + “”, font4);
table1.addCell(p1);
// 航班积压量
p1 = new Paragraph(wd.getBackFlight() + “”, font4);
table1.addCell(p1);
}
document.add(table1);
}
// 表格2———————————————————————————
float[] tableNums2 = { 0.04f, 0.08f, 0.11f, 0.11f, 0.11f, 0.11f, 0.11f, 0.11f, 0.11f, 0.11f };
// 表头—————————-
String[] table2Headers = { “轮次”, “总调减”, “中国航空(CA)”, “四川航空(3U)”, “东方航空(MU)”, “南方航空(CZ)”, “成都航空(EU)”,
“西藏航空(TV)”, “深圳航空(ZH)”, “祥鹏航空(8L)” };
PdfPTable table2 = getPdfTableHeader(tableNums2,table2Headers,bf,16);
table2.setSpacingBefore(15);
// 1\根据大面积延误id查询调减轮次–
List<WdReducebatch> reducebatchs = reduceMap.get(wdealy.getId());
if (CollectionUtil.isNotEmpty(reducebatchs)) {
reducebatchs.sort((o1, o2) -> o1.getReduceplanNo().compareTo(o2.getReduceplanNo()));
for (int i = 0; i < reducebatchs.size(); i++) {
// 一轮,根据轮次id查找航空公司的调减数据
List<WdReducebatchAirline> airline = null;
if (airlinesMap.containsKey(reducebatchs.get(i).getId())) {
airline = airlinesMap.get(reducebatchs.get(i).getId());
}
if (CollectionUtil.isNotEmpty(airline)) {
// 排序-航空公司
List<WdReducebatchAirline> airlines = sortByAirline(airline);
Integer max = getMaxReduceFlight(airline);
// 轮次
Paragraph p = new Paragraph(reducebatchs.get(i).getReduceplanNo() + “”, font4);
PdfPCell cell1 = new PdfPCell(p);
cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell1.setRowspan(max);
table2.addCell(cell1);
// 总调减
p = new Paragraph(
reducebatchs.get(i).getAntualReduce() + “/” + reducebatchs.get(i).getPlanReduce(),
font4);
cell1 = new PdfPCell(p);
cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
cell1.setUseAscender(true);
cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell1.setRowspan(max);
table2.addCell(cell1);

List<String> searchFlights = new ArrayList<>();
Map<String, String> airlineCode = new HashMap<>();
// 调减信息
for (WdReducebatchAirline line : airlines) {
// 用于查询
searchFlights.add(line.getId());
airlineCode.put(line.getId(), line.getAirlineIcao());

p = new Paragraph(line.getReduceActure() + “/” + line.getReducePlan(), font4);
table2.addCell(p);
}
// 批量查询 航空公司的调减航班,根据航空公司的的id查询,并分组
if (max > 1 && CollectionUtil.isNotEmpty(flightsMap)) {
List<List<WdReducebatchAirlineFlight>> flightsList = sortByAirline(flightsMap, airlineCode);
// 调减的航班信息
for (int j = 0; j < max – 1; j++) {
for (int k = 0; k < flightsList.size(); k++) {
List<WdReducebatchAirlineFlight> flist = flightsList.get(k);
if (CollectionUtil.isNotEmpty(flist) && flist.size() > j && flist.get(j) != null) {
Paragraph p2 = new Paragraph(
flist.get(j).getFlightNo() + “/”
+ DateUtil.format(flist.get(j).getCreateTime(), dateformat),
font4);
table2.addCell(p2);
} else {
table2.addCell(“”);
}
}
}
}
}
}
document.add(table2);
}
}
document.close();
}

// 导出excel
public void createExcel(OutputStream os, Map<String, Object> data) throws Exception {
// 数据准备
List<WidespreadDelay> wdDelays = (List<WidespreadDelay>) data.get(“wdDelays”);
Map<String, List<WdBoard>> wdBoardMap = (Map<String, List<WdBoard>>) data.get(“wdBoardMap”);
Map<String, List<WdReducebatch>> reduceMap = (Map<String, List<WdReducebatch>>) data.get(“reduceMap”);
Map<String, List<WdReducebatchAirline>> airlinesMap = (Map<String, List<WdReducebatchAirline>>) data
.get(“airlinesMap”);
Map<String, List<WdReducebatchAirlineFlight>> flightsMap = (Map<String, List<WdReducebatchAirlineFlight>>) data
.get(“flightsMap”);

// 创建文档
HSSFWorkbook wb = new HSSFWorkbook();
// 创建sheet
HSSFSheet sheet1 = wb.createSheet(“大面积延误信息”);
List<String> headersName1 = Arrays.asList(“ID”, “开始时间”, “结束时间”, “状态”, “创建时间”, “用户ID”);
List<String> headersId1 = Arrays.asList(“id”, “beginTime”, “endTime”, “status”, “createTime”, “userId”);
ExportExcel<WidespreadDelay> e = new ExportExcel<>();
e.createSheet(sheet1, headersName1, headersId1, wdDelays);

// ————大面积延误看板————–
HSSFSheet sheet2 = wb.createSheet(“大面积看板”);
List<String> headersName2 = Arrays.asList(“ID”, “延误信息ID”, “开始时间”, “结束时间”, “计划起飞”, “实际起飞”, “预计流量”, “航班积压量”,
“旅客积压量”, “关舱门总数”, “已关舱门”, “登机总数”, “已登机”, “未登机”);
List<String> headersId2 = Arrays.asList(“id”, “widespreadDelayId”, “beginTime”, “endTime”, “departurePlan”,
“departureActual”, “estimateFloat”, “backFlight”, “passager”, “closeDoorTotal”, “closeDoorUsed”,
“boardingTotal”, “boardingUsed”, “unboardingUsed”);
List<WdBoard> listWD = new ArrayList<>();
for (Map.Entry<String, List<WdBoard>> item : wdBoardMap.entrySet()) {
listWD.addAll(item.getValue());
}
ExportExcel<WdBoard> e2 = new ExportExcel<>();
e2.createSheet(sheet2, headersName2, headersId2, listWD);

// ————调减信息————–
HSSFSheet sheet3 = wb.createSheet(“调减轮次”);
List<String> headersName3 = Arrays.asList(“ID”, “延误信息ID”, “开始时间”, “结束时间”, “创建时间”, “轮次编号”, “本轮总实际调减”, “本轮总计划调减”);
List<String> headersId3 = Arrays.asList(“id”, “widespreadDelayId”, “beginTime”, “endTime”, “createTime”,
“reduceplanNo”, “antualReduce”, “planReduce”);
List<WdReducebatch> listReduce = new ArrayList<>();
for (Map.Entry<String, List<WdReducebatch>> item : reduceMap.entrySet()) {
listReduce.addAll(item.getValue());
}
ExportExcel<WdReducebatch> e3 = new ExportExcel<>();
e3.createSheet(sheet3, headersName3, headersId3, listReduce);

// ————航空公司调减信息————–
HSSFSheet sheet4 = wb.createSheet(“航空公司调减信息”);
List<String> headersName4 = Arrays.asList(“ID”, “调减轮次ID”, “航空公司”, “计划调减”, “实际调减”, “创建时间”);
List<String> headersId4 = Arrays.asList(“id”, “wdReducebatchId”, “airlineIcao”, “reducePlan”, “reduceActure”,
“createTime”);
List<WdReducebatchAirline> airlineReduce = new ArrayList<>();
for (Map.Entry<String, List<WdReducebatchAirline>> item : airlinesMap.entrySet()) {
airlineReduce.addAll(item.getValue());
}
ExportExcel<WdReducebatchAirline> e4 = new ExportExcel<>();
e4.createSheet(sheet4, headersName4, headersId4, airlineReduce);

// ————航空公司调减信息————–
HSSFSheet sheet5 = wb.createSheet(“调减航班信息”);
List<String> headersName5 = Arrays.asList(“ID”, “航空公司调减信息ID”, “flightId”, “航班号”, “创建时间”);
List<String> headersId5 = Arrays.asList(“id”, “wdReducebatchAirlineId”, “flightId”, “flightNo”, “createTime”);
List<WdReducebatchAirlineFlight> flightsReduce = new ArrayList<>();
for (Map.Entry<String, List<WdReducebatchAirlineFlight>> item : flightsMap.entrySet()) {
flightsReduce.addAll(item.getValue());
}
ExportExcel<WdReducebatchAirlineFlight> e5 = new ExportExcel<>();
e5.createSheet(sheet5, headersName5, headersId5, flightsReduce);
wb.write(os);
}

/** 导出pdf 时生成表格header */
public PdfPTable getPdfTableHeader(float[] tableNums, String[] table1Headers, BaseFont bf,float height) {
// 生成表格
PdfPTable table1 = new PdfPTable(tableNums);
// 设置表格宽度
table1.setWidthPercentage(100);
// 设置表格样式
table1.setHorizontalAlignment(Element.ALIGN_CENTER);
table1.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
// 设置表头内容
for (int i = 0; i < table1Headers.length; i++) {
Font font3 = new Font(bf, 6, Font.NORMAL, BaseColor.WHITE);
Paragraph p1 = new Paragraph(table1Headers[i], font3);
PdfPCell cell = new PdfPCell(p1);
// 设置表头单元格样式
cell.setBackgroundColor(BaseColor.BLACK);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setFixedHeight(height);
table1.addCell(cell);
}
return table1;
}

。。。。。。。。。

然后我同事说,pdf提成工具类,我在想这特么整么弄,,,

版权声明:本文为junnnnnnnn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/junnnnnnnn/p/9957754.html