/** 數據導入到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, "導出社保繳納申請數據失敗!");
}
}