• 导出数据到EXL表格中


    项目使用的是SSI框架,通过struts访问到action

    xml文件:

    <action name="fabAttributedaochu" class="com.FabAttributeAction" method="daochu" >
        <result  name="success"   type="stream">
                  <!-- 指定下载文件的文件类型 -->
                  <param  name="contentType">xls</param>
                  <!-- 指定下载文件的文件位置  -->
                  <param name="inputName">downExpFile</param>
                  <!-- 指定下载文件的文件名 -->
                  <param name="contentDisposition">attachment;filename="${contentDisposition}"</param>
                  <!-- 指定下载文件的缓冲大小 -->
                  <param   name="bufferSize">4096</param>
            </result>
      <result  name="fail">/fabric/freemarker/finance/report/reportOrder.ftl</result>
    </action>

    action文件:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    
    private String contentDisposition;//一定要有的属性
    public String getContentDisposition() {   //get 
      return contentDisposition;
    } public void setContentDisposition(String contentDisposition) { //set
      this.contentDisposition = contentDisposition;
    } public String daochu() throws Exception{//前台按导出键跳转到这个方法,可以在这里设一些判断条件是否继续
        
    if(null==biCustomOrderQuantityVo){
                biCustomOrderQuantityVo =new BiCustomOrderQuantityVo();
            }else {
                //Integer total = this.getBuyOrderBo().selectBuyOrderCount(buyOrder);
                Integer total= this.getBiCustomOrderQuantityBo().selectbiCustCount(biCustomOrderQuantityVo);
                System.out.println("total:"+total);
                if(total-0==0){
                    this.getRequest().setAttribute("message","数据量为0,请重新选择时间段");
                    return "fail";
                }else if(total-65534>=0){
                    this.getRequest().setAttribute("message", "数量大于65534,请缩小选择范围");
                    return "fail";
                }else{
                    return success;
                }
            } return success; } public InputStream getDownExpFile() throws Exception{//根据xml的返回定义了一个get值,进入之个方法, contentDisposition = java.net.URLEncoder.encode("buyOrder.xls","UTF-8");//指定一个文件的文件名 return fabAttributeBo.daochu();//调用bo层数据返回一个InputStream对象 }

    逻辑业务层(bo):

         /**
         * 导出
         * @throws BOException 
         * @throws FileNotFoundException 
         * */
    public FileInputStream daochu() throws BOException {
        try {
            List<FabAttributeVo>  list =this.getFabAttributeDao().selectFabAttribute(null).getList();//导出数据的集合--数据
            Integer rowNumber =list.size();
            //创建新的ExCEL
            HSSFWorkbook workbook =  new HSSFWorkbook();
            //创建工作表名
            HSSFSheet sheet = workbook.createSheet("标签1");
            //定义行
            HSSFRow  row =null;
            //TITlelist为单元格明
            List<String >  titleList = this.obtainTitleList();//调用已定义好的列抬头
            //用数组定义单元格
            HSSFCell [] hssfCells = new HSSFCell[titleList.size()];
            //设置单元格格式
            HSSFCellStyle cellStyle =  workbook.createCellStyle();
            HSSFDataFormat format = workbook.createDataFormat();
            cellStyle.setDataFormat(format.getFormat("@"));
            //下面是创建首行
            row =sheet.createRow(0);
            for(int j=0;j<titleList.size();j++){
                hssfCells[j] = row.createCell(j);
                hssfCells[j].setCellStyle(cellStyle);
                hssfCells[j].setCellValue(titleList.get(j));
            }
            //下面是创建数据行
            for (int i = 1; rowNumber-i>=0; i++) {
                row = sheet.createRow(i);
                for (int j = 0; j < titleList.size(); j++) {
                    hssfCells[j]=row.createCell(j);
                    hssfCells[j].setCellStyle(cellStyle);
                    hssfCells[j].setCellType(HSSFCell.CELL_TYPE_STRING);
                    switch (j) {//每一个行需要插入拿一条
                        case 0:hssfCells[j].setCellValue(list.get(i-1).getAttr_id());break;
                        case 1:hssfCells[j].setCellValue(list.get(i-1).getType_name());break;
                        case 2:hssfCells[j].setCellValue(list.get(i-1).getAttr_name());break;
                        case 3:hssfCells[j].setCellValue(list.get(i-1).getAttr_input_type());break;
                        case 4:hssfCells[j].setCellValue(list.get(i-1).getAttr_values());break;
                        case 5:hssfCells[j].setCellValue(list.get(i-1).getSortOrder());break;
                    }
                }
            }
            
                File file =new File(this.getClass().getClassLoader().getResource("").getPath() + "fabric/tmp/buyOrder.xls");
                if(file.exists())file.delete();
                
                //新建一个输出文件流
                FileOutputStream fout = new FileOutputStream(file);
                //写相应的Excel工作薄
                workbook.write(fout);
                FileInputStream in= new FileInputStream(file);
                fout.close();
                return in;
        }catch(Exception e){
            e.printStackTrace();
        }        return null;
    }

    设定表格的首列行:

    /**
     * 用于列名的设置
    */
    private List<String> obtainTitleList(){//自己定义好,你需要的eml表格中的列
        List<String> titleList = new ArrayList<String>();
        titleList.add("ID");
        titleList.add("商品类型名称");
        titleList.add("属性名称");
        titleList.add("输入类型");
        titleList.add("属性值");
        titleList.add("排列次序");
        return titleList;
    }


    这样就ok了!!

  • 相关阅读:
    ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案
    wgs84 转百度经纬度坐标
    vue 编译大量空格警告问题总结 warning: Replace `↹↹` with `&#183;&#183;`
    微信sdk php签名方法整理
    Vue 使用百度地图组件
    php unicode转字符串
    第十篇、微信小程序-view组件
    第九篇、微信小程序-button组件
    第八篇、微信小程序-progress组件
    第七篇、微信小程序-video组件
  • 原文地址:https://www.cnblogs.com/mytzq/p/4775469.html
Copyright © 2020-2023  润新知