|
@@ -18,6 +18,7 @@ import org.apache.poi.hssf.usermodel.*;
|
|
|
import org.apache.poi.ss.usermodel.BorderStyle;
|
|
|
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
|
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -213,13 +214,14 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
|
|
|
// 在 workbook 中添加一个sheet,对应 excel 文档中的 sheet
|
|
|
HSSFSheet sheet = wb.createSheet("分项明细");
|
|
|
// 获取 cell 样式
|
|
|
- HSSFCellStyle cellStyle = getCellStyle(wb);
|
|
|
+ HSSFCellStyle cellTitleStyle = getCellStyle(wb,"center",true);
|
|
|
+ HSSFCellStyle cellContentStyle = getCellStyle(wb,"center",true);
|
|
|
// 创建标题,合并标题单元格
|
|
|
// 行号
|
|
|
- int rowNum = 0;
|
|
|
+ int rowNum = 2;
|
|
|
// 第一行
|
|
|
HSSFRow first = sheet.createRow(rowNum++);
|
|
|
- String[] left = {"序号", "业务类型", "作业类型", "提单号", "货名", "客户", "件数", "重量", "体积", "入库时间", "计算天数", "货物堆存费"};
|
|
|
+ String[] left = {"序号", "业务类型", "作业类型", "提单号", "货名", "客户", "件数", "重量", "体积", "入库时间","出库时间", "计算天数", "货物堆存费"};
|
|
|
List<String> middle = tFeesMapper.selectTFeesNameList();
|
|
|
String[] right = {"金额", "计划员", "计费时间", "结费时间", "仓库", "备注"};
|
|
|
|
|
@@ -228,15 +230,29 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
|
|
|
all.addAll(middle);
|
|
|
Collections.addAll(all, right);
|
|
|
|
|
|
+ // 创建并获取大标题样式
|
|
|
+ /*HSSFCellStyle cellBigTitleStyle = getCellStyle(wb,"center",false);
|
|
|
+ CellRangeAddress cBigTitle = new CellRangeAddress(0,0,0,all.size()/4);
|
|
|
+ setBigTitle("青岛大木仓配物流有限公司现场收费统计表(仓储业务)",0,sheet,cellBigTitleStyle,cBigTitle);
|
|
|
+ setFont(cellBigTitleStyle,wb,"宋体",11,true);*/
|
|
|
+
|
|
|
+ // 创建并获取统计范围时间样式
|
|
|
+ HSSFCellStyle cellRangeTimeStyle = getCellStyle(wb,"center",false);
|
|
|
+ CellRangeAddress cRangeTimeTitle = new CellRangeAddress(1,1,0,all.size()/9);
|
|
|
+ setBigTitle("统计范围:" + billDetailsSubItem.getDateRange(),1,sheet,cellRangeTimeStyle,cRangeTimeTitle);
|
|
|
+ setFont(cellRangeTimeStyle,wb,"宋体",11,false);
|
|
|
+
|
|
|
int size = all.size();
|
|
|
for (int i = 0; i < size; i++) {
|
|
|
HSSFCell tempCell = first.createCell(i);
|
|
|
- if (i > 11 && i < size - 6) {
|
|
|
+ if (i > 12 && i < size - 6) {
|
|
|
tempCell.setCellValue(all.get(i) + "单价");
|
|
|
} else {
|
|
|
tempCell.setCellValue(all.get(i));
|
|
|
}
|
|
|
- tempCell.setCellStyle(cellStyle);
|
|
|
+ tempCell.setCellStyle(cellTitleStyle);
|
|
|
+ // 设置第三行标题栏字体
|
|
|
+ setFont(cellTitleStyle,wb,"宋体",11,true);
|
|
|
}
|
|
|
|
|
|
// 根据客户名称,发货方查询清单数据
|
|
@@ -253,10 +269,11 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
|
|
|
HSSFCell temCell = tempRow.createCell(i);
|
|
|
String cellValue = "";
|
|
|
if (i == 0) {
|
|
|
+ // 序号
|
|
|
cellValue = StringUtils.objToStr(index++);
|
|
|
} else if (i == 1) {
|
|
|
// 业务类型
|
|
|
- cellValue = StringUtils.objToStr(bd.getfBusinesstype());
|
|
|
+ cellValue = StringUtils.objToStr(bd.getfBilltype());
|
|
|
} else if (i == 2) {
|
|
|
// 作业类型
|
|
|
cellValue = StringUtils.objToStr(bd.getTwlfBusinesstype());
|
|
@@ -301,13 +318,14 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
|
|
|
cellValue = StringUtils.objToStr(bd.getfStlamountdate());
|
|
|
} else if (i == size - 2) {
|
|
|
// 仓库
|
|
|
- cellValue = StringUtils.objToStr(bd.getfWarehouseId());
|
|
|
+ cellValue = StringUtils.objToStr(bd.getFhName());
|
|
|
} else if (i == size - 1) {
|
|
|
// 备注
|
|
|
cellValue = StringUtils.objToStr(bd.getRemark());
|
|
|
}
|
|
|
temCell.setCellValue(cellValue);
|
|
|
- temCell.setCellStyle(cellStyle);
|
|
|
+ temCell.setCellStyle(cellContentStyle);
|
|
|
+ setFont(cellContentStyle,wb,"宋体",12,false);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -340,23 +358,90 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
|
|
|
return downloadPath;
|
|
|
}
|
|
|
|
|
|
- // 获取 excel 表格的 cell 相关样式
|
|
|
- public HSSFCellStyle getCellStyle(HSSFWorkbook wb) {
|
|
|
- HSSFCellStyle cellStyle = wb.createCellStyle();
|
|
|
- // 水平居中
|
|
|
- cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
- // 垂直居中
|
|
|
- cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
- // 上边框
|
|
|
- cellStyle.setBorderTop(BorderStyle.THIN);
|
|
|
- // 下边框
|
|
|
- cellStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
- // 左边框
|
|
|
- cellStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
- // 右边框
|
|
|
- cellStyle.setBorderRight(BorderStyle.THIN);
|
|
|
+ /**
|
|
|
+ * 封装大标题实现复用
|
|
|
+ * @param title 标题
|
|
|
+ * @param row 所在行
|
|
|
+ * @param sheet sheet
|
|
|
+ * @param cellStyle 样式
|
|
|
+ * @param cellAddresses 合并行参数
|
|
|
+ */
|
|
|
+ public void setBigTitle(String title,int row,HSSFSheet sheet,HSSFCellStyle cellStyle,CellRangeAddress cellAddresses){
|
|
|
+ // 合并参数
|
|
|
+ sheet.addMergedRegion(cellAddresses);
|
|
|
+ // 大标题部分
|
|
|
+ HSSFRow bigTitleRow = sheet.createRow(row);
|
|
|
+ HSSFCell cell = bigTitleRow.createCell(0);
|
|
|
+ cell.setCellValue(title);
|
|
|
+ cell.setCellStyle(cellStyle);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置 excel 内内容字体
|
|
|
+ * @param style 传入的已设置的 excel 样式
|
|
|
+ * @param workbook 工作簿
|
|
|
+ * @param fontName 字体名称,例如: "宋体"
|
|
|
+ * @param fontSize 字体大小
|
|
|
+ * @param isBold 是否加粗,true:加粗,false:不加粗
|
|
|
+ */
|
|
|
+ public void setFont(HSSFCellStyle style,HSSFWorkbook workbook,String fontName,int fontSize,boolean isBold){
|
|
|
+ HSSFFont font = workbook.createFont();
|
|
|
+ // 设置字体
|
|
|
+ font.setFontName(fontName);
|
|
|
+ // 是否加粗
|
|
|
+ font.setBold(isBold);
|
|
|
+ // 字体大小
|
|
|
+ font.setFontHeightInPoints((short) fontSize);
|
|
|
+ // 需要设置在谁上
|
|
|
+ style.setFont(font);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取并设置工作表 excel 样式
|
|
|
+ * @param workbook 工作簿
|
|
|
+ * @param position 位置参数:left-居左,right-居右,center-居中
|
|
|
+ * @param showFrame 是否显示边框,true:显示,false:不显示
|
|
|
+ * @return 已设置的 excel 样式
|
|
|
+ */
|
|
|
+ public HSSFCellStyle getCellStyle(HSSFWorkbook workbook,String position,boolean showFrame){
|
|
|
+ // 创建标题的显示样式
|
|
|
+ HSSFCellStyle headerStyle = workbook.createCellStyle();
|
|
|
+ // 设置水平垂直居中+上下左右边框+边框是否显示
|
|
|
+ setHeaderStyle(headerStyle,position,showFrame);
|
|
|
// 返回
|
|
|
- return cellStyle;
|
|
|
+ return headerStyle;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 封装边框以及水平+垂直居中+边框是否显示
|
|
|
+ * @param headerStyle 样式
|
|
|
+ * @param position 位置参数:left-居左,right-居右,center-居中
|
|
|
+ * @param showFrame 是否显示边框,true:显示,false:不显示
|
|
|
+ */
|
|
|
+ public void setHeaderStyle(HSSFCellStyle headerStyle,String position,boolean showFrame){
|
|
|
+ // 水平位置摆放
|
|
|
+ switch (position) {
|
|
|
+ case "left": // 居左
|
|
|
+ headerStyle.setAlignment(HorizontalAlignment.LEFT);
|
|
|
+ break;
|
|
|
+ case "right": // 居右
|
|
|
+ headerStyle.setAlignment(HorizontalAlignment.RIGHT);
|
|
|
+ break;
|
|
|
+ case "center": // 居中
|
|
|
+ headerStyle.setAlignment(HorizontalAlignment.CENTER);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 垂直居中
|
|
|
+ headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
|
|
+ if (showFrame) {
|
|
|
+ // 上边框
|
|
|
+ headerStyle.setBorderTop(BorderStyle.THIN);
|
|
|
+ // 下边框
|
|
|
+ headerStyle.setBorderBottom(BorderStyle.THIN);
|
|
|
+ // 左边框
|
|
|
+ headerStyle.setBorderLeft(BorderStyle.THIN);
|
|
|
+ // 右边框
|
|
|
+ headerStyle.setBorderRight(BorderStyle.THIN);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|