nc报表开发及导出功能开发细节点
一、报表开发及报表导出功能细节点
前言
报表导出没有参照字段,不用进行翻译,向excel赋完值后也不用刷新,直接导出即可。
1.nc写报表时,配查询模板常用处理方法
//Integer类型的空处理方法
private Integer getIntegerNullValue(Object obj){
return obj == null ? null : Integer.parseInt(obj.toString());
}
//查询模板参照多选处理方法
//“('1001A11000000001B4Y5','1001A11000000001B4Y6')” 变成 “[1001A11000000001B4Y5, 1001A11000000001B4Y6]”
private String[] getDeal(String Value) {
if (!Value.equals("")) {
String[] values = new String[0];
if(Value.indexOf("(") != -1) {
Value = Value.replace("(", "");
Value = Value.replace(")", "");
Value = Value.replace("'", "");
values = Value.split(",");
}else{
values = new String[]{Value};
}
return values;
}
return null;
}
//查询模板日期区间处理
//“2022-09-12 00:00:00@@2022-09-12 23:59:59,2023-09-12 00:00:00@@2023-09-12 23:59:59” 取“2022-09-12 00:00:00和2023-09-12 00:00:00”
if (!qyrq.equals("")) {//签约日期
sql.append(" and h.qydate between '"+qyrq.substring(0,19)+"' and '"+qyrq.substring(41,60)+"'");
}
//查询模板金额区间处理
//“1.00,1000000.00,” 按逗号分割将字符串放到数组中,然后再将其取出来进行操作
if (htjehs != null && !"".equals(htjehs)) {//合同金额含税
String[] split = htjehs.split(",");
if(!split[0].equals("ISNULL")){
sql.append(" and h.nmny >= " + split[0]);
}
if(!split[1].equals("ISNULL")){
sql.append(" and h.nmny <= " + split[1]);
}
}
2.nc写报表时,导出常用处理方法
//Integer转String的方法
private String getStringByInteger(Integer value){
return value == null ? "" : value.toString();
}
//UFDouble转Double的方法
private Double getDoubleByUFDouble(UFDouble value){
return NullValueUtils.getNullUFdoubleValue(value).toDouble();
}
//合计行要用的方法
private UFDouble add(UFDouble num1, UFDouble num2){
return NullValueUtils.getNullUFdoubleValue(num1).add(NullValueUtils.getNullUFdoubleValue(num2));
}
3.nc写报表时,刷新常用处理方法
/*查询按钮里面加*/
String pkUser = AppBsContext.getInstance().getPkUser();
QueryCacheUtil.remove("H7H1H179" + pkUser);
QueryCacheUtil.put("H7H1H179" + pkUser, param);
/*刷新按钮里面的逻辑*/
String pkUser = AppBsContext.getInstance().getPkUser();
Object object = QueryCacheUtil.get("H7H1H179" + pkUser);
XshttzParam param = new XshttzParam();
if(object != null){
param = (XshttzParam) object;
}
List<XshttzVO> list = getService().queryData(param);
// 将数据显示到界面
if(list != null && list.size() > 0){
this.getModel().initModel(list.toArray(new XshttzVO[0]));
}else{
this.getModel().initModel(null);
}
4.XSSFWorkbook 生成excel
//1-法一:不使用模板导出
OutputStream out = null ;
//创建工作表
XSSFWorkbook rwb = new XSSFWorkbook();
//创建页签
rwb.createSheet();
//获取页签1
XSSFSheet xssfSheet = rwb.getSheetAt(0);
//1-法二:使用模板导出
byte[] bytes = getService().getTemplet();
InputStream inputStream = null;
OutputStream out = null ;
inputStream = new ByteArrayInputStream(bytes);
//创建工作表
XSSFWorkbook rwb = new XSSFWorkbook(inputStream);
//获取页签1
XSSFSheet xssfSheet = rwb.getSheetAt(0);
//2-法一:标题样式(加粗,垂直居中)
XSSFCellStyle cellStyle = (XSSFCellStyle) rwb.createCellStyle();
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 水平居中
XSSFFont fontStyle = (XSSFFont) rwb.createFont();
fontStyle.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
fontStyle.setFontHeightInPoints((short) 16); // 设置标题字体大小
cellStyle.setFont(fontStyle);
//2-法二:获取单元格,分别设置上、下、左、右边框
XSSFCellStyle setBorder = rwb.createCellStyle();
setBorder.setAlignment(XSSFCellStyle.ALIGN_CENTER);// 水平居中
XSSFFont fontStyle = (XSSFFont) rwb.createFont();
fontStyle.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
fontStyle.setFontHeightInPoints((short) 10); // 设置标题字体大小
setBorder.setFont(fontStyle);
setBorder.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框
//3:设置表头列名
//获取Sheet1的第0行作为列头
XSSFRow row_head = xssfSheet.getRow((int) 0);
//设置列头元素
XSSFCell cellHead = null;
for (int i = 0; i < getExportFieldsName().length; i++) {
cellHead = (XSSFCell) row_head.getCell(i);
cellHead.setCellValue(getExportFieldsName()[i]);
}
//4:从第二行开始写入数据
int row = 1;
int cell = 0;
//5:获取页面所有数据
List<Object> list = getModel().getRows();
//6:从第二行开始写入数据
if (list != null && list.size() > 0) {
//6-1合计行初始化
//合同金额(含税)
UFDouble htjehs = UFDouble.ZERO_DBL;
//合同金额(不含税)
UFDouble htjebhs = UFDouble.ZERO_DBL;
//6-2单元格设置格式
XSSFCellStyle setBorder_row = rwb.createCellStyle();
setBorder_row.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框
setBorder_row.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框
setBorder_row.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框
setBorder_row.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框
DataFormat df = rwb.createDataFormat();
setBorder_row.setDataFormat(df.getFormat("#,##0.00"));
//6-3从第二行开始写入数据
for (Object obj : list) {
XshthzVO vo = (XshthzVO) obj;
xssfSheet.createRow(row);
//序号
xssfSheet.getRow(row).createCell(cell);
xssfSheet.getRow(row).getCell(cell).setCellValue(row+"0");
xssfSheet.getRow(row).getCell(cell).setCellStyle(setBorder_row);
//项目编码
xssfSheet.getRow(row).createCell(cell+1);
xssfSheet.getRow(row).getCell(cell+1).setCellValue(vo.getXmbm());
xssfSheet.getRow(row).getCell(cell+1).setCellStyle(setBorder_row);
//合同金额(含税)
xssfSheet.getRow(row).createCell(cell+2);
xssfSheet.getRow(row).getCell(cell+2).setCellValue(getStringByUFDouble(vo.getHtjehs()));
xssfSheet.getRow(row).getCell(cell+2).setCellStyle(setBorder_row);
htjehs = add(htjehs, vo.getHtjehs());
//合同金额(不含税)
xssfSheet.getRow(row).createCell(cell+3);
xssfSheet.getRow(row).getCell(cell+3).setCellValue(getStringByUFDouble(vo.getHtjebhs()));
xssfSheet.getRow(row).getCell(cell+3).setCellStyle(setBorder_row);
htjebhs = add(htjebhs, vo.getHtjebhs());
}
//6-4创建合计行
xssfSheet.createRow(row);
// 序号
xssfSheet.getRow(row).createCell(cell);
xssfSheet.getRow(row).getCell(cell).setCellValue("合计行");
xssfSheet.getRow(row).getCell(cell).setCellStyle(setBorder_row);
//项目编码
xssfSheet.getRow(row).createCell(cell+1);
xssfSheet.getRow(row).getCell(cell+1).setCellStyle(setBorder_row);
//合同金额(含税)
xssfSheet.getRow(row).createCell(cell+2);
xssfSheet.getRow(row).getCell(cell+2).setCellValue(getStringByUFDouble(htjehs));
xssfSheet.getRow(row).getCell(cell+2).setCellStyle(setBorder_row);
//合同金额(不含税)
xssfSheet.getRow(row).createCell(cell+3);
xssfSheet.getRow(row).getCell(cell+3).setCellValue(getStringByUFDouble(htjebhs));
xssfSheet.getRow(row).getCell(cell+3).setCellStyle(setBorder_row);
}
二、档案导出功能细节点
导出完以后要刷新一下
三、单据导出功能细节点
导出完以后要刷新一下