用Excel導出數據(一)

按要求從表中找出數據,再以Excel形式下載,操作步驟如下:
Action類
public ActionForward doBillPackDown(BActionContext context)
throws Exception {
try{
HttpServletResponse response = context.getResponse();
response.setContentType("application/multipart");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String TodayDate = sdf.format(new Date());
String fileName = "Download_BillPack_" + TodayDate + ".xls";
response.setHeader("Content-Disposition", "filename=" + fileName);
EPickService service = (EPickService) context.findService("epickService", EPickService.class);
String[] ids= (String[]) context.getRequest().getParameterValues("ids");
logger.info("======電子提單明細下載開始=======");
EPickSearchModel mdl = new EPickSearchModel();
mdl.setIds(ids);
HSSFWorkbook workbook = service.downBillPackDetail(mdl);
workbook.write(response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
return null;
}catch (Exception e) {
e.printStackTrace();
logger.error(e);
if (e.getMessage()!=null && e.getMessage().startsWith("msg:")) {
context.getRequest().setAttribute("msg",
e.getMessage().substring(4));
} else {
context.getRequest().setAttribute("error", e);
}
return context.findForward("fail");
}
}

ServiceImpl類:
public HSSFWorkbook downBillPackDetail(EPickSearchModel mdl)
throws Exception {
return epickDao.downBillPackDetail(mdl);
}

DaoImpl類:
public HSSFWorkbook downBillPackDetail(EPickSearchModel mdl)
throws Exception {
String[] billIds = mdl.getIds();
StringBuffer hql = new StringBuffer();
hql.append("select t.billId,t.orderNum,t.shopsign,t.specDesc,t.packId,t.netWeight,t.grossWeight" +
" from TplBillPack t where t.billNum in (");
int idSize = billIds.length;
for (int i=0; i<idSize-1;i++ ){
hql.append(""+new String(billIds[i]) + ",");
}
hql.append(""+new String(billIds[idSize-1]) + ")");
hql.append(" order by t.billId, t.orderNum");
List billPackList = this.queryByHql(hql.toString());
//實例化一個hssfworkbook對象
HSSFWorkbook wb = new HSSFWorkbook();
downBillPackDetailHelp(wb,billPackList);
return wb;
}

public void downBillPackDetailHelp(HSSFWorkbook wb, List billPackList)throws Exception{
try{
Object [] objHead=getHeadFromBillPack();
LinkedList headList=(LinkedList)objHead[0];

//創建一個sheet
HSSFSheet sheet = wb.createSheet("contract_list");

//設置單元格的樣式
HSSFCellStyle cellStyle0 = wb.createCellStyle();
cellStyle0.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle0.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

short rownum = 0;
//創建第一行
HSSFRow srow = sheet.createRow(rownum);
// HSSFCell cellHead = null;
// srow = sheet.createRow( (short) rownum);
//
// srow.setHeightInPoints(30);//設置高度
// cellHead = srow.createCell((short) 0);
// cellHead.setEncoding(HSSFCell.ENCODING_UTF_16);//設置編碼
// cellHead.setCellValue("電子提單明細"); //單元格內容
// cellHead.setCellStyle(cellStyle0); //單元格樣式
//
// srow = sheet.createRow( (short) 1);
// //srow.setHeight( (short) 300);
// rownum++;
// srow = sheet.createRow(rownum);

for (int i = 0; i < headList.size(); i++){
HSSFCell cell = srow.createCell((short) (i));
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(headList.get(i).toString());
}

for(Iterator it = billPackList.iterator();it.hasNext();) {
Object[] obj = (Object[])it.next();
rownum++;
srow = sheet.createRow(rownum);
for (int j = 0; j < headList.size(); j++) {
HSSFCell cell=srow.createCell((short)j);
if(obj[j]==null)
cell.setCellValue("");
else
cell.setCellValue(obj[j].toString());
}
}
}catch(Exception e){
e.printStackTrace();
}
}

/**
* 獲取Excel第一行標題
* @return
*/
private Object []getHeadFromBillPack(){
List head =new LinkedList();
head.add("提單號");
head.add("合同號");
head.add("牌號");
head.add("規格");
head.add("捆包號");
head.add("淨重");
head.add("毛重");

Object [] obj=new Object[1];
obj[0]=head;
return obj;
}

jsp頁面中的js代碼:
function billPackDown(){
var ids = document.getElementsByName('checkbox');
var ids_java = new Array();
var count = 0;
var msg = "";

if(ids.length == 0)
{
alert("現在沒有記錄信息,不能下載!");
return;
}

for(i=0; i < ids.length; i++)
{
if(ids[i].checked)
{
count ++;
ids_java.push(ids[i].value);
}
}

if(count < 1 || count > 5)
{
alert("電子提單明細下載需至少選擇1條且不多於5條的提單記錄!");
return;
}

if (msg != ""){
msg += "請用戶重新選擇!";
alert(msg);
return;
}

window.open('../ePick/ePickPrintManage.do?method=billPackDown&ids='+ids_java,'','width=800,height=500,top=100,left=150,scrollbars=yes,resizable=yes');
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章