RMT导出Excel

/**
 * 系统数据导出Excel 生成器
 * @version 1.0
 */
package com.tranb.common.tools;

import java.io.OutputStream;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

public class ExcelFileGenerator {

    private final int SPLIT_COUNT = 60000; //Excel每一个工做簿的行数

    private ArrayList<String> fieldName = null; //excel标题数据集

    private ArrayList<ArrayList<String>> fieldData = null; //excel数据内容    

    private HSSFWorkbook workBook = null;

    /**
     * 构造器
     * @param fieldName 结果集的字段名
     * @param data
     */
    public ExcelFileGenerator(ArrayList<String> fieldName, ArrayList<ArrayList<String>> fieldData) {

        this.fieldName = fieldName;
        this.fieldData = fieldData;
    }

    /**
     * 建立HSSFWorkbook对象
     * @return HSSFWorkbook
     */
    public HSSFWorkbook createWorkbook() {

        workBook = new HSSFWorkbook();//建立一个工做薄对象
        int rows = fieldData.size();//总的记录数
        int sheetNum = 0;           //指定sheet的页数

        if (rows % SPLIT_COUNT == 0) {
            sheetNum = rows / SPLIT_COUNT;
        } else {
            sheetNum = rows / SPLIT_COUNT + 1;
        }

        for (int i = 1; i <= sheetNum; i++) {//循环2个sheet的值
            HSSFSheet sheet = workBook.createSheet("Page " + i);//使用workbook对象建立sheet对象
            HSSFRow headRow = sheet.createRow((short) 0); //建立行,0表示第一行(本例是excel的标题)
            for (int j = 0; j < fieldName.size(); j++) {//循环excel的标题
                HSSFCell cell = headRow.createCell( j);//使用行对象建立列对象,0表示第1列
                /**************对标题添加样式begin********************/
                
                //设置列的宽度/
                sheet.setColumnWidth(j, 6000);
                HSSFCellStyle cellStyle = workBook.createCellStyle();//建立列的样式对象
                HSSFFont font = workBook.createFont();//建立字体对象
                //字体加粗
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                //字体颜色变红
                font.setColor(HSSFColor.RED.index);
                //若是font中存在设置后的字体,并放置到cellStyle对象中,此时该单元格中就具备了样式字体
                cellStyle.setFont(font);
                
                /**************对标题添加样式end********************/
                
                //添加样式
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                if(fieldName.get(j) != null){
                    //将建立好的样式放置到对应的单元格中
                    cell.setCellStyle(cellStyle);
                    cell.setCellValue((String) fieldName.get(j));//为标题中的单元格设置值
                }else{
                    cell.setCellValue("-");
                }
            }
            //分页处理excel的数据,遍历全部的结果
            for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {
                if (((i - 1) * SPLIT_COUNT + k) >= rows)//若是数据超出总的记录数的时候,就退出循环
                    break;
                HSSFRow row = sheet.createRow( k + 1);//建立1行
                //分页处理,获取每页的结果集,并将数据内容放入excel单元格
                ArrayList<String> rowList = (ArrayList<String>) fieldData.get((i - 1) * SPLIT_COUNT + k);
                for (int n = 0; n < rowList.size(); n++) {//遍历某一行的结果
                    HSSFCell cell = row.createCell( n);//使用行建立列对象
                    if(rowList.get(n) != null){
                        cell.setCellValue((String) rowList.get(n).toString());
                    }else{
                        cell.setCellValue("");
                    }
                }
            }
        }
        return workBook;
    }

    public void expordExcel(OutputStream os) throws Exception {
        workBook = createWorkbook();
        workBook.write(os);//将excel中的数据写到输出流中,用于文件的输出
        os.close();
    }

}



/**
     * 用户数据导出模块- 数据导出
     */
    public String exportData(ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        String startTime = request.getParameter("startTime");
        String endTime = request.getParameter("endTime");
        String status = request.getParameter("status");
        String uids = request.getParameter("uids");
        ArrayList<String> fieldName = new ArrayList<String>();
        fieldName.add("uid");
        fieldName.add("姓名");
        fieldName.add("行业");
        fieldName.add("供应链身份");
        fieldName.add("帐号");
        fieldName.add("注册时间");
        //fieldName.add("最后登陆时间");
        fieldName.add("最后登陆日期");
        fieldName.add("当前版本");
        fieldName.add("帐号状态");
        fieldName.add("会员等级");
        fieldName.add("性别");
        fieldName.add("城市");
        fieldName.add("电话号码");
        fieldName.add("发布采购次数");
        fieldName.add("被报价总数");
        fieldName.add("报价数");
        fieldName.add("动态数");
        fieldName.add("商品数");
        
        
        ArrayList<ArrayList<String>> fieldData = new ArrayList<ArrayList<String>>();
        String headFileName="";
        JSONObject jsonDate=null;
        if("0".equals(status)){
              jsonDate = DaoFactory.getUserInfoDao().getpurchuse_user_report(true,null, uids, startTime, endTime);
              headFileName="按发布采购统计";
        }else if("1".equals(status)){
            jsonDate=DaoFactory.getUserInfoDao().getproduct_user_report(true,null, uids, startTime, endTime);
            headFileName="按发布商品统计";
        }else if("2".equals(status)){
            jsonDate=DaoFactory.getUserInfoDao().getnewCast_user_report(true,null, uids, startTime, endTime);
            headFileName="按发布动态统计";
        }else if("3".equals(status)){
            jsonDate = DaoFactory.getUserInfoDao().getLastActive_user_report(true,null, uids, startTime, endTime);
            headFileName="按最后登陆时间统计";
        }else if("-1".equals(status)){
            jsonDate = DaoFactory.getUserInfoDao().getUid_report(true,null, uids, startTime, endTime);
            headFileName="按UID统计";
        }
        
        List<JSONObject> dataList= (List<JSONObject>) jsonDate.get("rows");
        
        if(dataList!=null&&dataList.size()>0){
            for (JSONObject jsonObject : dataList) {
                ArrayList<String> temp = new ArrayList<>();
                temp.add(jsonObject.getString("uid"));
                temp.add(jsonObject.has("chineseName")?jsonObject.getString("chineseName"):"");
                temp.add(jsonObject.has("personIUCode")?jsonObject.getString("personIUCode"):"");
                temp.add(jsonObject.has("identityType")?jsonObject.getString("identityType"):"");
                temp.add(jsonObject.has("account")?jsonObject.getString("account"):"");
                temp.add(jsonObject.has("registerTime")?jsonObject.getString("registerTime"):"");
                //temp.add(jsonObject.has("lastActive")?jsonObject.getString("lastActive"):"");
                temp.add(jsonObject.has("logDate")?jsonObject.getString("logDate"):"");
                temp.add(jsonObject.has("curVersion")?jsonObject.getString("curVersion"):"");
                temp.add(jsonObject.has("type")?jsonObject.getString("type"):"");
                String member="";
                if(jsonObject.has("member")){
                    String memberStr = jsonObject.getString("member");
                    if("0".equals(memberStr)){
                        member="非会员";
                    }else if("1".equals(memberStr)){
                            member="赠送会员";
                    }else if("2".equals(memberStr)){
                        member="正式会员";
                    }
                    temp.add(member);
                }else{
                    temp.add(member);
                }
            
                temp.add(jsonObject.has("sex")?(jsonObject.getString("sex").equals("1")?"男":"女"):"");
                temp.add(jsonObject.has("city")?jsonObject.getString("city"):"");
                temp.add(jsonObject.has("mobilePhone")?jsonObject.getString("mobilePhone"):"");
                temp.add(jsonObject.has("purchaseCount")?jsonObject.getString("purchaseCount"):"");
                temp.add(jsonObject.has("bidSumCount")?jsonObject.getString("bidSumCount"):"");
                temp.add(jsonObject.has("bidSum")?jsonObject.getString("bidSum"):"");
                temp.add(jsonObject.has("castCount")?jsonObject.getString("castCount"):"");
                temp.add(jsonObject.has("productCount")?jsonObject.getString("productCount"):"");
                
                
                fieldData.add(temp);
            }
        }

        ExcelFileGenerator excelFileGenerator = new ExcelFileGenerator(fieldName,fieldData);
        OutputStream os = response.getOutputStream();
        response.reset();//导出excel建议加上重置输出流
        String fileName = headFileName+"("+new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss").format(new Date())+")";
        fileName = new String(fileName.getBytes("gbk"),"iso-8859-1");
        response.setContentType("application/msexcel");
        response.setHeader("Content-disposition", "attachment;filename="+fileName+".xls");
        response.setBufferSize(1024);
       
        //导出excel的操做
        excelFileGenerator.expordExcel(os);
        return null;
    }
相关文章
相关标签/搜索