只需修改值contentList和合并便可
public HSSFWorkbook getOrderExport() {
HSSFWorkbook workbook = new HSSFWorkbook();
//头部字体
HSSFFont titleFont = workbook.createFont();
titleFont.setColor(HSSFFont.SS_NONE);
titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//头部样式
HSSFCellStyle titleStyle = workbook.createCellStyle();
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //内容排列的方式
titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
titleStyle.setFont(titleFont);
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
titleStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
titleStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
titleStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框
//内容字体
HSSFFont contentFont = workbook.createFont();
titleFont.setColor(HSSFFont.SS_NONE);
//内容(文字类型)样式
HSSFCellStyle contentStrStyle = workbook.createCellStyle();
contentStrStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //内容排列的方式
contentStrStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
contentStrStyle.setFont(contentFont);
contentStrStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
contentStrStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
contentStrStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
contentStrStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框
//内容(数字类型-金额)样式
HSSFCellStyle contentMoneyStyle = workbook.createCellStyle();
contentMoneyStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); //内容排列的方式
contentMoneyStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
contentMoneyStyle.setFont(contentFont);
contentMoneyStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
contentMoneyStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
contentMoneyStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
contentMoneyStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框
HSSFDataFormat fmt = workbook.createDataFormat();
contentMoneyStyle.setDataFormat(fmt.getFormat("#,##0.00"));
//内容(数字类型-数量)样式
HSSFCellStyle contentNumStyle = workbook.createCellStyle();
contentNumStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); //内容排列的方式
contentNumStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
contentNumStyle.setFont(contentFont);
contentNumStyle.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); //下边框
contentNumStyle.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);//左边框
contentNumStyle.setBorderTop(HSSFCellStyle.BORDER_MEDIUM);//上边框
contentNumStyle.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);//右边框
HSSFSheet sheet = workbook.createSheet("sheet0");//创建一个sheet
HSSFRow row = null;
HSSFCell cell = null;
//获取数据
List<Order> list =new ArrayList();
Order order =new Order();
order.setId("11123123");
order.setOrderNum("11313");
order.setQuantity(12);
order.setAmount(12.2f);
order.setStatus(1);
Customer c=new Customer();
c.setUsername("admin");
c.setPassword("admin");
order.setCustomer(c);
Order order2 =new Order();
order2.setId("11123123");
order2.setOrderNum("11313");
order2.setQuantity(12);
order2.setAmount(12.2f);
order2.setStatus(1);
Customer c1=new Customer();
c1.setUsername("admin");
c1.setPassword("admin");
order2.setCustomer(c1);
list.add(order);
list.add(order2);
String[] title = new String[]{};//头部字段数组
Integer[] tauto = new Integer[]{};//头部宽度需要自适应的单元格数组
String[] celltype = new String[]{};//内容是否为数字格式显示的单元格数组(字符串:"string",数字-整型:"int",数字-金额:"money")
inttitleRowNum = 0;//标题栏头部的行数
List<String[]> contentList = new ArrayList<String[]>();//存储数据的list
titleRowNum = 1;//表头行数
//设置自动调整宽度
tauto = new Integer[]{0,3,4,5};
title = new String[]{"id编号","订单号","数量","付款总金额", //表头
"订单状态","订单所属客户"};
celltype = new String[]{"string","string","string","string","string","string"}; //表头类型
//迭代数据到List数组
for(Order obj: list){
String[] content = new String[]{
obj.getId(),
obj.getOrderNum(),
String.valueOf(obj.getQuantity()),
String.valueOf(obj.getAmount()),
String.valueOf(obj.getStatus()),
obj.getCustomer().getUsername()
};
contentList.add(content);//添加到list
}
//设置title宽度自动适应
for(inti:tauto){
sheet.autoSizeColumn(i);
}
//创建表头
row = sheet.createRow(titleRowNum-1); //创建行
for(intt=0;t<title.length;t++){
cell = row.createCell(t); //创建第row行的t列:
cell.setCellStyle(titleStyle);//表头行用的样式
cell.setCellValue(title[t]);//列值
}
//锁定头部
for(inti=0;i<=titleRowNum;i++){
sheet.createFreezePane(0,titleRowNum);//锁定头
}
//创建内容
for(inti=0;i<contentList.size();i++){
String[] contentAttr = contentList.get(i);
row = sheet.createRow(i+titleRowNum);//创建行
for(intj=0;j<contentAttr.length;j++){ //循环插入数据
cell = row.createCell(j);
String contentValue = contentAttr[j].trim();
//根据表头类型格式化值 以及样式
if("int".equals(celltype[j])){
cell.setCellStyle(contentNumStyle);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
}elseif("money".equals(celltype[j])){
cell.setCellStyle(contentMoneyStyle);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
//contentValue = MoneyUtil.formatMoney(contentValue);
contentValue = contentValue;
}else{
cell.setCellStyle(contentStrStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
}
cell.setCellValue(contentValue);
}
}
//合并单元格 根据Id相同来合并
for(inti =0;i<contentList.size();i++){ //存储值的list
String [] content =contentList.get(i); //获取第一组值
intnext =0;//标记结束的行
inttitleRows=1; //表头行
introwsBegin=titleRows+i;//开始合并的行
introwsEnd=0;//结束合并的行;
String currentId = content[0];//当前行的id的Id
for(intj=i+1;j<contentList.size();j++){
String [] currentId_j =contentList.get(j);
if(currentId.equals(currentId_j[0])){ //ID相等
rowsEnd=titleRows+j;
next=j;
}
}
//合并
if(rowsEnd>1){
//合并方法 sheet.addMergedRegion(CellRangeAddress region)
//CellRangeAddress构造方法 四个值,分别是首行、最后一行、首列、最后一列
//合并ID
sheet.addMergedRegion(new CellRangeAddress(rowsBegin,rowsEnd,0,0));
//合并订单所属客户
sheet.addMergedRegion(new CellRangeAddress(rowsBegin,rowsEnd,5,5));
}
if(next>0){
i=next; //跳转到结束行的下一行
}
}
return workbook;
}
导出结果: