//设置style
ICellStyle cellstyle = workbook.CreateCellStyle();
cellstyle.VerticalAlignment = VerticalAlignment.Center;
cellstyle.Alignment = HorizontalAlignment.Center;
//合并操作
sheet.AddMergedRegion(new CellRangeAddress(index["firstRow"], index["lastRow"], index["firstCol"], index["lastCol"]));//起始行,结束行,起始列,结束列
//设置合并后style
var cell = sheet.GetRow(index["firstRow"]).GetCell(index["firstCol"]);
cell.CellStyle = cellstyle;
@GetMapping("/a")
public void a(HttpServletResponse response) {
// 创建工作簿类
XSSFWorkbook wb = new XSSFWorkbook();
// 创建工作表并设置表名
XSSFSheet sheet = wb.createSheet("订单");
// 创建行,下标从0开始
XSSFRow row = sheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
XSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
//声明列对象
XSSFCell cell = null;
//标题
String[] title = {"姓名", "年龄", "性别", "物品名称", "数量"};
//创建标题
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
//设置合并后居中显示样式
XSSFCellStyle cellstyle = wb.createCellStyle();
cellstyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellstyle.setAlignment(HorizontalAlignment.CENTER);
int RowCount=1;
List<order> orders = getOrders();
for (int i = 0; i < orders.size(); i++) {
row = sheet.createRow(RowCount);
cell = row.createCell(0);
cell.setCellValue(orders.get(i).name);
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue(orders.get(i).age);
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue(orders.get(i).sex);
cell.setCellStyle(style);
for(int j=0;j<orders.get(i).goods.size();j++) {
if(j==0) {
cell = row.createCell(3);
cell.setCellValue(orders.get(i).goods.get(j).goodsName);
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue(orders.get(i).goods.get(j).quantity);
cell.setCellStyle(style);
RowCount = RowCount + 1;
}
else{
row = sheet.createRow(RowCount);
cell = row.createCell(3);
cell.setCellValue(orders.get(i).goods.get(j).goodsName);
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue(orders.get(i).goods.get(j).quantity);
cell.setCellStyle(style);
RowCount = RowCount + 1;
}
}
//合并单元格
if(orders.get(i).goods.size()>1) {
for (int colnum = 0; colnum < 3; colnum++) {
//参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
int firstRow = RowCount - orders.get(i).goods.size();
int lastRow = RowCount - 1;
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, colnum, colnum));
//设置样式
sheet.getRow(firstRow).getCell(colnum).setCellStyle(cellstyle);
}
}
}
//响应到客户端
try {
String fileName = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date()) + ".xlsx";
this.setResponseHeader(response, fileName);
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
wb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @return
*/
private List<order> getOrders() {
List<order> orderList = new ArrayList<order>();
for (int i = 0; i < 10; i++) {
order order = new order(String.valueOf(i), String.valueOf(i), String.valueOf(i));
List<goods> goodsList = new ArrayList<goods>();
if (i == 0 || i == 5 || i == 7) {
goodsList.add(new goods("篮球", 1));
goodsList.add(new goods("足球", 1));
goodsList.add(new goods("运动鞋", 2));
order.setGoods(goodsList);
} else {
goodsList.add(new goods("其它", i));
order.setGoods(goodsList);
}
orderList.add(order);
}
return orderList;
}
//发送响应流方法
public void setResponseHeader(HttpServletResponse response, String fileName) {
try {
try {
fileName = new String(fileName.getBytes("iso8859-1"), "utf-8");
System.out.println(fileName);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("application/octet-stream;charset=ISO8859-1");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
} catch (Exception ex) {
ex.printStackTrace();
}
}