java中如何导出excel表格

如果你想导入excel:请参考:http://blog.csdn.net/xuanzhangran/article/details/71603478
或者:http://blog.csdn.net/xuanzhangran/article/details/70158995
本框架使用ssm。
1:点击导出订单,按照你的查询田间导出数据,如果没有查询条件就全部导出。
2:在调用工具类的时候需要导包,
3:所以需要在eclipse里导入这里写图片描述
4:jia包下载路径,无需c币:http://download.csdn.net/detail/xuanzhangran/9813051
5:仔细看完代码即可实现。

前台代码:

    <script type="text/javascript">
        function orderExport(){
        var orderNumber = $("#orderNumber").val();
        var userName = $("#userName").val();
        var mobile = $("#mobile").val();
        var status = $("#status").val();
        var startTime = $("#startTime").val();
        var endTime = $("#endTime").val(); 
        window.location.href = "/orderExport.html?orderNumber="+orderNumber+"&      userName="+userName+
                  "&mobile="+mobile+"&status="+status+"&startTime="+startTime+"&endTime="+endTime; 
        }
    </script>

     <body>
        <div>
           <input type="button" class="searchbtns search" value="订单导出" onclick="orderExport()">//点击导出按钮调用function orderExport()需要查询的数据的条件带过去
        </div>
     </body>

后台代码:

      @RequestMapping("/orderExport.html")
    public void orderExport( HttpServletRequest request,
            @RequestParam(value="userName",required = false)String userName,
            @RequestParam(value="mobile",required = false)String mobile,
            @RequestParam(value="orderNumber",required = false)String 
            @RequestParam(value="status",required = false)Byte status,
            @RequestParam(value = "startTime", required = false) String startTime1,
            @RequestParam(value = "endTime", required = false) String endTime1,
            HttpServletResponse response){
                //此处为查询的条件      
            SuBusiness business=WebUtil.getLoginUser(request);//登录人信息
            business=SuBusinessService.selectByPhone(business.getMobile());
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("sellerBusinessId", business.getId());
            if(StringUtils.isNotBlank(userName)){           
                map.put("userName", userName);
            }else{          
                map.put("userName", null);
            }
            if(StringUtils.isNotBlank(mobile)){         
                map.put("mobile", mobile);
            }else{          
                map.put("mobile", null);
            }
            if(StringUtils.isNotBlank(orderNumber)){            
                map.put("orderNumber", orderNumber);
            }else{          
                map.put("orderNumber", null);
            }
            Date startTime = null;
            Date endTime = null;
            if(StringUtils.isNotBlank(startTime1)){
                String startTimeStr = startTime1+" 00:00:00";
                String endTimeStr = "";
                if(StringUtils.isBlank(endTime1)){
                    endTimeStr =  DateUtil.format(new Date(),"yyyy-MM-dd")+" 23:59:59";
                }else{
                    endTimeStr = endTime1+" 23:59:59";
                }
                startTime = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");
                endTime = DateUtil.parse(endTimeStr, "yyyy-MM-dd HH:mm:ss");
                map.put("startTime", startTime);
                map.put("endTime", endTime);
            }else{
                map.put("startTime", null);
                map.put("endTime", null);
            }
            if(status.intValue()!=99){
                map.put("status", status);  
            }else {
                if (status.intValue()==0) {
                    map.put("status", 0);
                }else {
                    map.put("status", null);
                }

            }
            //进行查询并导出
            List<Order> orderList = orderService.queryOnlineList(map);
            if (orderList != null && orderList.size()>0) {//查询的数据不为空就对数据进行导出
                //导出文件的标题
                String title = "商城订单"+DateUtil.format(new Date(), "yyyyMMdd")+".xls";
                //设置表格标题行
                String[] headers = new String[] {"序号","订单号", "花匠名称","订单时间","状态", "消费总额", "退款金额"};
                List<Object[]> dataList = new ArrayList<Object[]>();
                Object[] objs = null;
                for (Order order : orderList) {//循环每一条数据
                    objs = new Object[headers.length];
                    objs[0] = order.getOrderNumber();//序号
                    objs[1] = order.getOrderNumber();//订单号
                    objs[2] = order.getUser().getRealname()+"  "+order.getUser().getMobile();//花匠信息
                    if (order.getCreateDateTime() != null) {
                        objs[3] = DateUtil.format(order.getCreateDateTime(), "yyyy-MM-dd HH:mm:ss");//订单时间                  
                    }else {
                        objs[3] = "无";
                    }

                    if (order.getStatus().intValue() == -1) {                   
                        objs[4] = "未发货,申请退款";//状态
                    }
                    if (order.getStatus().intValue() == 0) {                    
                        objs[4] = "已取消";//状态
                    }
                    if (order.getStatus().intValue() == 1) {                    
                        objs[4]="待支付";//状态
                    }
                    if (order.getStatus().intValue() == 2) {                    
                        objs[4] = "待发货";//状态
                    }

                    objs[5]=order.getPay();//消费金额
                    if (order.getRefundMoney() != null) {
                        objs[6] = order.getRefundMoney();//退货金额         
                    }else {
                        objs[6] = "0.0";
                    }
                    //数据添加到excel表格
                    dataList.add(objs);
                }
                //使用流将数据导出
                OutputStream out = null;
                try {
                    //防止中文乱码
                    String headStr = "attachment; filename=\"" + new String( title.getBytes("gb2312"), "ISO8859-1" ) + "\"";
                    response.setContentType("octets/stream");
                    response.setContentType("APPLICATION/OCTET-STREAM");
                    response.setHeader("Content-Disposition", headStr);
                    out = response.getOutputStream();
                    //ExportExcel ex = new ExportExcel(title, headers, dataList);//有标题
                    ExportExcelSeedBack ex = new ExportExcelSeedBack(title, headers, dataList);//没有标题
                    ex.export(out);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    } 
需要调用的工具类:ExportExcelSeedBack
         如上操作会出现ExportExcelSeedBack错误:原因是因为是没有定义他的工具类,工具类如下:

    public class ExportExcelSeedBack {

    //显示的导出表的标题
    private String title;
    //导出表的列名
    private String[] rowName ;

    private List<Object[]>  dataList = new ArrayList<Object[]>();

    HttpServletResponse  response;


    //构造方法,传入要导出的数据
    public ExportExcelSeedBack(String title,String[] rowName,List<Object[]> dataList){
        this.dataList = dataList;
        this.rowName = rowName;
        this.title = title;
    }

    /*
     * 导出数据
     * */
    public void export(OutputStream out) throws Exception{
        try{
            HSSFWorkbook workbook = new HSSFWorkbook();                     // 创建工作簿对象
            HSSFSheet sheet = workbook.createSheet(title);                  // 创建工作表

            // 产生表格标题行
    //          HSSFRow rowm = sheet.createRow(0);
    //          HSSFCell cellTiltle = rowm.createCell(0);

            //sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面  - 可扩展】
            HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象
            HSSFCellStyle style = this.getStyle(workbook);                  //单元格样式对象

    //          sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));//合并单元格  
    //          cellTiltle.setCellStyle(columnTopStyle);
    //          cellTiltle.setCellValue(title);

            // 定义所需列数
            int columnNum = rowName.length;
            HSSFRow rowRowName = sheet.createRow(0);                // 在索引2的位置创建行(最顶端的行开始的第二行)

            // 将列头设置到sheet的单元格中
            for(int n=0;n<columnNum;n++){
                HSSFCell  cellRowName = rowRowName.createCell(n);               //创建列头对应个数的单元格
                cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);             //设置列头单元格的数据类型
                HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
                cellRowName.setCellValue(text);                                 //设置列头单元格的值
                cellRowName.setCellStyle(columnTopStyle);                       //设置列头单元格样式
            }

            //将查询出的数据设置到sheet对应的单元格中
            for(int i=0;i<dataList.size();i++){

                Object[] obj = dataList.get(i);//遍历每个对象
                HSSFRow row = sheet.createRow(i+1);//创建所需的行数(从第二行开始写数据)

                for(int j=0; j<obj.length; j++){
                    HSSFCell  cell = null;   //设置单元格的数据类型
                    if(j == 0){
                        cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);
                        cell.setCellValue(i+1); 
                    }else{
                        cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);
                        if(!"".equals(obj[j]) && obj[j] != null){
                            cell.setCellValue(obj[j].toString());                       //设置单元格的值
                        }
                    }
                    cell.setCellStyle(style);                                   //设置单元格样式
                }
            }
            //让列宽随着导出的列长自动适应
            for (int colNum = 0; colNum < columnNum; colNum++) {
                int columnWidth = sheet.getColumnWidth(colNum) / 256;
                for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
                    HSSFRow currentRow;
                    //当前行未被使用过
                    if (sheet.getRow(rowNum) == null) {
                        currentRow = sheet.createRow(rowNum);
                    } else {
                        currentRow = sheet.getRow(rowNum);
                    }
     //                 if (currentRow.getCell(colNum) != null) {
     //                     HSSFCell currentCell = currentRow.getCell(colNum);
    //                      if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
    //                          int length =     currentCell.getStringCellValue().getBytes().length;
    //                          if (columnWidth < length) {
    //                              columnWidth = length;
    //                          }
    //                      }
    //                  }
                    if (currentRow.getCell(colNum) != null) {
                        HSSFCell currentCell = currentRow.getCell(colNum);
                        if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                            int length = 0;
                            try {
                                length = currentCell.getStringCellValue().getBytes().length;
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            if (columnWidth < length) {
                                columnWidth = length;
                            }
                        }
                    }

                }
                if(colNum == 0){
                    sheet.setColumnWidth(colNum, (columnWidth-2) * 256);
                }else{
                    sheet.setColumnWidth(colNum, (columnWidth+4) * 256);
                }
            }
            if(workbook !=null){
                try{
                    workbook.write(out);
                }catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }catch(Exception e){
            e.printStackTrace();
        }
        finally{
            out.close();
        }

    }

    /* 
     * 列头单元格样式
     */    
    public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

          // 设置字体
          HSSFFont font = workbook.createFont();
          //设置字体大小
          font.setFontHeightInPoints((short)11);
          //字体加粗
          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          //设置字体名字 
          font.setFontName("Courier New");
          //设置样式; 
          HSSFCellStyle style = workbook.createCellStyle();
          //设置底边框; 
          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
          //设置底边框颜色;  
          style.setBottomBorderColor(HSSFColor.BLACK.index);
          //设置左边框;   
          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
          //设置左边框颜色; 
          style.setLeftBorderColor(HSSFColor.BLACK.index);
          //设置右边框; 
          style.setBorderRight(HSSFCellStyle.BORDER_THIN);
          //设置右边框颜色; 
          style.setRightBorderColor(HSSFColor.BLACK.index);
          //设置顶边框; 
          style.setBorderTop(HSSFCellStyle.BORDER_THIN);
          //设置顶边框颜色;  
          style.setTopBorderColor(HSSFColor.BLACK.index);
          //在样式用应用设置的字体;  
          style.setFont(font);
          //设置自动换行; 
          style.setWrapText(false);
          //设置水平对齐的样式为居中对齐;  
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          //设置垂直对齐的样式为居中对齐; 
          style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

          return style;

    }

    /*  
     * 列数据信息单元格样式
     */  
    public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
          // 设置字体
          HSSFFont font = workbook.createFont();
          //设置字体大小
          //font.setFontHeightInPoints((short)10);
          //字体加粗
          //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          //设置字体名字 
          font.setFontName("Courier New");
          //设置样式; 
          HSSFCellStyle style = workbook.createCellStyle();
          //设置底边框; 
          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
          //设置底边框颜色;  
          style.setBottomBorderColor(HSSFColor.BLACK.index);
          //设置左边框;   
          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
          //设置左边框颜色; 
          style.setLeftBorderColor(HSSFColor.BLACK.index);
          //设置右边框; 
          style.setBorderRight(HSSFCellStyle.BORDER_THIN);
          //设置右边框颜色; 
          style.setRightBorderColor(HSSFColor.BLACK.index);
          //设置顶边框; 
          style.setBorderTop(HSSFCellStyle.BORDER_THIN);
          //设置顶边框颜色;  
          style.setTopBorderColor(HSSFColor.BLACK.index);
          //在样式用应用设置的字体;  
          style.setFont(font);
          //设置自动换行; 
          style.setWrapText(false);
          //设置水平对齐的样式为居中对齐;  
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          //设置垂直对齐的样式为居中对齐; 
          style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

          return style;

          }
       }

此时就可以将数据完美导出来:
  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值