欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

导出excel文件

程序员文章站 2022-05-30 15:14:26
...

1.下载:poi-3.7-20101029.jar包并导入项目。

 

2.ExtportUtil.java

package com.wondersgroup.qyws.sjzk.action.sjhc;

import java.math.BigDecimal;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

public class ExtportUtil {
	public static int  writeRecords(HSSFRow row, HSSFSheet sheet,
			int nColumn, HSSFCell cell, HSSFWorkbook workbook, int iRow, List rs) {
		int size = rs.size();
		for (int j = 0; j < size; j++) {
			row = sheet.createRow(iRow);
			Object obj[] = new Object[]{};
			obj = (Object[]) rs.get(j);
			for (int k = 0; k < nColumn; k++) {
				cell = row.createCell(k);
				if (obj[k] != null) {
					cell.setCellValue(new HSSFRichTextString(obj[k]+""));
				} else {
					cell.setCellValue(new HSSFRichTextString("无效数据"));
				}
				HSSFCellStyle cellStyle = workbook.createCellStyle();
				cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
				cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
				cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
				cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
				cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
				
				//针对导出上传接口表的红色背景样式:
				if( obj.length==5 && obj[3].toString().equals("s") && ((BigDecimal)obj[4]).intValue()==0 ){
					cellStyle.setFillForegroundColor(HSSFColor.RED.index);
					cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
				}
				// 设置显示格式,避免点击后变成科学计数法了
				cellStyle.setDataFormat((short) 0x31);
				cellStyle.setWrapText(true);
				cell.setCellStyle(cellStyle);
			}
			iRow = iRow + 1;
		}
		return iRow-1;
	}
	public static int  writeRecordsWithNo(HSSFRow row, HSSFSheet sheet,
			int nColumn, HSSFCell cell, HSSFWorkbook workbook, int iRow, List rs) {
		int size = rs.size();
		for (int j = 0; j < size; j++) {
			row = sheet.createRow(iRow);
			Object obj[] = new Object[]{};
			obj = (Object[]) rs.get(j);
			for (int k = 0; k < nColumn; k++) {
				if(k==0){
					//序号单元格
					cell = row.createCell(k);
					cell.setCellValue(new HSSFRichTextString((j+1)+""));
					HSSFCellStyle cellStyle = workbook.createCellStyle();
					cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
					cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
					cellStyle.setDataFormat((short) 0x31);
					cellStyle.setWrapText(true);
					//针对导出上传接口表的红色背景样式:
					if( obj.length==5 && obj[3].toString().equals("s") && ((BigDecimal)obj[4]).intValue()==0 ){
						cellStyle.setFillForegroundColor(HSSFColor.RED.index);
						cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
					}
					cell.setCellStyle(cellStyle);
				}else{
					//数据单元格
					cell = row.createCell(k);
					if (obj[k-1] != null) {
						cell.setCellValue(new HSSFRichTextString(obj[k-1]+""));
					} else {
						cell.setCellValue(new HSSFRichTextString("无效数据"));
					}
					HSSFCellStyle cellStyle = workbook.createCellStyle();
					cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
					cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
					
					//针对导出上传接口表的红色背景样式:
					if( obj.length==5 && obj[3].toString().equals("s") && ((BigDecimal)obj[4]).intValue()==0 ){
						cellStyle.setFillForegroundColor(HSSFColor.RED.index);
						cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
					}
					// 设置显示格式,避免点击后变成科学计数法了
					cellStyle.setDataFormat((short) 0x31);
					cellStyle.setWrapText(true);
					cell.setCellStyle(cellStyle);
				}
			}
			iRow = iRow + 1;
		}
		return iRow-1;
	}
// 大标题样式
	public static HSSFCellStyle getStyle1(HSSFWorkbook workbook) {
		HSSFCellStyle style = workbook.createCellStyle(); // 设置单元格样式
		HSSFFont font = workbook.createFont();
		font.setFontName(HSSFFont.FONT_ARIAL);// 字体
		font.setFontHeightInPoints((short) 18);// 字号
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		style.setFont(font);
		return style;
	}

	// 小标题样式
	public static HSSFCellStyle getStyle2(HSSFWorkbook workbook) {
		// 一、数据质量报告
		HSSFCellStyle style = workbook.createCellStyle(); // 设置单元格样式
		HSSFFont font = workbook.createFont();
		font.setFontName(HSSFFont.FONT_ARIAL);// 字体
		font.setFontHeightInPoints((short) 12);// 字号
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
		style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
		style.setFont(font);
		return style;
	}

	// 描述文本样式
	public static HSSFCellStyle getStyle3(HSSFWorkbook workbook) {
		// 一、数据质量报告
		HSSFCellStyle style = workbook.createCellStyle(); // 设置单元格样式
		HSSFFont font = workbook.createFont();
		font.setFontName(HSSFFont.FONT_ARIAL);// 字体
		font.setFontHeightInPoints((short) 10);// 字号
		style.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);
		style.setFont(font);
		return style;
	}

	// 数据表格标题样式
	public static HSSFCellStyle getThStyle(HSSFWorkbook workbook) {
		HSSFCellStyle cellStyle = workbook.createCellStyle();
		cellStyle.setFillForegroundColor(HSSFColor.LIGHT_BLUE.index);
		cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		cellStyle.setAlignment(HSSFCellStyle.ALIGN_GENERAL);
//		cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
		cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
		cellStyle.setWrapText(true);
		return cellStyle;
	}
	
	public static String getValue(String content) {
		String temp = "";
		if(content.startsWith("0")){
			temp = content.substring(1);
		}else{
			temp = content.substring(0);
		}
		return temp;
	}
}

3.应用:

package com.wondersgroup.qyws.sjzk.action.sjhc;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.wondersgroup.qyws.sjzk.service.FxbgService;
import com.wondersgroup.qyws.sjzk.util.Constants;

@Controller()
@Scope("prototype")
public class ExtportFxbgAction {
	@Autowired
	private FxbgService fxbgService;
	// 描述分数
	private double hczhdf;
	private double sclxxdf;
	private double sjscfwdf;
	private double sjzldf;
	// 数据表格
	private List hczhdfList;
	private List sclxxdfList;
	private List sjscfwdfList;
	private List sjzldfList;
	private List zbdbList;
	// 评分分级
	private List zhdfGradeList;
	private List lxxGradeList;
	private List fwdfGradeList;
	private List zldfGradeList;
	//查询条件和条件展示
	private String sd = "";// 起始日期 - 查询条件
	private String ed = "";// 截止日期 - 查询条件
	private String ssd = "";// 起始日期 - 展示条件
	private String sed = "";// 截止日期 - 展示条件
	//报告描述
	private String msg;
	private String ds;
	
	/**
	 * 导出分析报告
	 * 
	 * @throws UnsupportedEncodingException
	 * */
	public String exportFxbg() throws UnsupportedEncodingException {
		ActionContext context = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) context
				.get(ServletActionContext.HTTP_RESPONSE);
		response.setContentType("application/vnd.ms-excel");
		if(ds == null){
			ds = (String) context.getSession().get("ds");
		}else{
			context.getSession().put("ds", ds);
		}
		String csd = "";
		String ced = "";
		if (sd.isEmpty()) {
			//默认执行
			int cha = ds.equals(Constants.CEN_INTER) ? 1 : 2;
			Calendar now = Calendar.getInstance();
			now.add(Calendar.DATE, -cha);
			ssd = now.get(Calendar.YEAR)+"年"+(now.get(Calendar.MONTH) + 1)+"月1日";
			sed = now.get(Calendar.YEAR)+"年"+(now.get(Calendar.MONTH) + 1)+"月"+(now.get(Calendar.DATE))+"日";
			ced = new SimpleDateFormat("yyyyMMdd").format(now.getTime());
			csd = ced.substring(0,6)+"01";//该月一号
			ed = new SimpleDateFormat("yyyy-MM-dd").format(now.getTime());
			sd = ed.substring(0,8)+"01";
		}else{
			//条件查询
			String sm = "";
			String se = "";
			String em = "";
			String ee = "";
			sm = ExtportUtil.getValue(sd.substring(4, 6));
			se = ExtportUtil.getValue(sd.substring(6, 8));
			em = ExtportUtil.getValue(ed.substring(4, 6));
			ee = ExtportUtil.getValue(ed.substring(6, 8));
			ssd = sd.substring(0, 4)+"年"+sm+"月"+se+"日";
			sed = ed.substring(0, 4)+"年"+em+"月"+ee+"日";
			csd = sd.substring(0, 4)+sd.substring(5, 7)+sd.substring(8, 10);
			ced = ed.substring(0, 4)+ed.substring(5, 7)+ed.substring(8, 10);
		}

		Map vals = fxbgService.getFxbg(csd, ced, ds);
		
		hczhdf = ((Double) vals.get("hczhdf")).doubleValue();
		sclxxdf = ((Double) vals.get("sclxxdf")).doubleValue();
		sjscfwdf = ((Double) vals.get("sjscfwdf")).doubleValue();
		sjzldf = ((Double) vals.get("sjzldf")).doubleValue();
		
		hczhdfList = (List) vals.get("hczhdfList");
		sclxxdfList = (List) vals.get("sclxxdfList");
		sjscfwdfList = (List) vals.get("sjscfwdfList");
		sjzldfList = (List) vals.get("sjzldfList");
		
		//[[0,''],[3,'a,b,c'],[4,'d,e,f,g],[0,'']]
		// 综合得分机构评级:[3,'jg1,jg2,jg3']
		zhdfGradeList = (List) vals.get("zhdfGradeList");
		// 数据上传连续性得分机构评级
		lxxGradeList = (List) vals.get("lxxGradeList");
		// 数据上传范围得分机构评级
		fwdfGradeList = (List) vals.get("fwdfGradeList");
		// 数据质量得分机构评级
		zldfGradeList = (List) vals.get("zldfGradeList");
//
		// 指标对比zbdbList
		zbdbList = (List) vals.get("zbdbList");
//		
		// 数据状况描述:
		msg = (String)vals.get("msg");
		
		String xlsName = "数据上传核查报告.xls";
		// Excel文档对象,会把数据导入到这个文档
		HSSFWorkbook workbook = new HSSFWorkbook();
		response.setHeader("Content-Disposition", "attachment; filename="
				+ URLEncoder.encode(xlsName, "utf-8"));

		int iRow = 0;// 行下标,整个sheet的行标控制
		workbook = transHczhdfListToExcel(workbook, iRow);

		ServletOutputStream fOut;
		try {
			fOut = response.getOutputStream();
			workbook.write(fOut);
			fOut.flush();
			fOut.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	private HSSFWorkbook transHczhdfListToExcel(HSSFWorkbook workbook, int iRow) {
		String[] theme = { "一、综合得分报告:", "二、上传连续性报告", "三、上传表范围报告", "四、数据质量报告","五、业务指标核对报告","六、评价与建议" };
		String[] titles1 = { "序号", "医疗机构", "得分" };
		String[] titles2 = { "序号", "医疗机构", "期内上传数据天数", "期内天数", "得分" };
		String[] titles3 = { "序号", "医疗机构", "实际上传表范围", "应上传表范围", "得分" };
		String[] titles4 = { "序号", "字典核查得分", "非空核查得分", "关联核查得分", "可追溯性核查得分", "数据质量得分" };
		String[] titles5 = { "数据来源\\指标", "门诊人次", "门诊总收入", "门诊药品收入", 
				"门诊检验人次", "门诊检查人次","门诊手术人次", "出院人次", "出院病人床日数", "出院病人总收入", "出院病人药品收入",
				"住院检验人次", "住院检查人次", "住院手术人次" };
		// 创建工作表(sheet)
		HSSFSheet sheet = workbook.createSheet();
		workbook.setSheetName(0, "数据上传核查报告");// 下标0为第一个sheet

		// ------------------------ 大标题 ----------------------------------
		// 给sheet创建一个行
		HSSFRow row = sheet.createRow(iRow);// iRow = 0
		HSSFCell cell = null;
		cell = row.createCell(0);// 创建一个单元格
		// 设置字体样式
		HSSFCellStyle cellStyle1 = ExtportUtil.getStyle1(workbook); // 设置单元格样式
		cell.setCellStyle(cellStyle1);
		// 设置文件名第一行展示,这里题目名和sheet名一样
		cell.setCellValue(new HSSFRichTextString("数据上传核查报告"));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));

		// ------------------------ 日期说明 ----------------------------------
		iRow = iRow + 1;// 第二行 iRow= 1
		row = sheet.createRow(iRow);// 创建行
		HSSFCell rq = null;
		rq = row.createCell(0);// 创建单元格
		HSSFCellStyle rq_sty = ExtportUtil.getStyle3(workbook); // 设置单元格样式
		rq_sty.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 居中
		rq.setCellStyle(rq_sty);
		rq.setCellValue(new HSSFRichTextString(ssd+" — "+sed));
		// new CellRangeAddress(y1,x1,y2,x2)
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));

		// "其中得分为优的机构有2家医院,其中得分为良的机构有2家医院 ,"
		// + "其中得分为中的机构有4家医院,其中得分为差的机构有2家医院;详细列表如下:";
		String desc1 = "";
		String gs1 = "";
		if (zhdfGradeList.size() != 0) {
			desc1 = getHczhdfMs("数据质量核查综合", hczhdf, zhdfGradeList);
			gs1 = "注:得分= 上传连续性得分*权重 + 上传表范围得分*权重 + 数据质量得分*权重";
		}
		List la = setDescData(workbook, row, iRow, cell, theme[0], titles1,
				hczhdfList, desc1, gs1, true);
		String desc2 = "";
		String gs2 = "";
		if (sclxxdfList.size() != 0) {
			desc2 = getHczhdfMs("上传连续性", sclxxdf, lxxGradeList);
			gs2 = "注:得分=期内上传数据天数/期内天数*100";
		}
		la = setDescData((HSSFWorkbook) la.get(1), row, ((Integer) la.get(0))
				.intValue(), cell, theme[1], titles2, sclxxdfList, desc2, gs2, true);

		String desc3 = "";
		String gs3 = "";
		if (sjscfwdfList.size() != 0) {
			desc3 = getHczhdfMs("数据上传范围", sjscfwdf, fwdfGradeList);
			gs3 = "注:得分=实际上传表范围/应上传表范围*100";
		}
		la = setDescData((HSSFWorkbook) la.get(1), row, ((Integer) la.get(0))
				.intValue(), cell, theme[2], titles3, sjscfwdfList, desc3, gs3, true);

		String desc4 = "";
		String gs4 = "";
		if (sjzldfList.size() != 0) {
			desc4 = getHczhdfMs("数据质量", sjzldf, zldfGradeList);
			gs4 = "注:分项得分 = (数据总条数—错误数)/数据总条数*100;    数据质量得分 = 字典核查分项得分*权重 + 非空核查分项得分*权重 + 关联核查分项得分*权重 + 可追溯性核查分项得分*权重;";
		}
		
		la = setDescData((HSSFWorkbook) la.get(1), row, ((Integer) la.get(0))
				.intValue(), cell, theme[3], titles4, sjzldfList, desc4, gs4, true);

		//指标对比
		la = setDescData((HSSFWorkbook) la.get(1), row, ((Integer) la.get(0))
				.intValue(), cell, theme[4], titles5, zbdbList, "zbdb", "", false);
		
	// 六、评价与建议:
		iRow = ((Integer) la.get(0)).intValue() + 2;
		row = sheet.createRow(iRow);
		cell = row.createCell(0);
		cell.setCellStyle(ExtportUtil.getStyle2(workbook));
		cell.setCellValue(new HSSFRichTextString(theme[5]));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));

		iRow = iRow + 1;
		row = sheet.createRow(iRow);
		cell = row.createCell(0);
		cell.setCellStyle(ExtportUtil.getStyle3(workbook));
		cell.setCellValue(new HSSFRichTextString(msg));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));
		
		return workbook;
	}
	


	private String getHczhdfMs(String type, double fs, List list) {
		StringBuffer sb = new StringBuffer("本期" + type + "得分" + fs + ",");
		String[] grade = { "优", "良", "中", "差" };
		for (int i = 0; i < 4; i++) {
			int jgs = (Integer) list.get(2 * i);
			sb.append("本项得分为" + grade[i] + "的机构有" + list.get(2 * i) + "家医院");
			if (jgs != 0) {
				sb.append(":" + list.get(2 * i + 1) + "");
			}
			sb.append(";");
		}
		sb.append("详细列表如下:");
		return sb.toString();
	}

	private List setDescData(HSSFWorkbook workbook, HSSFRow row, int iRow,
			HSSFCell cell, String title, String[] ths, List list, String descc,
			String gs, boolean isOrder) {
		HSSFSheet sheet = workbook.getSheetAt(0);
		// ------------------------ 小标题 ----------------------------------
		iRow = iRow + 2;// 空一行
		row = sheet.createRow(iRow);// 创建行
		HSSFCell xbt = null;
		xbt = row.createCell(0);// 创建单元格
		HSSFCellStyle style2 = ExtportUtil.getStyle2(workbook); // 设置单元格样式
		xbt.setCellStyle(style2);
		xbt.setCellValue(new HSSFRichTextString(title));
		// new CellRangeAddress(y1,x1,y2,x2)
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 3));

		HSSFCellStyle thStyle = ExtportUtil.getThStyle(workbook);
		HSSFCellStyle desc_sty = ExtportUtil.getStyle3(workbook); // 设置单元格样式
		if (list.size() == 0) {
			iRow = iRow + 1;
			row = sheet.createRow(iRow);
			HSSFCell desc = null;
			desc = row.createCell(0);
			thStyle.setFillForegroundColor(HSSFColor.RED.index);
			desc.setCellStyle(thStyle);
			desc.setCellValue(new HSSFRichTextString("期内没有符合条件的数据。"));
			sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 3));
		} else {
			// ------------------------ 描述 --------------------------------
			if(!descc.isEmpty()){
				iRow = iRow + 1;// 第3行 iRow= 2
				row = sheet.createRow(iRow);
				HSSFCell desc = null;
				desc = row.createCell(0);
				desc.setCellStyle(desc_sty);
				desc.setCellValue(new HSSFRichTextString(descc));
				sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0,
						ths.length - 1));
			}

			// ------------------------ 数据表格 ----------------------------------
			iRow = iRow + 1;// 第4行 iRow= 3
			row = sheet.createRow(iRow);
			int nColumn = ths.length;
			for (int i = 1; i <= nColumn; i++) {
				sheet.setColumnWidth(i - 1, 20 * 256);// 设置单元格宽度:18字符
				cell = row.createCell((i - 1));
				// --- 设置单元格样式 ---
				cell.setCellStyle(thStyle);
				// --- 给单元格赋值 ---
				cell.setCellValue(new HSSFRichTextString(ths[i - 1].toString()));
			}
			// --- 写入各条记录 ---
			iRow = iRow + 1;
			//导入的数据表格第一列是否有序号列
			if(isOrder){
				iRow = ExtportUtil.writeRecordsWithNo(row, sheet, nColumn, cell, workbook,
						iRow, list);
			}else{
				iRow = ExtportUtil.writeRecords(row, sheet, nColumn, cell, workbook,
						iRow, list);
			}
			// ------------------------- 注: -------------------
			if(!gs.isEmpty()){
				iRow = iRow + 1;
				row = sheet.createRow(iRow);
				HSSFCell ann = null;
				ann = row.createCell(0);
				HSSFCellStyle ann_sty = ExtportUtil.getStyle3(workbook);
				ann.setCellStyle(desc_sty);
				ann.setCellValue(new HSSFRichTextString(gs));
			}else{
				iRow = iRow + 1;
			}
			sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0,ths.length - 1));
		}
		List result = new ArrayList();
		result.add(iRow);
		result.add(workbook);
		return result;
	}

	public FxbgService getFxbgService() {
		return fxbgService;
	}

	public void setFxbgService(FxbgService fxbgService) {
		this.fxbgService = fxbgService;
	}

	public double getHczhdf() {
		return hczhdf;
	}

	public void setHczhdf(double hczhdf) {
		this.hczhdf = hczhdf;
	}

	public double getSclxxdf() {
		return sclxxdf;
	}

	public void setSclxxdf(double sclxxdf) {
		this.sclxxdf = sclxxdf;
	}

	public double getSjscfwdf() {
		return sjscfwdf;
	}

	public void setSjscfwdf(double sjscfwdf) {
		this.sjscfwdf = sjscfwdf;
	}

	public double getSjzldf() {
		return sjzldf;
	}

	public void setSjzldf(double sjzldf) {
		this.sjzldf = sjzldf;
	}

	public List getHczhdfList() {
		return hczhdfList;
	}

	public void setHczhdfList(List hczhdfList) {
		this.hczhdfList = hczhdfList;
	}

	public List getSclxxdfList() {
		return sclxxdfList;
	}

	public void setSclxxdfList(List sclxxdfList) {
		this.sclxxdfList = sclxxdfList;
	}

	public List getSjscfwdfList() {
		return sjscfwdfList;
	}

	public void setSjscfwdfList(List sjscfwdfList) {
		this.sjscfwdfList = sjscfwdfList;
	}

	public List getSjzldfList() {
		return sjzldfList;
	}

	public void setSjzldfList(List sjzldfList) {
		this.sjzldfList = sjzldfList;
	}

	public List getZhdfGradeList() {
		return zhdfGradeList;
	}

	public void setZhdfGradeList(List zhdfGradeList) {
		this.zhdfGradeList = zhdfGradeList;
	}

	public List getLxxGradeList() {
		return lxxGradeList;
	}

	public void setLxxGradeList(List lxxGradeList) {
		this.lxxGradeList = lxxGradeList;
	}

	public List getFwdfGradeList() {
		return fwdfGradeList;
	}

	public void setFwdfGradeList(List fwdfGradeList) {
		this.fwdfGradeList = fwdfGradeList;
	}

	public List getZldfGradeList() {
		return zldfGradeList;
	}

	public void setZldfGradeList(List zldfGradeList) {
		this.zldfGradeList = zldfGradeList;
	}

	public List getZbdbList() {
		return zbdbList;
	}

	public void setZbdbList(List zbdbList) {
		this.zbdbList = zbdbList;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getSd() {
		return sd;
	}

	public void setSd(String sd) {
		this.sd = sd;
	}

	public String getEd() {
		return ed;
	}

	public void setEd(String ed) {
		this.ed = ed;
	}

	public String getSsd() {
		return ssd;
	}

	public void setSsd(String ssd) {
		this.ssd = ssd;
	}

	public String getSed() {
		return sed;
	}

	public void setSed(String sed) {
		this.sed = sed;
	}

	public String getDs() {
		return ds;
	}

	public void setDs(String ds) {
		this.ds = ds;
	}
}

  4.

package com.wondersgroup.qyws.sjzk.action.sjhc;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.wondersgroup.qyws.sjzk.service.FxbgService;
import com.wondersgroup.qyws.sjzk.util.Constants;

@Controller()
@Scope("prototype")
public class ExportDwfxbgAction {
	@Autowired
	private FxbgService fxbgService;
	private List zhlxxdf;
	private List itbsList;
	private List zbdbList;
	private List sjzldfList;
	private List lxxGradeList;
	private List sjscfwdfList;
	private List zhdfGradeList;
	private List fwdfGradeList;
	private List zldfGradeList;
	private String sd = "";// 起始日期 - 查询条件
	private String ed = "";// 截止日期 - 查询条件
	private String ssd = "";// 起始日期 - 展示条件
	private String sed = "";// 截止日期 - 展示条件
	private String jgdm = "";
	private String ds;
	private String msg;

	public String exportDwfxbg() throws UnsupportedEncodingException {
		ActionContext context = ActionContext.getContext();
		ds = (String) context.getSession().get("ds");
		
		HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);
		response.setContentType("application/vnd.ms-excel");
		String csd = "";
		String ced = "";
		if (sd.isEmpty()) {
			// 默认执行
			int cha = ds.equals(Constants.CEN_INTER) ? 1 : 2;
			Calendar now = Calendar.getInstance();
			now.add(Calendar.DATE, -cha);
			ssd = now.get(Calendar.YEAR)+"年"+(now.get(Calendar.MONTH) + 1)+"月1日";
			sed = now.get(Calendar.YEAR)+"年"+(now.get(Calendar.MONTH) + 1)+"月"+(now.get(Calendar.DATE))+"日";
			ced = new SimpleDateFormat("yyyyMMdd").format(now.getTime());
			csd = ced.substring(0,6)+"01";//该月一号
			ed = new SimpleDateFormat("yyyy-MM-dd").format(now.getTime());
			sd = ed.substring(0,8)+"01";
		} else {
			// 条件查询
			String sm = "";
			String se = "";
			String em = "";
			String ee = "";
			sm = ExtportUtil.getValue(sd.substring(4, 6));
			se = ExtportUtil.getValue(sd.substring(6, 8));
			em = ExtportUtil.getValue(ed.substring(4, 6));
			ee = ExtportUtil.getValue(ed.substring(6, 8));
			ssd = sd.substring(0, 4)+"年"+sm+"月"+se+"日";
			sed = ed.substring(0, 4)+"年"+em+"月"+ee+"日";
			csd = sd.substring(0, 4)+sd.substring(5, 7)+sd.substring(8, 10);
			ced = ed.substring(0, 4)+ed.substring(5, 7)+ed.substring(8, 10);
		}
		Map vals = fxbgService.getDwFxbg(jgdm, csd, ced, ds);
		zhlxxdf = (List) vals.get("zhLxx");
		itbsList = (List) vals.get("itbsList");
		sjscfwdfList = (List) vals.get("sjscfwdfList");
		sjzldfList = (List) vals.get("zlhcList");
		zbdbList = (List) vals.get("zbdbList");

		// 综合得分机构评级:[3,'jg1,jg2,jg3']
		zhdfGradeList = (List) vals.get("zhdfGradeList");
		// 数据上传连续性得分机构评级
		lxxGradeList = (List) vals.get("lxxGradeList");
		// 数据上传范围得分机构评级
		fwdfGradeList = (List) vals.get("fwdfGradeList");
		// 数据质量得分机构评级
		zldfGradeList = (List) vals.get("zldfGradeList");
		
		// 指标对比zbdbList
		zbdbList = (List) vals.get("zbdbList");
		// 数据状况描述:
		msg = (String)vals.get("msg");
		
		String xlsName = zhlxxdf.get(6)+"数据上传核查报告.xls";
		// Excel文档对象,会把数据导入到这个文档
		HSSFWorkbook workbook = new HSSFWorkbook();
		response.setHeader("Content-Disposition", "attachment; filename="
				+ URLEncoder.encode(xlsName, "utf-8"));

		int iRow = 0;// 行下标,整个sheet的行标控制
		workbook = transHczhdfListToExcel(workbook, iRow);

		ServletOutputStream fOut;
		try {
			fOut = response.getOutputStream();
			workbook.write(fOut);
			fOut.flush();
			fOut.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	private HSSFWorkbook transHczhdfListToExcel(HSSFWorkbook workbook, int iRow) {
		// 创建工作表(sheet)
		HSSFSheet sheet = workbook.createSheet();
		workbook.setSheetName(0, zhlxxdf.get(6)+"数据上传核查报告");// 下标0为第一个sheet
		List datas = zhlxxdf;
		
		// ------------------------ 大标题 ----------------------------------
		// 给sheet创建一个行
		HSSFRow row = sheet.createRow(iRow);// iRow = 0
		HSSFCell cell = null;
		cell = row.createCell(0);// 创建一个单元格

		// 设置字体样式
		HSSFCellStyle cellStyle1 = ExtportUtil.getStyle1(workbook); // 标题单元格样式
		HSSFCellStyle style2 = ExtportUtil.getStyle2(workbook); // 二级标题单元格样式
		HSSFCellStyle rq_sty = ExtportUtil.getStyle3(workbook); // 日期文本单元格样式
		HSSFCellStyle desc_sty = ExtportUtil.getStyle3(workbook); // 描述文本单元格样式
		HSSFCellStyle thStyle = ExtportUtil.getThStyle(workbook); // 表格标题单元格样式

		cell.setCellStyle(cellStyle1);
		// 设置文件名第一行展示,这里题目名和sheet名一样
		cell.setCellValue(new HSSFRichTextString(zhlxxdf.get(6)+"数据上传核查报告"));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));

		// ------------------------ 日期说明 ----------------------------------
		iRow = iRow + 1;
		row = sheet.createRow(iRow);
		cell = row.createCell(0);
		rq_sty.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		cell.setCellStyle(rq_sty);
		cell.setCellValue(new HSSFRichTextString(ssd+" — "+sed));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));

		// 一、综合得分报告:
		iRow = iRow + 2;
		row = sheet.createRow(iRow);
		cell = row.createCell(0);
		cell.setCellStyle(style2);
		cell.setCellValue(new HSSFRichTextString("一、综合得分报告"));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 3));

		iRow = iRow + 1;
			setDescRow(iRow, row, cell, sheet, desc_sty, "本期数据质量核查综合得分为"
					+ datas.get(0) + "分。 其中上传连续性得分为" + ""
					+ datas.get(1) + "分。 上传范围得分为"
					+ datas.get(2) + "分。 数据质量得分为"
					+ datas.get(3) + "分。");

		iRow = iRow + 1;
		setDescRow(iRow, row, cell, sheet, desc_sty,
				"注:得分 = 上传连续性得分*权重 + 上传表范围得分*权重 + 数据质量得分*权重");

		// 二、上传连续性报告:
		iRow = iRow + 2;
		setDescRow(iRow, row, cell, sheet, style2, "二、上传连续性报告:");
		iRow = iRow + 1;
		setDescRow(iRow, row, cell, sheet, desc_sty, "本期上传连续性得分"
				+datas.get(1) + "分。期内上传天数为"
				+datas.get(4)+ " 天,期内天数为"
				+datas.get(5)+ "天。");

		iRow = iRow + 1;
		setDescRow(iRow, row, cell, sheet, desc_sty, "注:得分=期内上传数据天数/期内天数*100");

		// 三、数据上传范围报告:
		iRow = iRow + 2;
		setDescRow(iRow, row, cell, sheet, style2, "三、上传表范围报告:");
		// ------------------------ 数据表格 ----------------------------------
		if (datas.get(2) == null) {
			iRow = iRow + 1;
			row = sheet.createRow(iRow);
			setDescRow(iRow, row, cell, sheet, desc_sty, "本期数据上传总条数为0条。应上传表范围如下:");
		} else {
			iRow = iRow + 1;
			setDescRow(iRow, row, cell, sheet, desc_sty, "本期数据上传总条数为"
					+datas.get(7) + "条。应上传表范围如下((红色记录表示期内从未上传过数据的接口表)): ");

			iRow = iRow + 1;
			row = sheet.createRow(iRow);

			String[] ths1 = {"序号", "接口表", "接口表名称", "接口表类型" };
			int nColumn1 = ths1.length;
			for (int i = 1; i <= nColumn1; i++) {
				sheet.setColumnWidth(i - 1, 20 * 256);// 设置单元格宽度:18字符
				cell = row.createCell((i - 1));
				cell.setCellStyle(thStyle);
				cell.setCellValue(new HSSFRichTextString(ths1[i - 1].toString()));
			}
			// --- 写入表格数据记录 ---
			iRow = iRow + 1;
			iRow = ExtportUtil.writeRecordsWithNo(row, sheet, nColumn1, cell, workbook,
					iRow, itbsList);

			// 本项得分为 58.25 分。详细列表如下:
			iRow = iRow + 1;
			setDescRow(iRow, row, cell, sheet, desc_sty, "本项得分为"
					+datas.get(2)+ "分。详细列表如下:");

			iRow = iRow + 1;
			row = sheet.createRow(iRow);
			String[] ths2 = { "序号", "日期", "实际上传表范围", "应上传表范围", "得分" };
			int nColumn2 = ths2.length;
			for (int i = 1; i <= nColumn2; i++) {
				sheet.setColumnWidth(i - 1, 20 * 256);// 设置单元格宽度:18字符
				cell = row.createCell((i - 1));
				cell.setCellStyle(thStyle);
				cell.setCellValue(new HSSFRichTextString(ths2[i - 1].toString()));
			}
			iRow = iRow + 1;
			iRow = ExtportUtil.writeRecordsWithNo(row, sheet, nColumn2, cell, workbook,
					iRow, sjscfwdfList);
		}

		iRow = iRow + 1;
		setDescRow(iRow, row, cell, sheet, desc_sty, "注:得分 = 实际上传表范围/应上传表范围*100");

		// 四、数据质量报告:
		iRow = iRow + 2;
		setDescRow(iRow, row, cell, sheet, style2, "四、数据质量报告:");

		iRow = iRow + 1;
		row = sheet.createRow(iRow);
		if (datas.get(0) == null) {
			setDescRow(iRow, row, cell, sheet, desc_sty, "详细列表如下:");
		} else {
			String[] titles5 = { "序号","检查指标", "总条数", "错误数", "得分" };
			int tlsz5 = titles5.length;
			for (int i = 1; i <= tlsz5; i++) {
				sheet.setColumnWidth(i - 1, 20 * 256);// 设置单元格宽度:18字符
				cell = row.createCell((i - 1));
				cell.setCellStyle(thStyle);
				cell.setCellValue(new HSSFRichTextString(titles5[i - 1].toString()));
			}
			iRow = iRow + 1;
			iRow = ExtportUtil.writeRecordsWithNo(row, sheet, tlsz5, cell, workbook,
					iRow, sjzldfList);
		}
		iRow = iRow + 1;
		setDescRow(iRow, row, cell, sheet, desc_sty,
				"注:分项得分=(数据总条数—错误数)/数据总条数*100");
		iRow = iRow + 1;
		setDescRow(iRow, row, cell, sheet, desc_sty, "数据质量得分=字典核查分项得分*权重 + 非空核查分项得分*权重 + 关联核查分项得分*权重 + 可追溯性核查分项得分*权重");

		// 五、业务指标核对报告:
		iRow = iRow + 2;
		setDescRow(iRow, row, cell, sheet, style2, "五、业务指标核对报告:");

		String[] titles6 = { "数据来源\\指标", "门诊人次", "门诊总收入", "门急诊药品收入", 
				"门诊检验人次", "门诊检查人次", "门诊手术人次", "出院人次", "出院病人床日数", "出院病人总收入", "出院病人药品收入",
				 "住院检验人次", "住院检查人次", "住院手术人次" };
		int tlsz6 = titles6.length;
		iRow = iRow + 1;
		row = sheet.createRow(iRow);
		for (int i = 1; i <= tlsz6; i++) {
			sheet.setColumnWidth(i - 1, 20 * 256);// 设置单元格宽度:18字符
			cell = row.createCell(i - 1);
			cell.setCellStyle(thStyle);
			cell.setCellValue(new HSSFRichTextString(titles6[i - 1]));
		}
		iRow = iRow + 1;
		iRow = ExtportUtil.writeRecords(row, sheet, tlsz6, cell, workbook, iRow,
				zbdbList);

		// 六、评价与建议:
		iRow = iRow + 2;
		setDescRow(iRow, row, cell, sheet, style2, "六、评价与建议:");

		iRow = iRow + 1;
		setDescRow(iRow,row,cell,sheet,desc_sty, msg);
		return workbook;
	}

	private void setDescRow(int iRow, HSSFRow row, HSSFCell cell,
			HSSFSheet sheet, HSSFCellStyle descSty, String string) {
		row = sheet.createRow(iRow);
		cell = row.createCell(0);
		cell.setCellStyle(descSty);
		cell.setCellValue(new HSSFRichTextString(string));
		sheet.addMergedRegion(new CellRangeAddress(iRow, iRow, 0, 4));
	}

	public FxbgService getFxbgService() {
		return fxbgService;
	}

	public void setFxbgService(FxbgService fxbgService) {
		this.fxbgService = fxbgService;
	}

	public List getZhlxxdf() {
		return zhlxxdf;
	}

	public void setZhlxxdf(List zhlxxdf) {
		this.zhlxxdf = zhlxxdf;
	}

	public List getItbsList() {
		return itbsList;
	}

	public void setItbsList(List itbsList) {
		this.itbsList = itbsList;
	}

	public List getSjscfwdfList() {
		return sjscfwdfList;
	}

	public void setSjscfwdfList(List sjscfwdfList) {
		this.sjscfwdfList = sjscfwdfList;
	}

	public List getSjzldfList() {
		return sjzldfList;
	}

	public void setSjzldfList(List sjzldfList) {
		this.sjzldfList = sjzldfList;
	}

	public List getZbdbList() {
		return zbdbList;
	}

	public void setZbdbList(List zbdbList) {
		this.zbdbList = zbdbList;
	}

	public List getZhdfGradeList() {
		return zhdfGradeList;
	}

	public void setZhdfGradeList(List zhdfGradeList) {
		this.zhdfGradeList = zhdfGradeList;
	}

	public List getLxxGradeList() {
		return lxxGradeList;
	}

	public void setLxxGradeList(List lxxGradeList) {
		this.lxxGradeList = lxxGradeList;
	}

	public List getFwdfGradeList() {
		return fwdfGradeList;
	}

	public void setFwdfGradeList(List fwdfGradeList) {
		this.fwdfGradeList = fwdfGradeList;
	}

	public List getZldfGradeList() {
		return zldfGradeList;
	}

	public void setZldfGradeList(List zldfGradeList) {
		this.zldfGradeList = zldfGradeList;
	}

	public String getSd() {
		return sd;
	}

	public void setSd(String sd) {
		this.sd = sd;
	}

	public String getEd() {
		return ed;
	}

	public void setEd(String ed) {
		this.ed = ed;
	}

	public String getSsd() {
		return ssd;
	}

	public void setSsd(String ssd) {
		this.ssd = ssd;
	}

	public String getSed() {
		return sed;
	}

	public void setSed(String sed) {
		this.sed = sed;
	}

	public String getDs() {
		return ds;
	}

	public void setDs(String ds) {
		this.ds = ds;
	}

	public String getJgdm() {
		return jgdm;
	}

	public void setJgdm(String jgdm) {
		this.jgdm = jgdm;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
}

 

 

 

相关标签: poi.jar poi excel