导出excel表格

导出Excel表格

需求:导出Excel表格,为下载模板,提供了有力条件
实现思路:生成动态表单之后,为动态表格进行excel 模板的下载
创建一个controller 控制器(承接我上个博客里的动态表单的部分)

    /**
     * 导出学生excle表
     */
    private ExportExamineService service_excel = ExportExamineService.service;
    public void exportStudent(){
        Map<String, Object> params = getParamsMap();
        //获取表单结构的  具体值
        List<formDetailedEntity> list = service.Structure(params);

        renderFile(service_excel.export(params,list));
    }

service编写 适用于 .xls,创建表格 ,每个单元薄并且铺值

package com.hegao.pdos.xydq.service;

import com.hegao.pdos.admin.service.BaseService;
import com.hegao.pdos.xydq.entity.formDetailedEntity;
import com.jfinal.aop.Before;
import com.jfinal.kit.PathKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.tx.Tx;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 缓存处理
 *
 * @author OF
 * @date 2018年1月25日
 */
@Before(Tx.class)
public class ExportExamineService extends BaseService {
    public static ExportExamineService service = new ExportExamineService();

    //增加页面 通过随机数 的方式
    public boolean addPayment(Map<String, Object> info) {
        Record record = new Record();
        info.remove("num");
//		info.put("num", ToolUtils.getNumId("STR"));
        record.setColumns(info);
        boolean flag = Db.save("of_payment_record", record);
        return flag;
    }

    /**
     * 导出excle表
     */

    public File export(Map<String, Object> params, List<formDetailedEntity> list) {
        File file = new File(getTitle());
        file = saveFile(file, list, params);
        return file;
    }


    private static final String FILEPATH = PathKit.getWebRootPath() + File.separator + "upload" + File.separator;

    public static String getTitle() {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String title = FILEPATH + dateFormat.format(date) + "模板.xls";
        return title;
    }


    public static File saveFile(File file, List<formDetailedEntity> list, Map<String, Object> params) {
        // 创建工作薄
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        // sheet:一张表的简称
        // row:表里的行
        // 创建工作薄中的工作表
        HSSFSheet hssfSheet = hssfWorkbook.createSheet();
        // 创建行
        HSSFRow row = hssfSheet.createRow(0);
        // 创建单元格,设置表头 创建列
        HSSFCell cell = null;
        // 初始化索引
        int rowIndex = 0;
        row = hssfSheet.createRow(rowIndex);
        // 得到所有的行 一个record就代表 一行
        // 遍历标题
        int n = 0;
        for (int i = 0; i < list.size(); i++) {
            //下一行索引
            rowIndex++;
            // 在有所有的记录基础之上,便利传入进来的表头,再创建N行
            cell = row.createCell(i + n);
            if (list.get(i).getDetailedOptionEntity() == null) {
                if (!list.get(i).getField_type_id().equals("7")) {
                    //循环获取名字 如果名字 不为null 就去获取他的名字放进去
                    cell.setCellValue(list.get(i).getField_name() == null ? "" : list.get(i).getField_name());
                }
            } else {
                //循环获取名字 如果名字 不为null 就去获取他的名字放在第一
                //这里涉及到单选 多选 下拉的处理
                if (!list.get(i).getField_type_id().equals("7")) {
                    //循环获取名字 如果名字 不为null 就去获取他的名字放进去
                    cell.setCellValue(list.get(i).getField_name() == null ? "" : list.get(i).getField_name());
                }
            }
            //如果有下级  但不是子项
            if (list.get(i).getFormDetailedEntitie() != null && !list.get(i).getField_type_id().equals("7")) {
                for (int j = 0; j < list.get(i).getFormDetailedEntitie().size(); j++) {
                    //子项为上传视频上传图片的不管
                    if (!list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("5") && !list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("6")) {
                        cell = row.createCell(i + ++n);
                        //获取有子项的,field_name 工作经历-list 循环
                        cell.setCellValue(list.get(i).getField_name() + "-" + list.get(i).getFormDetailedEntitie().get(j).getField_name());
                    }
                }
            }
            //如果有子项的话,去掉父项
            if (list.get(i).getField_type_id().equals("7")) {
                n--;
                for (int j = 0; j < list.get(i).getFormDetailedEntitie().size(); j++) {
                    //子项为上传视频上传图片的不管
                    if (!list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("5") && !list.get(i).getFormDetailedEntitie().get(j).getField_type_id().equals("6")) {
                        cell = row.createCell(i + ++n);
                        //获取有子项的,field_name 工作经历-list 循环
                        cell.setCellValue(list.get(i).getField_name() + "-" + list.get(i).getFormDetailedEntitie().get(j).getField_name());
                    }
                }
            }

        }
        try {
            FileOutputStream fileOutputStreane = new FileOutputStream(file);
            hssfWorkbook.write(fileOutputStreane);
            fileOutputStreane.flush();
            fileOutputStreane.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return file;
    }

}

这里 下拉 多选 导出表格 没有进行明确的规定 这里需要改进,如有明白的大佬请指教一二

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值