1前台响应
onExcelBtnClick: function(button, e, eOpts) {
var gridpanel = this.getRunGrid();
var cm=gridpanel.columns;
//封装表格数据
var data=[];
var store = gridpanel.getStore();
store.each(function(record){
data.push(record.data);
},this);
//获取表头的dataIndex
var headerIndex=[];
Ext.Array.forEach( cm, function(item){
if (item.xtype == "gridcolumn"&&!item.isHidden()) {
headerIndex.push(item.dataIndex);
}
});
//获取表头的Text
var headText=[];
Ext.Array.forEach( cm, function(item){
if (item.xtype == "gridcolumn"&&!item.isHidden()) {
headText.push(item.text);
}
});
if (!Ext.fly('frmDummy')) {
var frm = document.createElement('form');
frm.id = 'frmDummy';
frm.name = gridpanel.getId();
frm.className = 'x-hidden';
document.body.appendChild(frm);
}
Ext.Ajax.request({
disableCaching: true ,
url: '../../sys/MyExportExcel!exportExcel.action',
method: 'POST',
isUpload: true,
form: Ext.fly('frmDummy'),
params: {
excleData:Ext.JSON.encode(data),
excleHeader:Ext.JSON.encode(headerIndex),
excleText:Ext.JSON.encode(headText)
}
});
}
2 后台解析数据
package com.kl.action.sys;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.kl.action.ParentAction;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/sys")
@Action(value = "MyExportExcel")
public class ExportExcel extends ActionSupport implements
ServletRequestAware, ServletResponseAware {
private String excleData;
private String excleHeader;
private String excleText;
protected HttpServletRequest request;
protected HttpServletResponse response;
public String getExcleData() {
return excleData;
}
public void setExcleData(String excleData) {
this.excleData = excleData;
}
public String getExcleHeader() {
return excleHeader;
}
public void setExcleHeader(String excleHeader) {
this.excleHeader = excleHeader;
}
public String getExcleText() {
return excleText;
}
public void setExcleText(String excleText) {
this.excleText = excleText;
}
public void exportExcel(){
JSONArray excle = JSONArray.fromObject(this.excleData);
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
// 解析表头
JSONArray dataHeader = JSONArray.fromObject(this.excleText);
HSSFRow headrow = sheet.createRow(0);
for (int col = 0; col
String mycell = dataHeader.getString(col);
HSSFCell cell = headrow.createCell(col);
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell.setCellValue(mycell);
}
int r=0;
for(Object o : excle) {
JSONObject excleObj = (JSONObject)o;
HSSFRow row=sheet.createRow((short)r+1);
//解析列
JSONArray dataIndex = JSONArray.fromObject(this.excleHeader);
for(int col=0;col
String mycell=dataIndex.getString(col);
mycell=excleObj.getString(mycell);
HSSFCell cell = row.createCell(col);
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell.setCellValue(mycell);
}
r++;
};
//通过Response把数据以Excel格式保存
response.reset();
response.setContentType("application/msexcel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
try {
response.addHeader("Content-Disposition", "attachment;filename=\""
+ new String(("test" + ".xls").getBytes("UTF-8"),
"ISO8859_1") + "\"");
OutputStream out = response.getOutputStream();
workbook.write(out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
示例依赖apache poi组件
请参考 官方案例和参考文档
运行结果: