继上一篇导出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提成工具类,我在想这特么整么弄,,,

java使用poi导出excel的更多相关文章

  1. Java之POI导出Excel(一):单sheet

    相信在大部分的web项目中都会有导出导入Excel的需求,今天我们就来看看如何用Java代码去实现 用POI导出Excel表格. 一.pom引用 pom文件中,添加以下依赖 查看代码  <!-- ...

  2. java解决poi导出excel文字水印,导出excel不可操作问题

    首先需求是用户提出导出excel数据需使用水印备注其用途: 其实就是在导出excel的同时带有自定义文字水印的导出. 那么我们首先想到的肯定是以一个什么样的思路去解决该问题,首先查找poi导出exce ...

  3. Java使用POI导出excel(下)——实例与小技巧

    [更新]:thinkgem的导出工具类: /** * Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesit ...

  4. java springmvc poi 导出Excel,先简单记录,后期会详细描写

    POI jar包下载 : http://poi.apache.org/download.html jsp代码 <%@ page language="java" content ...

  5. Java之POI导出Excel(二):多个sheet

    相信在大部分的web项目中都会有导出导入Excel的需求,之前我也写过一篇导出单个sheet工作表的文章,没看过的小伙伴可以去看哈,链接也给大家放出来了:导出单个sheet 但是在我们日常的工作中,需 ...

  6. Java使用POI导出excel(上)——基本操作

    相关的介绍参考自:http://zc985552943.iteye.com/blog/1491546 一.概述 1.概念 受上文博文博主的启发,有必要先对excel的各个概念先做了解! //上述基本都 ...

  7. Java之Poi导出Excel文档

    一.Poi简介 在后台管理系统中,我们经常要做的导出操作,通常导出为Excel文档的形式,而Poi则提供了这种需要的支持. 二.Workbook/HSSFWorkbook/XSSFWorkbook 1 ...

  8. java用POI导出Excel

    架构SSM + Maven 一.添加依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactI ...

  9. java 使用poi导出Excel,设置单元格保护不可编辑

    //sheet表加密:等效excel的审阅菜单下的保护工作表 sheet.protectSheet(new String("333"));//333是密码 更多设置请参考:http ...

随机推荐

  1. 浅谈前端nuxt(ssr)

    SSR: 服务端渲染(Server Side Render),即:网页是通过服务端渲染生成后输出给客户端. 一.那为什么要使用SSR呢? 我用一句话理解的就是降低SPA(Single Page App ...

  2. FreeMarker与Thymeleaf

    FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 ...

  3. 学习笔记(一)HTML基础

    HTML 基础 HTML 简介 HTML (Hyper textmarkup language) 中文译名为"超文本标记语言",主要是通过 HTML 标记对网页中的文本.图片.声音 ...

  4. 2015-10-28 C#4

    五.继承 5.1 父类又称(基类,超类)是被继承的类,子类又称派生类. 5.2 A:B,A就叫子类,B叫父类,B里面所有的成员(字段,方法)都会被A继承. B里面的私有成员,A也是继承下来了的,只是没 ...

  5. day 10 函数命名空间、函数嵌套和作用域

    1. day 09 内容复习 # 函数 # 可读性强 复用性强 # def 函数名(): # 函数体 #return 返回值 # 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() # ...

  6. 使用monitor.bat用DDMS查看其它项目的布局

    查看结果

  7. 静态代码扫描之阿里java代码规范IDEA插件

    前言 2017年2月9日,首次公布<阿里巴巴Java开发手册>; 2017年9月25日,阿里巴巴集团发布了<阿里巴巴Java开发手册>PDF终极版; 2017年10月14日,在 ...

  8. XML文档的简易增删查改

    dom4j解析一.利用dom4j操作元素节点 1.查询第一本书的书名,并输出到控制台 2.给第一本书添加一个特价节点, 并修改第一本书的售价节点的内容为19.8元 3.删除第二本书的作者节点二.利用d ...

  9. linux常用命令 cut字符截取命令

    cut 字符截取 cut [选项] 文件名 选项 -f 列号: 提取第几列 -d 分割符:按照指定的分隔符分割列 默认使用制表符("tab")进行分割 ssgao:Download ...

  10. Python列表操作集合

    对于python列表里元素的操作主要分为以下几个方面: 1.向列表里面加元素: 向python列表里面添加元素主要有三种方法: (1)append() append()对于列表的操作主要实现的是在特定 ...