nc报表开发及导出功能开发细节点

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);
}

二、档案导出功能细节点

导出完以后要刷新一下

三、单据导出功能细节点

导出完以后要刷新一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和安韩Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值