查詢數據庫數據導出到Excel

/** 數據導入到Excel
	 * @since 1.0
	 * @param controller
	 * @param titles  標題集合,數據庫列  對應的名稱
	 * @param list  需要導出的數據
	 * @param idName  數據id 需要放在第一列
	 * @param name  Excel文件名稱
	 * @throws Exception
	 * <br><b>作者: @author WangDongdong</b>
	 * <br>創建時間:2017-6-7 下午6:47:58
	 */
	public static boolean toExcel(Controller controller,Map<String,Object> titles, List<Record> list,String idName,String name) throws Exception {
		OutputStream os = null;
		try {// 取得一個輸出流
			os = controller.getResponse().getOutputStream();
		} catch (IOException e) {
			e.printStackTrace();
		}
		controller.getResponse().reset();// 清空輸出流
		// 下面是對中文文件名的處理
		// 設置相應內容的編碼格式
		controller.getResponse().setCharacterEncoding("utf-8");
		// 把excel文件名的編碼格式再設置一下
		name = java.net.URLEncoder.encode(name+DateUtils.getTimeCode(), "utf-8");// 這是給excel表格起名字用的
		controller.getResponse().setHeader(
				"Content-Disposition",
				"attachment;filename="
						+ new String(name.getBytes("UTF-8"), "GBK") + "."+CommCode.EXCEL_SUFFIX_XLS);
		controller.getResponse().setContentType("application/msexcel");// 定義輸出類型
		// 創建工作簿
		WritableWorkbook workbook = Workbook.createWorkbook(os);
		try {
			// 創建新的一頁--標題
			WritableSheet sheet = workbook.createSheet("First Sheet", 0);
			Set<String> keySet2 = titles.keySet();
			int s = 0 ;
			if(StringUtils.isNotBlank(idName)){
				Object title = titles.get(idName);//獲取第一列id
				sheet.addCell(new jxl.write.Label(0, 0, (String) title));//添加到第一列
				keySet2.remove(idName);
				s = 1;
			}
			for (String string : keySet2) {
				Object title2 = titles.get(string);
				sheet.addCell(new jxl.write.Label(s, 0, (String) title2));
				++s;
			}
			
			// 將數據追加-- 標題下對應的數據值
			for (int i = 1; i <= list.size(); i++) {
				Record record = list.get(i-1);
				Map<String, Object> columns = record.getColumns();
				Set<String> keySet = columns.keySet();
				
				int j = 0;
				if(StringUtils.isNotBlank(idName)){
					String object = record.get(idName);
					sheet.addCell(new jxl.write.Label(0, i, object));
					record.remove(idName);
					j = 1;
				}
				
				for (String string : keySet2) {
					for (String str : keySet) {
						if(str.equals(string)){
							Object object3 = record.get(string);
							String object2 = object3==null?"":record.get(string).toString();
							sheet.addCell(new jxl.write.Label(j, i, object2));
						}
					}
					if(keySet2.contains(string)){
						++j;
					}
				}
			}
			workbook.write();
			workbook.close();
			os.flush();
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
@Before({Tx.class})
	public void toExport() throws Exception{
		String time = getPara("time");
		String user = getPara("user");
		Integer status = getParaToInt("status");
		Integer type = getParaToInt("type");
		Integer onlian = getParaToInt("onlian");
		Integer payment = getParaToInt("payment");
		String baoxianTypes = getPara("baoxianTypes");
		Record getpage = userSheBaoService.getpage(this, time, StringUtils.isNotBlank(user)?user.trim():"", status, type, onlian, baoxianTypes,payment,true);
		List<Record> list = getpage.get("list");
		LinkedHashMap<String,Object> titles = new LinkedHashMap<String, Object>();
		titles.put("userName","申請人");
		titles.put("userPhone","手機號");
		titles.put("baoxianTypeNames","申請社保種類");
		titles.put("onlineName","支付方式");
		titles.put("usershebaoTypeName","用戶類型");
		titles.put("shebaoapplytime","申請時間");
		titles.put("shebaoCheckStatusName","審覈狀態");
		titles.put("checkMsg","審覈消息");
		titles.put("name","審覈人");
		if(payment!=null && payment.equals(1)){
			titles.put("paymentName","繳費狀態");
			titles.put("month","月份");
			titles.put("yanglao","養老保險費用");
			titles.put("yiliao","醫療保險費用");
			titles.put("shiye","失業保險費用");
			titles.put("shengyu","生育保險費用");
			titles.put("gongshang","工傷保險費用");
			titles.put("shebaoMoney","保險繳費總額");
		}
		boolean excel = ExcelUtils.toExcel(this,titles,list,"", "社保繳納");
		if(excel){
			JsonPrint.print(this, true, "導出社保繳納申請數據成功!");
		}else{
			JsonPrint.print(this, false, "導出社保繳納申請數據失敗!");
		}
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章