导出功能开发

1.导出功能(仅表头)

package nc.ui.yhlypx.yhlypxfkd.ace.action;

import java.awt.event.ActionEvent;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import nc.ui.pubapp.uif2app.model.BillManageModel;
import nc.ui.pubapp.uif2app.view.ShowUpableBillForm;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.ShowStatusBarMsgUtil;
import nc.ui.yhlypx.util.NullValueUtils;
import nc.ui.yhlypx.yhlypxfkd.ace.dialog.ExportFileDialog;
import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVOUtil;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.yhlypx.yhlypxfkd.AggYhlypxhtfkdVO;
import nc.vo.yhlypx.yhlypxfkd.YhlypxhtfkdVO;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * @desc:放款单导出按钮(只导出表头)
 * @author hh
 * @date:2023-03-24
 */
public class ExportActionHead extends NCAction {

	private static final long serialVersionUID = -2288549251908687419L;
	private BillManageModel model;
	protected ShowUpableBillForm editor;

	public ExportActionHead() {
		setBtnName("导出表头");
		setCode("exportAction");
	}

	@Override
	public void doAction(ActionEvent arg0) throws Exception {
		// TODO 自动生成的方法存根
		ExportFileDialog fileDlg = new ExportFileDialog();
		if (fileDlg.show()) {
			// 得到导出的EXCEL文件路径
			String filepath = fileDlg.getFilePath();
			if (filepath == null) {
				ShowStatusBarMsgUtil.showErrorMsg("提示", "请选择导出的文件!", getModel()
						.getContext());// 最下面红色显示
				return;
			}
			try {
				export(filepath);
			} catch (Exception e) {
				ExceptionUtils.wrappBusinessException("程序出错:" + e.getMessage());
			}
		}
		ShowStatusBarMsgUtil.showStatusBarMsg("导出模板成功!", getModel()
				.getContext());

	}

	public void export(String filepath) throws BusinessException {

		XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
		SXSSFWorkbook wb = new SXSSFWorkbook(xssfWorkbook, 100);
		// 创建工作表
		SXSSFSheet wbSheet = (SXSSFSheet) wb.createSheet(getExcelSheetName());
		// 设置默认行宽
		wbSheet.setDefaultColumnWidth(15);
		// 设置列头单元格格式
		CellStyle headStyle = getHeadStyle(wb);
		// 设置表内容单元格格式
		CellStyle bodyStyle = getBodyStyle(wb);
		// 设置有值的合计行单元格格式
		CellStyle bodyStyleHjh = getBodyStyleHjh(wb);

		// 在第1行创建列头
		SXSSFRow row = (SXSSFRow) wbSheet.createRow((int) 0);
		// 设置列头元素
		SXSSFCell cellHead = null;
		for (int i = 0; i < getExportFieldsName().length; i++) {
			cellHead = (SXSSFCell) row.createCell(i);
			cellHead.setCellValue(getExportFieldsName()[i]);
			cellHead.setCellStyle(headStyle);

		}
		
		// 封装表内容数据
		List<YhlypxhtfkdVO> list = new ArrayList<YhlypxhtfkdVO>();
		Object[] selectedOperaDatas = getModel().getSelectedOperaDatas();
		if(selectedOperaDatas == null){
			throw new BusinessException(" 未选择导出数据! ");
		}
		for (int i = 0; i < selectedOperaDatas.length; i++) {
			AggYhlypxhtfkdVO aggvo = (AggYhlypxhtfkdVO) selectedOperaDatas[i];
			AggYhlypxhtfkdVO clone = (AggYhlypxhtfkdVO) aggvo.clone();
			list.add(clone.getParentVO());
		}
		
		//写入表内容数据
		int nowRow = 1;
		if (list != null && list.size() > 0) {
			//放款金额(原币)
			UFDouble fkjeyb = UFDouble.ZERO_DBL;
			//放款金额(本币)
			UFDouble fkjebb = UFDouble.ZERO_DBL;
			YhlypxhtfkdVO[] array = list.toArray(new YhlypxhtfkdVO[list.size()]);
			YhlypxhtfkdVO[] exeArray = execFormulaWithVOs(array);
			for (YhlypxhtfkdVO vo : exeArray) {
				// 在第2行创建rows
				SXSSFRow rows = (SXSSFRow) wbSheet.createRow(nowRow++);
				// 设置表内容元素
				SXSSFCell cellHeads = null;
				// 写入数据内容
				String[] fieldsValue = new String[] {
						NullValueUtils.getNullStringValue(vo.getDbilldate().toStdString().substring(0, 10)),//单据日期
						NullValueUtils.getNullStringValue(vo.getNqx()),//期限
						NullValueUtils.getNullStringValue(vo.getDenddate()),//最后一次还款日期
						NullValueUtils.getNullStringValue(vo.getPk_currtype()),//币种
						NullValueUtils.getNullStringValue(vo.getNorifkmny()),//放款金额(原币)
						NullValueUtils.getNullStringValue(vo.getCurrate()),//本币汇率
						NullValueUtils.getNullStringValue(vo.getNfkmny()),//放款金额(本币)
						NullValueUtils.getNullStringValue(vo.getReratedays()),//利率天数
						NullValueUtils.getNullStringValue(vo.getJxzq()),//	结息周期
						NullValueUtils.getNullStringValue(vo.getQxunit()),//期限单位
						NullValueUtils.getNullStringValue(vo.getHth()),//合同号
						NullValueUtils.getNullStringValue(vo.getSumnum())//累计放款单数量
				};
				
				//处理最后一次还款日期
				if(!fieldsValue[2].equals("")){
					fieldsValue[2] = fieldsValue[2].substring(0, 10);
				}
				
				// 开始写入数据,j为列值
				for (int j = 0; j < fieldsValue.length; j++) {
					cellHeads = (SXSSFCell) rows.createCell(j);
					cellHeads.setCellValue(fieldsValue[j]);
					cellHeads.setCellStyle(bodyStyle);
					if(vo.getAttributeValue(getExportFieldsCode()[j]) instanceof UFDouble && j==4){
						fkjeyb = fkjeyb.add(NullValueUtils.getNullUFdoubleValue(vo.getAttributeValue(getExportFieldsCode()[j])));
					}else if(vo.getAttributeValue(getExportFieldsCode()[j]) instanceof UFDouble && j==6){
						fkjebb = fkjebb.add(NullValueUtils.getNullUFdoubleValue(vo.getAttributeValue(getExportFieldsCode()[j])));
					}
				}
				
				//创建合计行
				wbSheet.createRow(nowRow);
				for(int i=0; i<fieldsValue.length; i++){
					wbSheet.getRow(nowRow).createCell(i);
					if(i == 0){
						wbSheet.getRow(nowRow).getCell(i).setCellStyle(bodyStyle);
						wbSheet.getRow(nowRow).getCell(i).setCellValue("合计行");
					}else if(i == 4){
						wbSheet.getRow(nowRow).getCell(i).setCellValue(getStringByUFDouble(fkjeyb));
						wbSheet.getRow(nowRow).getCell(i).setCellStyle(bodyStyleHjh);			
					}else if(i == 6){
						wbSheet.getRow(nowRow).getCell(i).setCellValue(getStringByUFDouble(fkjebb));
						wbSheet.getRow(nowRow).getCell(i).setCellStyle(bodyStyleHjh);
					}else{
						wbSheet.getRow(nowRow).getCell(i).setCellStyle(bodyStyle);
					}
				}
				
			}
		}

		
		//设置excel表名,并生成excel
		try {
			FileOutputStream fout = new FileOutputStream(filepath
					+ "\\放款单(仅表头)"
					+ new UFDate().toStdString().substring(0, 10) + ".xlsx");
			wb.write(fout);
			fout.close();
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			throw new BusinessException("生成excel出错:" + e.getMessage());
		}
	}

	/**
	 * @desc:档案翻译(币种和合同号一起翻译)
	 * @author:hh
	 * @date :2023年3月29日
	 */
	private YhlypxhtfkdVO[] execFormulaWithVOs(YhlypxhtfkdVO[] hvos) {
		YhlypxhtfkdVO[] clonevos = hvos.clone();
		SuperVOUtil.execFormulaWithVOs(clonevos, new String[] {
				//币种 bd_curritype
				"pk_currtype->getColValue(bd_currtype,name,pk_currtype,pk_currtype)",
				//合同 bd_curritype
				"hth->getColValue(yhly_yhlypxdkht,vbillno,pk_dkht,hth)"
		});
		return clonevos;
	}

	//列名名称数组
	private String[] getExportFieldsName() {
		return new String[] { "单据日期", "期限", "最后一次还款日期", "币种", "放款金额(原币)",
				"本币汇率", "放款金额(本币)", "利率天数", "结息周期", "期限单位",
				"合同号", "累计放款单数量" };
	}
	
	//列名编码数组
	private String[] getExportFieldsCode() {
		return new String[] { "dbilldate", "nqx", "denddate", "pk_currtype", "norifkmny",
				"currate", "nfkmny", "reratedays", "jxzq", "qxunit", "hth", "sumnum" };
	}

	private String getExcelSheetName() {
		String date = new UFDate().toString().substring(0, 10);
		return "放款单" + date;
	}

	public BillManageModel getModel() {
		return model;
	}
	public void setModel(BillManageModel model) {
		this.model = model;
		this.model.addAppEventListener(this);
	}
	public ShowUpableBillForm getEditor() {
		return editor;
	}
	public void setEditor(ShowUpableBillForm editor) {
		this.editor = editor;
	}


	// 设置表头的单元格样式
	public CellStyle getHeadStyle(SXSSFWorkbook wb) {
		// 创建单元格样式
		CellStyle cellStyle = wb.createCellStyle();
		// 设置单元格的背景颜色为淡灰色
		cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		// 设置填充字体的样式
		cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);

		// 设置单元格居中对齐
		cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

		// 设置单元格垂直居中对齐
		cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);

		// 创建单元格内容显示不下时自动换行
		cellStyle.setWrapText(false);

		// 设置单元格字体样式
		XSSFFont font = (XSSFFont) wb.createFont();
		font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗
		font.setFontName("宋体");// 设置字体的样式
		font.setFontHeight(14);// 设置字体的大小
		cellStyle.setFont(font);// 将字体填充到表格中去

		// 设置单元格边框为细线条(上下左右)
		cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);

		return cellStyle;

	}
	
    // 设置表体的单元格样式
    public CellStyle getBodyStyle(SXSSFWorkbook wb) {
        // 创建单元格样式
        CellStyle cellStyle = wb.createCellStyle();
        // 设置单元格居中对齐
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        // 设置单元格居中对齐
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
        // 创建单元格内容不显示自动换行
        cellStyle.setWrapText(false);
        // 设置单元格字体样式
        XSSFFont font = (XSSFFont) wb.createFont();
//        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗
        font.setFontName("宋体");// 设置字体
        font.setFontHeight(12);// 设置字体的大小
        cellStyle.setFont(font);// 将字体添加到表格中去

        // 设置单元格边框为细线条
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);

        return cellStyle;

    }
    
    public CellStyle getBodyStyleHjh  (SXSSFWorkbook wb){
    	// 创建单元格样式
        CellStyle cellStyle = wb.createCellStyle();
		// 设置单元格的背景颜色为橙色
		cellStyle.setFillForegroundColor(HSSFColor.ORANGE.index);
		// 设置填充字体的样式
		cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        // 设置单元格居中对齐
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        // 设置单元格居中对齐
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
        // 创建单元格内容不显示自动换行
        cellStyle.setWrapText(false);
        // 设置单元格字体样式
        XSSFFont font = (XSSFFont) wb.createFont();
//        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗
        font.setFontName("宋体");// 设置字体
        font.setFontHeight(12);// 设置字体的大小
        cellStyle.setFont(font);// 将字体添加到表格中去

        // 设置单元格边框为细线条
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);

        return cellStyle;
    }
    
	public static UFDouble getUFDoubleNullValue(Object obj) {
		return obj == null?UFDouble.ZERO_DBL:new UFDouble(obj.toString());
	}
    
	private Double getStringByUFDouble(UFDouble value){
		if(value==null){
			value = UFDouble.ZERO_DBL;
		}else{
			value = new UFDouble(value.toString());
		}
		return value.toDouble();
	}
    
}

在这里插入图片描述

2.导出功能(表头加表体)

package nc.ui.yhlypx.yhlypxfkd.ace.action;

import java.awt.event.ActionEvent;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import nc.ui.pubapp.uif2app.model.BillManageModel;
import nc.ui.pubapp.uif2app.view.ShowUpableBillForm;
import nc.ui.uif2.NCAction;
import nc.ui.uif2.ShowStatusBarMsgUtil;
import nc.ui.yhlypx.util.NullValueUtils;
import nc.ui.yhlypx.yhlypxfkd.ace.dialog.ExportFileDialog;
import nc.vo.pub.BusinessException;
import nc.vo.pub.SuperVOUtil;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFDouble;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nc.vo.yhlypx.yhlypxfkd.AggYhlypxhtfkdVO;
import nc.vo.yhlypx.yhlypxfkd.YhlypxhtfkBVO;
import nc.vo.yhlypx.yhlypxfkd.YhlypxhtfkdVO;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * @desc:放款单导出按钮(导出表头和表体)
 * @author hh
 * @date:2023-03-24
 */
public class ExportActionHeadAndBody extends NCAction {

	private static final long serialVersionUID = -2288549251908687419L;
	private BillManageModel model;
	protected ShowUpableBillForm editor;

	public ExportActionHeadAndBody() {
		setBtnName("导出表头和表体");
		setCode("exportAction");
	}

	@Override
	public void doAction(ActionEvent arg0) throws Exception {
		// TODO 自动生成的方法存根
		ExportFileDialog fileDlg = new ExportFileDialog();
		if (fileDlg.show()) {
			// 得到导出的EXCEL文件路径
			String filepath = fileDlg.getFilePath();
			if (filepath == null) {
				ShowStatusBarMsgUtil.showErrorMsg("提示", "请选择导出的文件!", getModel()
						.getContext());// 最下面红色显示
				return;
			}
			try {
				export(filepath);
			} catch (Exception e) {
				ExceptionUtils.wrappBusinessException("程序出错:" + e.getMessage());
			}
		}
		ShowStatusBarMsgUtil.showStatusBarMsg("导出模板成功!", getModel()
				.getContext());

	}

	public void export(String filepath) throws BusinessException {

		XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
		
		List<YhlypxhtfkdVO> headvolist = new ArrayList<YhlypxhtfkdVO>();
		List<YhlypxhtfkBVO> bodyvolist = new ArrayList<YhlypxhtfkBVO>();
		
		Object[] selectedOperaDatas = getModel().getSelectedOperaDatas();
		if(selectedOperaDatas == null){
			throw new BusinessException(" 未选择导出数据! ");
		}
		for (int i = 0; i < selectedOperaDatas.length; i++) {
			AggYhlypxhtfkdVO aggvo = (AggYhlypxhtfkdVO) selectedOperaDatas[i];
			AggYhlypxhtfkdVO clone = (AggYhlypxhtfkdVO) aggvo.clone();
			YhlypxhtfkBVO[] bodyvos = (YhlypxhtfkBVO[]) clone.getChildrenVO();
			headvolist.add((YhlypxhtfkdVO) clone.getParentVO());
			for (int j = 0; j < bodyvos.length; j++) {
				bodyvolist.add(bodyvos[j]);
			}
		}
		
		if(headvolist.size() > 0){
			//放款单导出表头数据
			exportwzxqsqd(xssfWorkbook,headvolist);
			//放款单导出表体数据			
			exportwzxqsqdbvo(xssfWorkbook,bodyvolist);
		}
		
		try {
			FileOutputStream fout = new FileOutputStream(filepath
					+ "\\放款单(表头加表体)"
					+ new UFDate().toStdString().substring(0, 10) + ".xlsx");
			xssfWorkbook.write(fout);
			fout.close();
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			throw new BusinessException("生成excel出错:" + e.getMessage());
		}

	}
	

	//放款单导出表头数据
	private void exportwzxqsqd(XSSFWorkbook xb, List<YhlypxhtfkdVO> headvolist) {
		//表头翻译
		YhlypxhtfkdVO[] hvoArray = headvolist.toArray(new YhlypxhtfkdVO[headvolist.size()]);
		YhlypxhtfkdVO[] exeHvoArray = execFormulaWithHVOs(hvoArray);
		 
		//创建页签
		xb.createSheet(getExcelSheetHeadName());
		//获取页签1
		XSSFSheet xssfSheet = xb.getSheetAt(0);
		// 设置默认行宽
		xssfSheet.setDefaultColumnWidth(15);
		// 设置列头单元格格式
		CellStyle headStyle = getHeadStyle(xb);
		// 设置表内容单元格格式
		CellStyle bodyStyle = getBodyStyle(xb);
		
		xssfSheet.setRowBreak(headvolist.size());
		// 在第1行创建rows
		XSSFRow row = (XSSFRow) xssfSheet.createRow((int) 0);
		// 设置列头元素
		XSSFCell cellHead = null;
		for (int i = 0; i < getExportFieldsHeadName().length; i++) {
			cellHead = (XSSFCell) row.createCell(i);
			cellHead.setCellValue(getExportFieldsHeadName()[i]);
			cellHead.setCellStyle(headStyle);
			
		}
		
		//写入表内容数据
		int nowRow = 1;
		//放款金额(原币)
		UFDouble fkjeyb = UFDouble.ZERO_DBL;
		//放款金额(本币)
		UFDouble fkjebb = UFDouble.ZERO_DBL;
		for (int i = 0; i < exeHvoArray.length; i++) {
			YhlypxhtfkdVO hvo = (YhlypxhtfkdVO) exeHvoArray[i];
			
			// 在第2行创建rows
			XSSFRow rows = (XSSFRow) xssfSheet.createRow(nowRow++);
			// 设置表内容元素
			XSSFCell cellHeads = null;
			String[] fieldsValue = new String[]{
					NullValueUtils.getNullStringValue(hvo.getDbilldate().toStdString().substring(0, 10)),//单据日期
					NullValueUtils.getNullStringValue(hvo.getNqx()),//期限
					NullValueUtils.getNullStringValue(hvo.getDenddate()),//最后一次还款日期
					NullValueUtils.getNullStringValue(hvo.getPk_currtype()),//币种
					NullValueUtils.getNullStringValue(hvo.getNorifkmny()),//放款金额(原币)
					NullValueUtils.getNullStringValue(hvo.getCurrate()),//本币汇率
					NullValueUtils.getNullStringValue(hvo.getNfkmny()),//放款金额(本币)
					NullValueUtils.getNullStringValue(hvo.getReratedays()),//利率天数
					NullValueUtils.getNullStringValue(hvo.getJxzq()),//	结息周期
					NullValueUtils.getNullStringValue(hvo.getQxunit()),//期限单位
					NullValueUtils.getNullStringValue(hvo.getHth()),//合同号
					NullValueUtils.getNullStringValue(hvo.getSumnum())//累计放款单数量
			};
			
			//处理最后一次还款日期
			if(!fieldsValue[2].equals("")){
				fieldsValue[2] = fieldsValue[2].substring(0, 10);
			}
			
			// 开始写入数据,j为列值
			for (int j = 0; j < fieldsValue.length; j++) {
				cellHeads = (XSSFCell) rows.createCell(j);
				cellHeads.setCellValue(fieldsValue[j]);
				cellHeads.setCellStyle(bodyStyle);
				if(hvo.getAttributeValue(getExportFieldsCode()[j]) instanceof UFDouble && j==4){
					fkjeyb = fkjeyb.add(NullValueUtils.getNullUFdoubleValue(hvo.getAttributeValue(getExportFieldsCode()[j])));
				}else if(hvo.getAttributeValue(getExportFieldsCode()[j]) instanceof UFDouble && j==6){
					fkjebb = fkjebb.add(NullValueUtils.getNullUFdoubleValue(hvo.getAttributeValue(getExportFieldsCode()[j])));
				}
			}
			
			//创建合计行
			xssfSheet.createRow(nowRow);
			for(int j=0; j<fieldsValue.length; j++){
				xssfSheet.getRow(nowRow).createCell(j);
				xssfSheet.getRow(nowRow).getCell(j).setCellStyle(bodyStyle);
				if(j == 0){
					xssfSheet.getRow(nowRow).getCell(j).setCellValue("合计行");
				}else if(j == 4){
					xssfSheet.getRow(nowRow).getCell(j).setCellValue(getStringByUFDouble(fkjeyb));
				}else if(j == 6){
					xssfSheet.getRow(nowRow).getCell(j).setCellValue(getStringByUFDouble(fkjebb));
				}	
			}
			
		}
		
	}
	
	//放款单导出表体数据
	private void exportwzxqsqdbvo(XSSFWorkbook xb, List<YhlypxhtfkBVO> bodyvolist) {
		
		//表体翻译
		YhlypxhtfkBVO[] bvoArray = bodyvolist.toArray(new YhlypxhtfkBVO[bodyvolist.size()]);
		YhlypxhtfkBVO[] exeBvoArray = execFormulaWithBVOs(bvoArray);
		
		//创建页签
		xb.createSheet(getExcelSheetBodyName());
		//获取页签2
		XSSFSheet xssfSheet = xb.getSheetAt(1);
		// 设置默认行宽
		xssfSheet.setDefaultColumnWidth(15);
		// 设置列头单元格格式
		CellStyle headStyle = getHeadStyle(xb);
		// 设置表内容单元格格式
		CellStyle bodyStyle = getBodyStyle(xb);
		
		// 在第1行创建rows
		XSSFRow row = (XSSFRow) xssfSheet.createRow((int) 0);
		// 设置列头元素
		XSSFCell cellHead = null;
		for (int i = 0; i < getExportFieldsBodyName().length; i++) {
			cellHead = (XSSFCell) row.createCell(i);
			cellHead.setCellValue(getExportFieldsBodyName()[i]);
			cellHead.setCellStyle(headStyle);
		}
		
		//写入表内容数据
		int nowRow = 1;
		int rowno = 0;
		//遍历获取表体数据
		for (int i = 0; i < exeBvoArray.length; i++) {
			YhlypxhtfkBVO bvo = exeBvoArray[i];
			
			// 在第2行创建rows
			XSSFRow rows = (XSSFRow) xssfSheet.createRow(nowRow++);
			// 设置表内容元素
			XSSFCell cellHeads = null;
			String[] fieldsValue = new String[]{
					++rowno+"",//行号
					NullValueUtils.getNullStringValue(bvo.getHkno()),//还款编号
					NullValueUtils.getNullStringValue(getUFDate(bvo.getDstartdate())),//开始计息日期
					NullValueUtils.getNullStringValue(getUFDate(bvo.getDhkdate())),//还款日期
					NullValueUtils.getNullStringValue(bvo.getNprice()),//单价
					NullValueUtils.getNullStringValue(bvo.getNnum()),//数量
					NullValueUtils.getNullStringValue(bvo.getNmny()==null ? 0.00 : bvo.getNmny().setScale(2, UFDouble.ROUND_HALF_UP)),//金额
					NullValueUtils.getNullStringValue(bvo.getSumlxd())//累计利息单数量
			};
			
			// 开始写入数据,j为列值
			for (int j = 0; j < fieldsValue.length; j++) {
				cellHeads = (XSSFCell) rows.createCell(j);
				cellHeads.setCellValue(fieldsValue[j]);
				cellHeads.setCellStyle(bodyStyle);
			}
			
		}
	}

	/**
	 * @desc:表头档案翻译
	 * @author:hh
	 * @date :2023年3月29日
	 */
	private YhlypxhtfkdVO[] execFormulaWithHVOs(YhlypxhtfkdVO[] hvos) {
		YhlypxhtfkdVO[] clonevos = hvos.clone();
		SuperVOUtil.execFormulaWithVOs(clonevos, new String[] {
				//币种 bd_curritype
				"pk_currtype->getColValue(bd_currtype,name,pk_currtype,pk_currtype)",
				//合同 bd_curritype
				"hth->getColValue(yhly_yhlypxdkht,vbillno,pk_dkht,hth)"
		});
		return clonevos;
	}
	/**
	 * @desc:表体档案翻译
	 * @author:hh
	 * @date :2023年3月29日
	 */
	private YhlypxhtfkBVO[] execFormulaWithBVOs(YhlypxhtfkBVO[] bvos) {
		YhlypxhtfkBVO[] clonevos = bvos.clone();
		SuperVOUtil.execFormulaWithVOs(clonevos, new String[] {
				
		});
		return clonevos;
	}

	//表头列名名称数组
	private String[] getExportFieldsHeadName() {
		return new String[] { "单据日期", "期限", "最后一次还款日期", "币种", "放款金额(原币)",
							  "本币汇率", "放款金额(本币)", "利率天数", "结息周期", "期限单位",
							  "合同号", "累计放款单数量" };
	}
	
	//表头列名编码数组
	private String[] getExportFieldsCode() {
		return new String[] { "dbilldate", "nqx", "denddate", "pk_currtype", "norifkmny",
				"currate", "nfkmny", "reratedays", "jxzq", "qxunit", "hth", "sumnum" };
	}
	
	//表体列名名称数组
	private String[] getExportFieldsBodyName() {
		return new String[] { "行号", "还款编号", "开始计息日期", "还款日期", "单价",
							  "数量", "金额", "累计利息单数量" };
	}
	
	//表体列名编码数组
//	private String[] getExportFieldsBodyCode() {
//		return new String[] { "rowno", "hkno", "dstartdate", "dhkdate", "nprice",
//							  "nnum", "nmny", "sumlxd" };
//	}

	//表头页签名
	private String getExcelSheetHeadName() {
		String date = new UFDate().toString().substring(0, 10);
		return "放款单表头" + date;
	}
	
	//表体页签名
	private String getExcelSheetBodyName() {
		String date = new UFDate().toString().substring(0, 10);
		return "放款单表体" + date;
	}

	public BillManageModel getModel() {
		return model;
	}
	public void setModel(BillManageModel model) {
		this.model = model;
		this.model.addAppEventListener(this);
	}
	public ShowUpableBillForm getEditor() {
		return editor;
	}
	public void setEditor(ShowUpableBillForm editor) {
		this.editor = editor;
	}
	
	private String getUFDate(Object value) {
		if(value == null){
			return "";
		}else{
			return value.toString().substring(0, 10);
		}
	}
	
	// 设置表头的单元格样式
	public CellStyle getHeadStyle(XSSFWorkbook xb) {
		// 创建单元格样式
		CellStyle cellStyle = xb.createCellStyle();
		// 设置单元格的背景颜色为淡灰色
		cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		// 设置填充字体的样式
		cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);

		// 设置单元格居中对齐
		cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);

		// 设置单元格垂直居中对齐
		cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);

		// 创建单元格内容显示不下时自动换行
		cellStyle.setWrapText(false);

		// 设置单元格字体样式
		XSSFFont font = (XSSFFont) xb.createFont();
		font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗
		font.setFontName("宋体");// 设置字体的样式
		font.setFontHeight(14);// 设置字体的大小
		cellStyle.setFont(font);// 将字体填充到表格中去

		// 设置单元格边框为细线条(上下左右)
		cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);

		return cellStyle;

	}
	
    // 设置表体的单元格样式
    public CellStyle getBodyStyle(XSSFWorkbook xb) {
        // 创建单元格样式
        CellStyle cellStyle = xb.createCellStyle();
        // 设置单元格居中对齐
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        // 设置单元格居中对齐
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
        // 创建单元格内容不显示自动换行
        cellStyle.setWrapText(false);
        // 设置单元格字体样式
        XSSFFont font = (XSSFFont) xb.createFont();
//        font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 这是字体加粗
        font.setFontName("宋体");// 设置字体
        font.setFontHeight(12);// 设置字体的大小
        cellStyle.setFont(font);// 将字体添加到表格中去

        // 设置单元格边框为细线条
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);

        return cellStyle;

    }
    
	private Double getStringByUFDouble(UFDouble value){
		if(value==null){
			value = UFDouble.ZERO_DBL;
		}else{
			value = new UFDouble(value.toString());
		}
		return value.toDouble();
	}
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/322758.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

keycloak部署

https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.zip 1.上传zip 并解压 uzip keycloak-11.0.2.zip 2.创建mysql数据库 CREATE SCHEMA keycloak DEFAULT CHARACTER SET utf8 ; 3.安装mysql的jdbc驱动 下载mysql的JDBC驱动&#xff08;mysql-connector-java-8…

代码随想录 Leetcode15. 三数之和

题目&#xff1a; 代码(首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;int n nums.size();sort(nums.begin(),nums.end());for(…

如何在 Ubuntu 22.04 上使用 LEMP 安装 WordPress

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 22.04 上使用 LEMP 安装 WordPress 介绍 WordPress 是互联网上最流行的内容管理系统 (CMS) 之一…

清华裴丹|大模型时代的AIOps

在大模型时代下&#xff0c;运维界普遍关注一些问题&#xff1a;大模型能带来哪些收益&#xff1f;面临哪些技术挑战&#xff1f;与以往的 AIOps小模型是什么关系&#xff1f;有了大模型之后&#xff0c;那么AIOps的整体框架是什么&#xff1f;近期、中期、长期有哪些应用&…

基于ssm的线上旅游体验系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

工程项目管理系统源码与Spring Cloud:实现高效系统管理与二次开发

随着企业规模的不断扩大和业务的快速发展&#xff0c;传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…

java基础之线程知识点

线程 进程的概念 操作系统(OS)中并发(同时)执行的多个程序任务 进程的特点 宏观并行,微观串行 在一个时间段内,CPU会将时间段划分为若干个时间片,一个时间片是能被一个程序拥有,且只有拥有时间片的程序才能执行自身内容,所以当时间片的划分足够细小,交替频率足够快,就会形…

9 - 数据分片概述|部署MyCat服务

数据分片概述&#xff5c;部署MyCat服务&#xff5c;测试配置 数据分片概述分库分表分割方式水平分割&#xff08;横向切分&#xff09;垂直分割&#xff08;纵向切分&#xff09; 提供分库分表存储服务软件&#xff08;中间件&#xff09;MyCAT软件分片服务器的工作过程 部署M…

[Kubernetes]10. k8s部署Goweb+mysql项目实战演练

一.安装docker构建镜像 如果要本地构建镜像的话,对应节点还需要安装docker,安装教程见:[Docker]一.Docker 简介与安装 linux环境,centos8下 docker及docker compose安装教程 k8s部署Goweb+mysql项目有两种方法:第一种是传统部署方法,第二种是通过ConfigMap实现应用配置分离部署…

OPenCV中的开闭运算

闭运算是先膨胀再腐蚀的过程&#xff0c;可以用来清除小黑点 开运算同理 开运算是先腐蚀再膨胀的过程&#xff0c;可以清除一些小两点和毛刺 闭运算和开运算使用不同大小的结构元素是因为它们的目标不同。 闭运算的目标是尽量消除小黑点&#xff0c;保持较大的连通区域。因此…

最佳利用Mock提升测试效率的7个技巧!

再聊这个问题之前&#xff0c;我们先了解一下公司技术架构的演变过程&#xff0c;这样我们才能真正体会到我们为什么要使用 Mock功能。 单体应用 在早期&#xff0c; 大部分公司的应用技术栈主要可以分为两大类&#xff1a;LAMP&#xff08;Linux Apache MySQL PHP&#x…

1.50A、0.75A、1.50A、1.20A电流控制型比例马达放大器

1.50A、0.75A、1.50A、1.20A、0.70A、0.60A、1.40A控制电流型比例阀、比例泵、比例马达放大器&#xff0c;带数显区显示及当前参数现场可调&#xff0c;如指令、电流、上下斜坡、颤振频率等&#xff1b; 模块式及插头式外观&#xff0c;可现场调试各种参数&#xff1b; 兼容多…

TortoiseGit 2.15.0.0 安装与配置(图文详细教程)

TortoiseGit的安装与配置 TortoiseGit是Tortoise为Git提供的版本可视化工具&#xff0c;简化了记忆Git命令行的过程&#xff0c;将命令行可视化。 确保自己电脑中已经下载好了git 官网下载TortoiseGit Download – TortoiseGit – Windows Shell Interface to Git 选择64-bi…

如何定位和优化程序CPU、内存等性能之巅

如何定位和优化程序CPU、内存等性能之巅 摘要 性能优化指在不影响系统运行正确性的前提下&#xff0c;使之运行得更快&#xff0c;完成特定功能所需的时间更短&#xff0c;或拥有更强大的服务能力。本文将介绍性能优化的基本概念以及如何定位和优化程序中的CPU、内存和IO瓶颈…

树形控件中的子项点击显示按钮弹窗

效果 MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include"QStandardItemModel" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:Main…

学习怎么能从复杂的开始?,开始学一个个人博客吧

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…

(一)环境部署

Python虚拟环境 安装virtualenv pip install virtualenv 创建环境 virtualenv -p D:\python\python.exe(python解释器目录) env-py3.6(虚拟环境目录&#xff0c;名称随意) 在当前目录下生成env-py3.6目录。 激活环境 ...\env-py3.6\Scripts> .\activate 关闭&#xf…

mybatis中的驼峰转换

一、有啥用 开发时常用对象来存储从数据库中的记录&#xff0c;开启驼峰转化即可实现数据库字段(通常使用_下划线连接)与对象属性的对应&#xff0c;如数据库中的first_name字段会转化为firstName与对象中的firstName属性对应。 二、配置 三、相关报错 数据库字段与对象属性…

通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory

如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象&#xff0c;向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多&#xff0c;我们就需要new很多新的对象。这…

艾瑞报告:HR数字化需关注体系化能力,红海云等标杆厂商引领一体化趋势

新全球化时代背景下&#xff0c;企业经营所面临的国内外环境的不确定性增强&#xff0c;如何从不确定性中找到确定性成了大多数企业的关注要点。近日&#xff0c;艾瑞咨询发布《2023中国人力资源数字化研究报告》&#xff0c;从数字化转型的角度切入&#xff0c;探讨数字化如何…