java导出动态excel表单----表头和内容都为动态

数据表

CREATE TABLE `f_form` (
  `id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `org_id` bigint(32) DEFAULT NULL COMMENT '机构id',
  `title` varchar(255) DEFAULT NULL COMMENT '表单标题',
  `state` int(1) DEFAULT NULL COMMENT '状态(0待开始1收集中2已结束)',
  `founder` varchar(255) DEFAULT NULL COMMENT '创建人',
  `description` text COMMENT '表单介绍',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `start_Time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_Time` datetime DEFAULT NULL COMMENT '结束时间',
  `del` int(1) DEFAULT NULL COMMENT '删除(0未删除1已删除)',
  `vp` int(11) DEFAULT NULL COMMENT '表单浏览量vp',
  `url` varchar(255) DEFAULT NULL COMMENT '表单地址',
  `copy_count` int(11) DEFAULT NULL COMMENT '复制数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8 COMMENT='表单表';
CREATE TABLE `f_form_flied_config` (
  `id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `form_id` bigint(32) DEFAULT NULL COMMENT '表单id',
  `org_id` bigint(32) DEFAULT NULL COMMENT '机构id',
  `type` int(11) DEFAULT NULL COMMENT 'type (0,默认字段1,单行文本框配置 2多行文本框配置3下拉列表配置4多选项配置5单选项配置6文件图片7日期)',
  `data_name` varchar(255) DEFAULT NULL COMMENT '数据库字段名',
  `show_name` varchar(255) DEFAULT NULL COMMENT '展示字段名',
  `default_name` varchar(255) DEFAULT NULL COMMENT '默认字段名',
  `is_required` int(11) DEFAULT NULL COMMENT '是否必填(0:必填,1:非必填)',
  `is_only` int(11) DEFAULT NULL COMMENT 'type=1,0(0 唯一,1 不唯一)',
  `prompt_massage` varchar(255) DEFAULT NULL COMMENT '提示信息',
  `sort` int(11) DEFAULT NULL COMMENT '排序',
  `perset1` int(11) DEFAULT NULL COMMENT '待定义',
  `perset2` varchar(1000) DEFAULT NULL COMMENT 'type=3:下拉列表内容 ;type=4:多选项内容;type=5:单选项内容',
  `perset3` varchar(255) DEFAULT NULL COMMENT '待定义',
  `perset4` varchar(255) DEFAULT NULL COMMENT '待定义',
  PRIMARY KEY (`id`),
  KEY `FK_Reference_25` (`form_id`) USING BTREE,
  CONSTRAINT `FK_Reference_25` FOREIGN KEY (`form_id`) REFERENCES `f_form` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=334 DEFAULT CHARSET=utf8 COMMENT='表单字段配置表';
CREATE TABLE `f_form_data` (
  `id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `form_id` bigint(32) DEFAULT NULL COMMENT '表单id',
  `org_id` bigint(32) DEFAULT NULL COMMENT '机构id',
  `commit_time` datetime DEFAULT NULL COMMENT '提交时间',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  `mobile` varchar(255) DEFAULT NULL COMMENT '手机号',
  `sex` varchar(255) DEFAULT NULL COMMENT '性别',
  `birthday` varchar(255) DEFAULT NULL COMMENT '出生日期',
  `id_card` varchar(255) DEFAULT NULL COMMENT '身份证',
  `addr` varchar(255) DEFAULT NULL COMMENT '地址',
  `xing_zuo` varchar(255) DEFAULT NULL COMMENT '星座',
  `leader` varchar(255) DEFAULT NULL COMMENT '负责人',
  `another_mobile` varchar(255) DEFAULT NULL COMMENT '备用手机号',
  `another_email` varchar(255) DEFAULT NULL COMMENT '备用邮箱',
  `position` varchar(255) DEFAULT NULL COMMENT '职务',
  `department` varchar(255) DEFAULT NULL COMMENT '部门',
  `zhifubao_code` varchar(255) DEFAULT NULL COMMENT '支付宝账号',
  `qq_code` varchar(255) DEFAULT NULL COMMENT 'qq',
  `weixin` varchar(255) DEFAULT NULL COMMENT '微信号',
  `weibo_code` varchar(255) DEFAULT NULL COMMENT '微博',
  `taobao_code` varchar(255) DEFAULT NULL COMMENT '淘宝账号',
  `contacts_description` varchar(255) DEFAULT NULL COMMENT '描述',
  `company_name` varchar(255) DEFAULT NULL COMMENT '机构名称',
  `address` varchar(255) DEFAULT NULL COMMENT '机构地址',
  `fax` varchar(255) DEFAULT NULL COMMENT '传真',
  `work_phone` varchar(255) DEFAULT NULL COMMENT '单位电话',
  `zip_code` varchar(255) DEFAULT NULL COMMENT '邮编',
  `url` varchar(255) DEFAULT NULL COMMENT 'url',
  `companyContact_person` varchar(255) DEFAULT NULL COMMENT '机构联系人',
  `company_description` varchar(255) DEFAULT NULL COMMENT '机构描述',
  `filed1` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed2` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed3` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed4` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed5` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed6` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed7` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed8` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '扩展字段1',
  `filed9` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '扩展字段1',
  `filed10` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed11` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed12` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed13` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed14` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  `filed15` varchar(255) DEFAULT NULL COMMENT '扩展字段1',
  PRIMARY KEY (`id`),
  KEY `FK_Reference_24` (`form_id`),
  CONSTRAINT `FK_Reference_24` FOREIGN KEY (`form_id`) REFERENCES `f_form` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=229 DEFAULT CHARSET=utf8 COMMENT='表单字段表';

/**

  • 动态导出工具类
    */
public class ExportExcel {

    /**
     * 
     * 
     * @param fileName 文件名
     * @param headers 表格属性列名数组
     * @param dataset 需要显示的数据集合
     * @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
     * @throws IOException
     */
    @SuppressWarnings("deprecation")
    public static HSSFWorkbook exportExcel(HttpServletRequest request, HttpServletResponse response, String fileName,
            String[] headers, List<Object[]> dataset, String pattern) throws IOException {
        // 设置请求
        response.setHeader("Content-disposition",
                "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
        response.setContentType("application/msexcel;charset=UTF-8");
        // 创建一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成一个表格
        HSSFSheet sheet = workbook.createSheet("表单导出");
        // 产生表格标题行
        HSSFRow row = sheet.createRow(0);
        for (short i = 0; i < headers.length; i++) {
            HSSFCell cell = row.createCell(i);
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);
            cell.setCellValue(text);
        }
        // 遍历集合数据,产生数据行
        Iterator<Object[]> it = dataset.iterator();
        int index = 0;
        while (it.hasNext()) {
            index++;
            // 从第1行开始创建
            row = sheet.createRow(index);
            Object[] obj = (Object[]) it.next();
            for (short i = 0; i < obj.length; i++) {
                HSSFCell cell = row.createCell(i);
                Object value = obj[i];
                String textValue = null;
                if (!"".equals(value) && value != null) {
                    if (value instanceof Integer) {
                        int intValue = (Integer) value;
                        cell.setCellValue(intValue);
                    } else if (value instanceof Float) {
                        float fValue = (Float) value;
                        cell.setCellValue(fValue);
                    } else if (value instanceof Double) {
                        double dValue = (Double) value;
                        cell.setCellValue(dValue);
                    } else if (value instanceof Long) {
                        long longValue = (Long) value;
                        cell.setCellValue(longValue);
                    } else if (value instanceof Date) {
                        Date date = (Date) value;
                        if (null == pattern || pattern.equals("")) {
                            pattern = "yyyy-MM-dd";
                        }
                        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                        textValue = sdf.format(date);
                        cell.setCellValue(textValue);
                    } else {
                        // 其它数据类型都当作字符串简单处理
                        textValue = value.toString();
                        // 设置单元格的值
                        cell.setCellValue(textValue);
                    }
                } else {
                    cell.setCellValue("");
                }
            }
        }
        // 让列宽随着导出的列长自动适应
        for (int colNum = 0; colNum < headers.length; 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() != null
                                ? currentCell.getStringCellValue().getBytes().length : 10;
                        if (columnWidth < length) {
                            columnWidth = length;
                        }
                    }
                }
            }
            if (colNum == 0) {
                sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
            } else {
                sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
            }
        }
        OutputStream outputStream = response.getOutputStream();// 打开流
        workbook.write(outputStream);// HSSFWorkbook写入流
        workbook.close();// HSSFWorkbook关闭
        outputStream.flush();// 刷新流
        outputStream.close();// 关闭流
        return workbook;
    }
}

/**
* 表单导出
*
* @param response
* @param export
* @param request
*/

@RequestMapping("****")
public void exportExcel(HttpServletRequest request, HttpServletResponse response) {
    try {
        Map<String, Object> paramMap = RequestUtils.convertRequestToMap(request);
        //表单id
        Long formId = getLong(paramMap, "formId");
        // 条件
        String condition = getString(paramMap, "condition");
        // 表头
        ArrayList<String> excelHeader = new ArrayList<String>();
        //根据表单id查出表头
        List<Map<String, Object>> list1 = fFormService.findFFromFliedConfig(formId);
        for (Map<String, Object> map : list1) {
            String showName = map.get("showName").toString();
            excelHeader.add(showName);
        }
        String[] arrString = (String[]) excelHeader.toArray(new String[excelHeader.size()]);
        // 对应表单数据
        List<Map<String, Object>> fromDataList = fFormService.findFFormData1(formId, condition);
        List<Object[]> dataList = new ArrayList<Object[]>();
        ArrayList<String> datal = null;
        for (Map<String, Object> map : fromDataList) {
            datal = new ArrayList<String>();
            for (Map<String, Object> map1 : list1) {
                String dataName = map1.get("dataName").toString();
                String data = map.get(dataName).toString();
                datal.add(data);
            }
            Object[] array = datal.toArray(new String[datal.size()]);
            dataList.add(array);
        }
        ExportExcel.exportExcel(request, response, "表单导出", arrString, dataList, "yyyy-MM-dd HH:mm :ss");
    } catch (Exception e) {
        e.printStackTrace();
    }  
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值