前两天公司的同事用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();
??}
?}