js
function importexecttogerenbiangen(){
var $bodydiv = $("div[name='gerenkehuyewu']");
var $table = $bodydiv.find("table[name='dg']");
var rows = $table.datagrid("getRows");
if(rows.length==0){
$.messager.alert("提示", "下載數據不能爲空!", 'info');
return false;
}
var opts = $table.datagrid('getColumnFields');
var table=[];
for(var i=0;i<opts.length;i++){
var tablename=$table.datagrid('getColumnOption',opts[i]).title+","+$table.datagrid('getColumnOption',opts[i]).field;
table.push(tablename);
}//獲得title和field方便後臺對應
rows = JSON.stringify(rows);
var month = $bodydiv.find("input[name='month']").val();
$.messager.confirm('確認', '確認把該搜索結果導出Excel表格 ?', function(r) {
if (r) {
var url = 'xxx?rows='+rows+'&table='+table
window.location.href=url;
}
});
}
controller
@RequestMapping(value = "xxx")
@ResponseBody
public ModelAndView xxx(String rows,String[] table) {
List<TongjiForGerenXuQian> gerenyewureport = Json2Bean.getListBean(rows, TongjiForGerenXuQian.class);
Map<String, String> ziDuan = new HashMap<String, String>();
for(int i=0;i<table.length;i++){
ziDuan.put(0+"-"+table[1], table[0]);
if(i%2==0){
ziDuan.put(i/2+"-"+table[i+1], table[i]);
}
}
Map<String, Object> model = new HashMap<String, Object>();
model.put("listData", gerenyewureport);
model.put("ziDuan", ziDuan);
System.out.println(BeanJson.bean2json(gerenyewureport));
return new ModelAndView(new ExcelForGerenYewuReport(), model);
}
ExcelForGerenYewuReport
@SuppressWarnings("deprecation")
public class ExcelForGerenYewuReport extends AbstractExcelView{
@SuppressWarnings("unchecked")
@Override
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String excelName = "xxx.xls";
// 設置response方式,使執行此controller時候自動出現下載頁面,而非直接使用excel打開
response.setContentType("APPLICATION/OCTET-STREAM");
// response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(excelName, "UTF-8"));
response.setHeader("Content-Disposition", "attachment; filename="+ new String(excelName.getBytes("GBK"),"ISO8859-1"));
Map<String, String> ziDuan = (Map<String, String>) model.get("ziDuan");
List<TongjiForGerenXuQian> listData = (List<TongjiForGerenXuQian>) model.get("listData");
Object[] keys = ziDuan.keySet().toArray();
String[] ziDuanKeys = new String[keys.length];
for (int k = 0; k < keys.length; k++) {
String temp = keys[k].toString();
int xuHao = Integer.valueOf(temp.substring(0, 1));
ziDuanKeys[xuHao] = temp.substring(temp.indexOf("-")+1,temp.length());
}
//單元格樣式
HSSFCellStyle headStyle = ExcelUtil.createCellStyle(workbook,(short)18,true,1);//表頭標題行樣式
//合併單元格CellRangeAddress構造參數依次表示起始行,截至行,起始列, 截至列
CellRangeAddress crdHeadTitle = new CellRangeAddress(0,0,0,ziDuanKeys.length-1);//表頭標題合併單元格
//創建一個sheet工作表
HSSFSheet sheet = workbook.createSheet("xxx");
sheet.addMergedRegion(crdHeadTitle);
//創建表頭標題行
HSSFRow headtitlerow = sheet.createRow(0);
ExcelUtil.addCell(headtitlerow, 0, headStyle, "xxx");
HSSFRow headerrow = sheet.createRow(1);
for (int k = 0; k < ziDuanKeys.length; k++) {
HSSFCell cell = headerrow.createCell(k);
sheet.setColumnWidth(k, 6000);
cell.setCellValue(new HSSFRichTextString(ziDuan.get(k
+"-"+ ziDuanKeys[k])));
}
//創建列標題;並且設置列標題
for (int i = 0; i < listData.size(); i++) {
HSSFRow row = sheet.createRow(2+i);
Object obj = listData.get(i);
for (int j = 0; j < ziDuanKeys.length; j++) {
HSSFCell cell1 = row.createCell(j);
String ziDuanName = (String) ziDuanKeys[j];
System.out.println(ziDuanName);
ziDuanName = ziDuanName.replaceFirst(ziDuanName
.substring(0, 1), ziDuanName.substring(0, 1)
.toUpperCase());
ziDuanName = "get" + ziDuanName;
Class clazz = Class.forName(obj.getClass().getName());
Method[] methods = clazz.getMethods();
Pattern pattern = Pattern.compile(ziDuanName);
Matcher mat = null;
for (Method m : methods) {
mat = pattern.matcher(m.getName());
if (mat.find()) {
Object shuXing = m.invoke(obj, null);
if (shuXing != null) {
cell1.setCellValue(shuXing.toString());//這裏可以做數據格式處理
} else {
cell1.setCellValue("");
}
break;
}
}
}
}
}
}