import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import com.google.common.collect.Lists;
i
public static void exportBooking(Train train1, HttpServletResponse response) throws IOException {
OutputStream outputStream = null;
HSSFWorkbook workbook = null;
try {
List
// 1.获得日期内所有班次
Train tempTrain = new Train();
tempTrain.setBeginDate(DateUtils.addHours(train1.getBeginDate(), -8));
tempTrain.setEndDate(DateUtils.addHours(train1.getEndDate(), -8));
List
if (trainList != null && trainList.size() > 0) {
// 2.获取这些班次订舱的客户,作为表头
List
for (Company company : companyList) {
titleList.add(company.getName());
}
workbook = new HSSFWorkbook();
// 创建合并单元格
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 1 + titleList.size());// 起始行,结束行,起始列,结束列
// 创建单元格样式
HSSFCellStyle titleStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 14, false, true, false, "",
true);
HSSFCellStyle colStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 11, false, true, false, "",
true);
HSSFCellStyle colLeftStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 11, false, false, false, "",
true);
HSSFCellStyle blueStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 11, false, true, false, "",
true);
HSSFFont blueFont = workbook.createFont();
blueFont.setColor(HSSFColor.BLUE.index);
blueStyle.setFont(blueFont);
HSSFCellStyle redStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 11, false, true, false, "",
true);
HSSFFont redFont = workbook.createFont();
redFont.setColor(HSSFColor.RED.index);
redStyle.setFont(redFont);
HSSFCellStyle goBlueStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 11, false, false, false, "blue",
true);
HSSFCellStyle backYelloStyle = ExportExcel.createCellStyle(workbook, "宋体", (short) 11, false, false, false, "yello",
true);
// 创建工作表
HSSFSheet sheet = workbook.createSheet("sheet1");
sheet.getPrintSetup().setLandscape(true);
sheet.setAutobreaks(true);
// 加载合并单元格对象
sheet.addMergedRegion(cellRangeAddress);
//锁定前两行
sheet.createFreezePane(0,2,0,2);
// 设置默认列宽
sheet.setDefaultColumnWidth(12);
sheet.setColumnWidth(0, 252*62+323);
sheet.setColumnWidth(1, 252*20+323);
// 创建行
// 创建头标题行;并且设置头标题
HSSFRow titleRow = sheet.createRow(0);
titleRow.setHeightInPoints((short) 30);
HSSFCell titleCell = titleRow.createCell(0);
titleCell.setCellStyle(titleStyle);
titleCell.setCellValue(DateUtils.formatDate(train1.getBeginDate(), "MMdd")+"-"+DateUtils.formatDate(train1.getEndDate(), "MMdd")
+"班列订舱情况(截止"+DateUtils.getDate("yyyy年MM月dd日HH:mm:ss")+")");
//创建小表头
HSSFRow row1 = sheet.createRow(1);
row1.setHeightInPoints((short) 30);
HSSFCell row1cell = row1.createCell(0);
row1cell.setCellStyle(colLeftStyle);
row1cell.setCellValue("班次/客户订舱");
row1cell = row1.createCell(1);
row1cell.setCellStyle(colStyle);
row1cell.setCellValue("总计");
for (int i = 0; i < titleList.size(); i++) {
row1cell = row1.createCell(2+i);
row1cell.setCellStyle(colStyle);
row1cell.setCellValue(titleList.get(i));
}
// 3.正式循环,输出数据,每个班次一横行数据
for (int i = 0; i < trainList.size(); i++) {
Train train = trainList.get(i);
HSSFRow row = sheet.createRow(2+i);
row.setHeightInPoints((short) 30);
HSSFCell cell0=row.createCell(0);
String temp = "";
if (train.getLine()!=null && StringUtils.isNotBlank(train.getLine().getName())) {
if(train.getLine().getGoOrBack() !=null && train.getLine().getGoOrBack()==1){
cell0.setCellStyle(goBlueStyle);
temp = "WB";
}else{
cell0.setCellStyle(backYelloStyle);
temp = "EB";
}
cell0.setCellValue(temp+DateUtils.formatDate(train.getDepartureDate(), "MMdd")
+" ("+DateUtils.getWeekOfDate(train.getDepartureDate())+")"+train.getLine().getName());
}else{
cell0.setCellStyle(colStyle);
cell0.setCellValue(train.getTrainCode()+"班次所在线路查询不到!");
}
HSSFCell cell1=row.createCell(1);
cell1.setCellStyle(colStyle);
cell1.setCellValue(String.valueOf(train.getTotleSpaceNum()-train.getSurplusSpaceNum()));
// 该班次下所有订舱数量,根据客户id分组 spaceNum company.id
List
for (int j = 0; j < titleList.size(); j++) {
HSSFCell cell=row.createCell(2+j);
int num = 0;
for (int k = 0; k < orders.size(); k++) {
if (orders.get(k).getCompany().getName().equals(titleList.get(j))) {
num = orders.get(k).getSpaceNum();
}
}
if (num!=0) {
cell.setCellStyle(blueStyle);
}else{
cell.setCellStyle(colStyle);
}
cell.setCellValue(num+"");
}
}
//总计
HSSFRow zjRow = sheet.createRow(trainList.size()+2);
zjRow.setHeightInPoints((short) 30);
HSSFCell zjCell0 = zjRow.createCell(0);
zjCell0.setCellStyle(redStyle);
zjCell0.setCellValue("总计("+DateUtils.formatDate(train1.getBeginDate(), "MMdd")+"-"+DateUtils.formatDate(train1.getEndDate(), "MMdd")+")订舱");
//总计数据
HSSFCell zjCell1 = zjRow.createCell(1);
zjCell1.setCellType(HSSFCell.CELL_TYPE_FORMULA);
colStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0"));
zjCell1.setCellStyle(colStyle);
String all = "";
for(int i=0;i
}
if (all!="") {
zjCell1.setCellFormula(all.substring(0,all.length()-1));
}
//每行循环总计数据
char begin_letter='B';
HSSFCell cellRows2=null;
for(int k=0;k
colStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0"));
cellRows2.setCellStyle(colStyle);
cellRows2.setCellType(HSSFCell.CELL_TYPE_BLANK);
String basePrice="";
char char2;
char2=(char) (begin_letter +1);
for(int j=0;j
}
begin_letter=char2;
if (basePrice!="") {
cellRows2.setCellFormula(basePrice.substring(0,basePrice.length()-1));
}
}
}
/**
* 下载文件
*/
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader( "Content-Disposition", "attachment; filename="+ Encodes.urlEncode("班列订舱情况统计表.xls"));
outputStream= response.getOutputStream();
workbook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
outputStream.close();
}
}
}
/**
*
* @param workbook
* @param fontsize
* @return 单元格样式
*/
public static HSSFCellStyle createCellStyle(HSSFWorkbook workbook,String fontName, short fontsize, boolean flag, boolean flag1,boolean flag3,String color,boolean flag4) {
// TODO Auto-generated method stub
HSSFCellStyle style = workbook.createCellStyle();
//是否水平居中
if(flag1){
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
} else if(flag3){
style.setVerticalAlignment(HSSFCellStyle.ALIGN_LEFT);//垂直居中
}
if(flag4){
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setTopBorderColor(HSSFColor.BLACK.index);
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setLeftBorderColor(HSSFColor.BLACK.index);
style.setRightBorderColor(HSSFColor.BLACK.index);
}
//创建字体
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints((short)11);
if(StringUtils.isNotEmpty(color)&&color.equals("blue")){
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
}
if(StringUtils.isNotEmpty(color)&&color.equals("green")){
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.LIME.index);
}
if(StringUtils.isNotEmpty(color)&&color.equals("yello")){
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.YELLOW.index);
}
if(StringUtils.isNotEmpty(color)&&color.equals("gray")){
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
}
if(StringUtils.isNotEmpty(color)&&color.equals("orange")){
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
}
//是否加粗字体
if(flag){
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
if(StringUtils.isNotEmpty(fontName)){
font.setFontName(fontName);
}
font.setFontHeightInPoints(fontsize);
//加载字体
style.setFont(font);
return style;
}