java导出excel.

2015/01/06  备忘excel导出,方便自己以后查阅.

 

工具类 :ExportExcelUtils.java

 

package com.hmnet.common;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;





import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.ehcache.CacheOperationOutcomes.GetAllOutcome;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.struts2.ServletActionContext;

import com.hmnet.etrade.record.domain.CompanyRecord;
import com.hmnet.etrade.record.domain.GoodsRecord;

public class ExportExcelUtils{
    
    public String exportExcel(Map map,String modelFlag){
        try {
            HttpServletResponse response = ServletActionContext.getResponse();
            /*
             * POI 操作Excel - 步骤:
             * */
            HSSFWorkbook workbook = new HSSFWorkbook();
            ServletOutputStream  out = response.getOutputStream();
            HSSFSheet sheet = workbook.createSheet("sheet1");    
            
            sheet.setColumnWidth(0, 1500); //设置序号列宽,其他列暂时一样宽
            
            sheet.setDefaultColumnWidth ((short)12);                        // 设置工作表列宽
            sheet.setDefaultRowHeight((short)250);                           // 设置工作表行高
            
            /*
             * sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面  - 可扩展】
             * */
            HSSFCellStyle columnTopStyle = ExportExcelUtilsStyle.getColumnTopStyle(workbook);//获取列头样式对象
            HSSFCellStyle style = ExportExcelUtilsStyle.getStyle(workbook);                  //单元格样式对象
            
            //列头数组定义
            String[] label = ExportExcelUtilsModel.getExportMoedel(modelFlag);
            // 定义所需列数
            int columnNum = label.length;
            
            //设置列头
            HSSFRow row1 = sheet.createRow((short)0);               // 在索引0的位置创建行(最顶端的行)
            HSSFCell cell1 = null;                                  // 在索引0的位置创建单元格(左上端)
            
            // 将列头设置到sheet的单元格中
            for(int n=0;n<columnNum;n++){
                cell1 = row1.createCell((short)(n));                //创建列头对应个数的单元格
                cell1.setCellType(HSSFCell.CELL_TYPE_STRING);       //设置列头单元格的数据类型
                cell1.setCellValue(label[n]);                       //设置列头单元格的值
                cell1.setCellStyle(columnTopStyle);                 //设置列头单元格样式
            }
            
            /*
             * 将查询出的数据设置到sheet对应的单元格中
             * */
            //企业信息备案
            if(modelFlag == "companyRecord"){
                List<CompanyRecord> exportList =  (List<CompanyRecord>) map.get("exportList");
                if(null==exportList||exportList.size()==0){
                    return "exportList size is zero";
                }
                int i=1;
                for(CompanyRecord cr : exportList){
                    //将属性转化成字符串数组的格式以便于写到sheet中
                    String c[] = {i+"",
                                cr.getCustomMaster(),
                                cr.getCompanyCode(),
                                cr.getCompanyName(),
                                cr.getCompanyCatagory(),
                                cr.getOrganizationCode(),
                                cr.getCompanyAbbreviation(),
                                cr.getCustomLinkName(),
                                cr.getCustomLinkNameTel(),
                                cr.getRegistrationAddress(),
                                cr.getTradePlatformName(),
                                cr.getTradePlatformWww(),
                                cr.getCompanyWww(),
                                cr.getApplyDate()+"",
                                this.getApplyTypeLabel(cr.getApplyType()),
                                this.getDocStatusLabel(cr.getDocStatus()),
                                cr.getCreateUser(),
                                cr.getCreateDate()+""};
                   
                    //创建行(从下面的i+1要注意,第0行是列头,因此创建新行要从下一行开始)
                    HSSFRow row = sheet.createRow(i);                             //创建所需的行数
                    for(short j=0;j<columnNum;j++){
                        HSSFCell cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);//设置单元格的数据类型
                        cell.setCellValue(c[j]);                                    //设置单元格的值
                        cell.setCellStyle(style);                                   //设置单元格样式
                    }
                    i++;
                }
            }
            //海关商品备案
            if(modelFlag == "goodsRecord"){
                List<GoodsRecord> exportList =  (List<GoodsRecord>) map.get("exportList");
                if(null==exportList||exportList.size()==0){
                    return "exportList size is zero";
                }
                int i=1;
                for(GoodsRecord cr : exportList){
                    //将属性转化成字符串数组的格式以便于写到sheet中
                    String c[] = {i+"",
                                cr.getCustomMasterLabel(),
                                cr.getIeFlagLabel(),
                                cr.getTradeCode(),
                                cr.getTradeName(),
                                cr.getPlatformCode(),
                                cr.getPlatformName(),
                                cr.getAgentCode(),
                                cr.getAgentName(),
                                cr.getPreclassifyCode(),
                                cr.getPreclassifyName(),
                                cr.getApplyDate()+"",
                                cr.getCreateUser(),
                                cr.getCreateDate()+""};
                   
                    //创建行(从下面的i+1要注意,第0行是列头,因此创建新行要从下一行开始)
                    HSSFRow row = sheet.createRow(i);                             //创建所需的行数
                    for(short j=0;j<columnNum;j++){
                        HSSFCell cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);//设置单元格的数据类型
                        cell.setCellValue(c[j]);                                    //设置单元格的值
                        cell.setCellStyle(style);                                   //设置单元格样式
                    }
                    i++;
                }
            }
            
            if(workbook !=null){
                // 获取当前时间用作文件名
                String filename = modelFlag + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
                response.setContentType("application/ms-excel");  
                response.setHeader("Content-Disposition", "filename="+new String(filename.toString().concat(".xls").getBytes(),"UTF-8"));
                workbook.write(out); 
                out.flush();        // 缓冲
                out.close();        // 关闭流(养成好的习惯打开了就别忘记关闭)
            }
        } catch (Exception e) {
            // TODO: handle exception
            return "export fail";
        }
        return "export success";
    }
    
    private String getApplyTypeLabel(String value){
        if("1".equals(value)){
            return "新增";
        }else if("2".equals(value)){
            return "变更";
        }else if("3".equals(value)){
            return "删除";
        }else{
            return "";
        }
    }
    
    private String getDocStatusLabel(String value){
        if("1".equals(value)){
            return "暂存";
        }else if("2".equals(value)){
            return "提交";
        }else if("Y".equals(value)){
            return "新增、修改、删除成功";
        }else if("N".equals(value)){
            return "新增、修改、删除失败";
        }else{
            return "";
        }
    }
}


模板类:ExportExcelUtilsModel.java(仅仅只列出了两个模块)

 

package com.hmnet.common;

public class ExportExcelUtilsModel{
    //企业信息备案
    static String[] companyRecord = {"序号","主管海关代码","企业海关编码","企业中文名称","企业经营类别",
             "企业组织机构代码","企业简称标识","海关业务联系人","海关业务联系人电话","工商注册地址","网络平台名称",
             "网络平台网址","企业网址","申请日期","申报类型","业务状态","创建人员","创建日期"};
    
    //海关商品备案
    static String[] goodsRecord = {"序号","海关简称","进出口标志","电商企业代码","电商企业名称","电商平台企业代码","电商平台企业名称",
            "申报企业代码","申报企业名称","预归类企业代码","预归类企业名称","申报日期","创建人员","创建日期"};
    
    //产品管理
    
    public static String[] getExportMoedel(String modelFlag) {
        if(modelFlag == "companyRecord"){
            return companyRecord ;
        }else if(modelFlag == "goodsRecord"){
            return goodsRecord ;
        }else{
            return null;
        }
    }
}

 

样式类:ExportExcelUtilsStyle.java

 

package com.hmnet.common;

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

public class ExportExcelUtilsStyle{
    /* 
     * 列头单元格样式
     */    
    public static 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 static 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;
    }
}


 

调用代码:

            List<GoodsRecord> goodsRecordList = goodsRecordService
                    .selectByCriteria(goodsRecordCriteria, offset, limit);
            ExportExcelUtils  exportExcelUtils= new ExportExcelUtils();
            Map<String, List> map = new HashMap<String, List>();
            map.put("exportList", goodsRecordList);
            String result = exportExcelUtils.exportExcel(map,"goodsRecord");


 

注:以上代码所需要的jar包和具体的VO我就不提供了,另外有些细节不完整,稍微改下参数什么的就可以运行的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。