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();
    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章