前两天公司的同事用java jxl写了一段导出excel的代码,值得学习,现提供代码如下:(导出一个list,要作到iterator)
首先导出jxl.jar,然后方法如下:
/**
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward 得到输入的起始客户代码和结束客户代码,查询结算清单,返回结果
*/
public void doExportAsXLS(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String userCodeBegin = request.getParameter("uCodeBegin");
String userCodeEnd = request.getParameter("uCodeEnd");
log.info("userCodeBegin " + userCodeBegin.toString());
log.info("userCodeEnd " + userCodeEnd.toString());
if (userCodeBegin == null || userCodeBegin.equals("")) {
userCodeBegin = userCodeEnd;
}
if (userCodeEnd == null || userCodeEnd.equals("")) {
userCodeEnd = userCodeBegin;
}
List balanceList = settleService.getSettleBill(userCodeBegin,
userCodeEnd);
OutputStream os = null;
WritableWorkbook wwb = null;
Date date = new Date();
Format format = new SimpleDateFormat("yyyyMMdd");
String strDate = format.format(date);
try {
os = new FileOutputStream(strDate + "settle.xls");
wwb = Workbook.createWorkbook(os);
Iterator it = balanceList.iterator();
doConfigExcel(it, wwb);
} catch (Exception e) {
} finally {
try {
wwb.write();
wwb.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
response.setHeader("Content-disposition", "attachment;filename="
+ strDate + "settle.xls\"");
response.setContentType("application/msexcel");
try {
FileInputStream fileInputStream = new FileInputStream(strDate
+ "settle.xls");
OutputStream out = response.getOutputStream();
int i = 0;
while ((i = fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void doConfigExcel(Iterator it, WritableWorkbook wwb) {
try {
while (it.hasNext()) {
Label lchild;
SettleVo sv = (SettleVo) it.next();
String userCode = sv.getUserCode();
int i = 2;
int j = 0;
WritableFont wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableCellFormat wcfF = new WritableCellFormat(wf);
WritableSheet ws = wwb.createSheet(userCode, 0);
Label labelMain = new Label(4, 0, "中国玉米淀粉网 -- 客户结算清单",wcfF);
Label labelMain1 = new Label(4, 1, "客户结算清单",wcfF);
ws.addCell(labelMain);
ws.addCell(labelMain1);
lchild = new Label(0, 2, "客户代码");
ws.addCell(lchild);
lchild = new Label(0, 3, userCode);
ws.addCell(lchild);
String code = sv.getCode();
lchild = new Label(2, 2, "摊位代码");
ws.addCell(lchild);
lchild = new Label(2, 3, code);
ws.addCell(lchild);
String fdate = sv.getFormatDate();
lchild = new Label(4, 2, "日期");
ws.addCell(lchild);
lchild = new Label(4, 3, fdate);
ws.addCell(lchild);
lchild = new Label(4, 4, "当日成交清单",wcfF);
ws.addCell(lchild);
Iterator its = sv.getOrders().iterator();
lchild = new Label(0, 5, "序 号");
ws.addCell(lchild);
lchild = new Label(2, 5, "交货时间");
ws.addCell(lchild);
lchild = new Label(4, 5, "市 场");
ws.addCell(lchild);
lchild = new Label(6, 5, "合约名称");
ws.addCell(lchild);
lchild = new Label(8, 5, "成交时间");
ws.addCell(lchild);
lchild = new Label(10, 5, "上网时间");
ws.addCell(lchild);
lchild = new Label(12, 5, "价 格");
ws.addCell(lchild);
lchild = new Label(14, 5, "数 量");
ws.addCell(lchild);
lchild = new Label(16, 5, "类 型");
ws.addCell(lchild);
int ii = 6;
BigDecimal totalDealprice = new BigDecimal(0);
Long totalAmount = new Long(0);
while (its.hasNext()) {
ii ++;
TSpotOrder order = (TSpotOrder) its.next();
String ordercode = order.getOrderCode();
lchild = new Label(0, ii, ordercode);
ws.addCell(lchild);
String tradeTime = order.getLastTradeTime().toString();
lchild = new Label(2, ii, tradeTime);
ws.addCell(lchild);
String exchange = order.getExchange();
lchild = new Label(4, ii, exchange);
ws.addCell(lchild);
String stockname = order.getFuturesStockBase()
.getStockName();
lchild = new Label(6, ii, stockname);
ws.addCell(lchild);
String dealtime = order.getForMateDealTime();
lchild = new Label(8, ii, dealtime);
ws.addCell(lchild);
lchild = new Label(10, ii, "-");
ws.addCell(lchild);
String dealprice = order.getDealPrice().toString();
lchild = new Label(12, ii, dealprice);
ws.addCell(lchild);
totalDealprice = totalDealprice.add(order.getDealPrice());
String amount = String.valueOf(order.getAmount());
lchild = new Label(14, ii, amount);
ws.addCell(lchild);
totalAmount = totalAmount + order.getAmount();
String buy = order.getBuyFormat();
lchild = new Label(16, ii, buy);
ws.addCell(lchild);
}
lchild = new Label(0, ii + 1, "合计");
ws.addCell(lchild);
lchild = new Label(12, ii + 1, totalDealprice.toString());
ws.addCell(lchild);
lchild = new Label(14, ii + 1, totalAmount.toString());
ws.addCell(lchild);
int jj = ii + 3;
int jjj = jj + 2;
lchild = new Label(4, ii + 2, "订货表",wcfF);
ws.addCell(lchild);
lchild = new Label(0, jj, "交货月份");
ws.addCell(lchild);
lchild = new Label(2, jj, "市 场");
ws.addCell(lchild);
lchild = new Label(4, jj, "合约名称");
ws.addCell(lchild);
lchild = new Label(6, jj, "买 / 卖");
ws.addCell(lchild);
lchild = new Label(8, jj, "平均价格 ");
ws.addCell(lchild);
lchild = new Label(10, jj, "数 量");
ws.addCell(lchild);
lchild = new Label(12, jj, "保证金");
ws.addCell(lchild);
lchild = new Label(14, jj, "浮 亏");
ws.addCell(lchild);
BigDecimal totalAvgprice = new BigDecimal(0);
Long totalAvgamount = new Long(0);
BigDecimal totalDeposit = new BigDecimal(0);
BigDecimal totalProloss = new BigDecimal(0);
Iterator _its = sv.getHolds().iterator();
while (its.hasNext()) {
jjj ++ ;
HoldVo4settle hold = (HoldVo4settle) _its.next();
String month = hold.getDeliverMonth();
lchild = new Label(0, jjj, month);
ws.addCell(lchild);
String market = hold.getMarket();
lchild = new Label(2, jjj, market);
ws.addCell(lchild);
String ordername = hold.getOrderName();
lchild = new Label(4, jjj, ordername);
ws.addCell(lchild);
String buyformat = hold.getBuyFormat();
lchild = new Label(6, jjj, buyformat);
ws.addCell(lchild);
String avgprice = hold.getPrice().toString();
lchild = new Label(8, jjj, avgprice);
ws.addCell(lchild);
totalAvgprice = totalAvgprice.add(hold.getPrice());
String avgamount = hold.getAmount().toString();
lchild = new Label(10, jjj, avgamount);
ws.addCell(lchild);
totalAvgamount = totalAvgamount + hold.getAmount();
String deposit = hold.getDeposit().toString();
lchild = new Label(12, jjj, deposit);
ws.addCell(lchild);
totalDeposit = totalDeposit.add(hold.getDeposit());
String proloss = hold.getPro_loss().toString();
lchild = new Label(14, jjj, proloss);
ws.addCell(lchild);
totalProloss = totalProloss.add(hold.getPro_loss());
}
lchild = new Label(0, jjj , "合计");
ws.addCell(lchild);
lchild = new Label(8, jjj, totalAvgprice.toString());
ws.addCell(lchild);
lchild = new Label(10, jjj, totalAvgamount.toString());
ws.addCell(lchild);
lchild = new Label(12, jjj, totalDeposit.toString());
ws.addCell(lchild);
lchild = new Label(14, jjj, totalProloss.toString());
ws.addCell(lchild);
lchild = new Label(4, jjj + 2, "资金结算表",wcfF);
ws.addCell(lchild);
BigDecimal capital = sv.getAddCapital();
lchild = new Label(0, jjj + 3, "+ 当日存入");
ws.addCell(lchild);
lchild = new Label(6, jjj + 3, "- 当日支出 ");
ws.addCell(lchild);
lchild = new Label(0, jjj + 4, "+ 当日交易盈亏");
ws.addCell(lchild);
lchild = new Label(6, jjj + 4, "- 交易手续费 ");
ws.addCell(lchild);
if(capital != null){
lchild = new Label(2, jjj + 3, capital.toString());
ws.addCell(lchild);
}
BigDecimal redcapital = sv.getReduceCapital();
if(redcapital != null){
lchild = new Label(8, jjj + 3, redcapital.toString());
ws.addCell(lchild);
}
BigDecimal pro_loss = sv.getPro_loss();
if(pro_loss != null){
lchild = new Label(2, jjj + 4, pro_loss.toString());
ws.addCell(lchild);
}
BigDecimal fee = sv.getFee();
if(fee != null){
lchild = new Label(8, jjj + 4, fee.toString());
ws.addCell(lchild);
}
}
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}