easyui DataGrid 工具类之 WorkbookUtil class

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;

import org.apache.commons.collections.MapUtils;
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.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import com.gsoft.cos.core.util.Assert;
import com.gsoft.modules.ggcz.utils.GgczUtil;
import com.gsoft.modules.ggcz.utils.TableUtil;

/**
 * @ClassName: WorkbookUtil
 * @Description: excel工具类
 */
public class WorkbookUtil {

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    private static DecimalFormat df = new DecimalFormat("0");

@SuppressWarnings("unchecked")
    public static HSSFWorkbook export(List<List<ColumnVO>> list, List<?> datas) {
        // 声明工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成表格
        HSSFSheet sheet = workbook.createSheet();
        // 创建单元格样式
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        // style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        // style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        // style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 表头

HSSFRow row = null;
        Map<String, String> keyMap = new HashMap<String, String>();
        int totalColumn = 0;
        List<String> contains = new ArrayList<String>();
        for (int i = 0; i < list.size(); i++) {
            List<ColumnVO> columns = list.get(i);
            int startColumn = 0;
            row = sheet.createRow(i);
            int size = 0;
            if (i == 0) {
                size = columns.size();
            } else {
                size = totalColumn;
            }
            int index = 0;
            int p = 0;
            for (int j = 0; j < size; j++) {
                if (i > 0) {
                    if (p == columns.size()) {
                        break;
                    }
                }
                if (!contains.contains(startColumn + "," + i)) {
                    ColumnVO column = null;
                    if (i == 0) {
                        column = columns.get(j);
                    } else {
                        column = columns.get(j - index);
                    }
                    if ((Assert.isNotEmpty(column.getHidden()) && column
                            .getHidden()) || !column.isExported()) {
                        continue;
                    }
                    if (Assert.isNotEmpty(column.getField())) {
                        if (Assert.isNotEmpty(column.getFieldType())) {
                            keyMap.put(
                                    String.valueOf(startColumn),
                                    column.getField() + ","
                                            + column.getFieldType());
                        } else {
                            keyMap.put(String.valueOf(startColumn),
                                    column.getField());
                        }

}
                    HSSFCell cell = row.createCell(startColumn);
                    cell.setCellStyle(style);
                    if (Assert.isNotEmpty(column.getTitle())) {
                        cell.setCellValue(column.getTitle().replaceAll("<br>",
                                ""));
                    } else {
                        cell.setCellValue(column.getTitle());
                    }
                    int colspan = 1;
                    if ((Assert.isNotEmpty(column.getColspan()) && column
                            .getColspan() > 1)) {
                        colspan = column.getColspan();
                    }
                    int rowspan = 1;
                    if (Assert.isNotEmpty(column.getRowspan())
                            && column.getRowspan() > 1) {
                        rowspan = column.getRowspan();
                    }
                    if (colspan > 1 || rowspan > 1) {
                        // 合并单元格(startRow,endRow,startColumn,endColumn)
                        sheet.addMergedRegion(new CellRangeAddress(i, i
                                + rowspan - 1, startColumn, startColumn
                                + colspan - 1));
                    }
                    if (rowspan > 1) {
                        for (int k = 0; k < rowspan; k++) {
                            contains.add(startColumn + ","
                                    + (rowspan - i - 1 + k));
                        }
                    }
                    startColumn += colspan;
                    p += 1;
                } else {
                    startColumn += 1;
                    index += 1;
                }
            }
            if (i == 0) {
                totalColumn = startColumn;
            }
        }

//Object object = null;
        // 遍历集合
        //int rownum = list.size() - 1;
        int rownum = list.size();
        if (datas != null) {
            for (int i = 0; i < datas.size(); i++) {
                Map<String, Object> map =(Map<String, Object>) datas.get(i);
                int number = 0;
                row = sheet.createRow(i + rownum);
/*                object = datas.get(i);
                row = sheet.createRow(i + rownum + 1);
                int number = 0;
                Map<String, Object> map = new HashMap<String, Object>();
                if (!(object instanceof Map)) {
                    try {
                        map = BeanUtils.describe(object);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }*/

for (int j = 0; j < keyMap.size(); j++) {
                    String key = keyMap.get(String.valueOf(j));
                    String fieldType = "";
                    if (key.contains(",")) {
                        fieldType = key.substring(key.indexOf(",") + 1,
                                key.length());
                        key = key.substring(0, key.indexOf(","));
                    }
                    String value = MapUtils.getString(map, key);
                    if (fieldType.equals("date")) {
                        try {
                            value = new GgczUtil().getDateToString(value,
                                    "yyyy-MM-dd");
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                    HSSFCell cell = row.createCell(number);
                    cell.setCellValue(value);
                    number++;
                }
            }
        }

return workbook;
    }

/**
     * 获取excel中行数据
     */
    public static List<Map<String, Object>> getData(InputStream is) {
        List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();

try {
            Workbook wb = WorkbookFactory.create(is);
            Sheet sheet = wb.getSheetAt(0);
            // int lastRowNum = sheet.getLastRowNum();
            int rowsCount = sheet.getPhysicalNumberOfRows();
            int firstRowNum = sheet.getFirstRowNum();

int cellsCount = 0;
            Row row = sheet.getRow(0);
            if (row != null) {
                cellsCount = row.getPhysicalNumberOfCells();
            }

List<String> headers = new ArrayList<String>();
            for (int j = 0; j < cellsCount; j++) {
                Cell cell = row.getCell(j);
                headers.add(getCellValue(cell));
            }
            Map<String, Object> map = null;
            for (int i = firstRowNum + 1; i < rowsCount; i++) {
                row = sheet.getRow(i);

if (row == null) {
                    continue;
                }
                map = new HashMap<String, Object>();

String value = null;
                for (int j = 0; j < cellsCount; j++) {
                    Cell cell = row.getCell(j);

value = getCellValue(cell);
                    map.put(headers.get(j), value);
                }

rows.add(map);
            }
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

return rows;
    }

/**
     * 获取excel中行数据
     */
    public static List<Map<String, Object>> getDataToField(InputStream is) {
        List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();

try {
            Workbook wb = WorkbookFactory.create(is);
            Sheet sheet = wb.getSheetAt(0);
            // int lastRowNum = sheet.getLastRowNum();
            int rowsCount = sheet.getPhysicalNumberOfRows();
            int firstRowNum = sheet.getFirstRowNum();

int cellsCount = 0;
            Row row = sheet.getRow(0);
            if (row != null) {
                cellsCount = row.getPhysicalNumberOfCells();
            }

List<String> headers = new ArrayList<String>();
            for (int j = 0; j < cellsCount; j++) {
                Cell cell = row.getCell(j);
                headers.add(getCellValue(cell));
            }
            Map<String, Object> map = null;
            for (int i = firstRowNum + 2; i < rowsCount; i++) {
                row = sheet.getRow(i);

if (row == null) {
                    continue;
                }
                map = new HashMap<String, Object>();

String value = null;
                for (int j = 0; j < cellsCount; j++) {
                    Cell cell = row.getCell(j);

value = getCellValue(cell);
                    map.put(headers.get(j), value);
                }

rows.add(map);
            }
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

return rows;
    }

/**
     * 获取单元格数据
     */
    protected static String getCellValue(Cell cell) {
        String cellValue = "";
        if (cell != null) {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                cellValue = cell.getStringCellValue();
                break;
            case Cell.CELL_TYPE_NUMERIC:
                String dataFormat = cell.getCellStyle().getDataFormatString();
                if (DateUtil.isCellDateFormatted(cell)) {
                    cellValue = sdf.format(cell.getDateCellValue());
                } else if ("@".equals(dataFormat)) {
                    cellValue = df.format(cell.getNumericCellValue());
                } else {
                    cellValue = String.valueOf(cell.getNumericCellValue());
                    DecimalFormat df = new DecimalFormat("#.#########");
                    cellValue = df.format(Double.valueOf(cellValue));
                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA:
                cellValue = cell.getCellFormula();
                break;
            default:
                cellValue = "";
            }
        }
        return cellValue;
    }

/**
     *
     * @param request
     * @param response
     * @param operate
     *            导入还是导出 export or print
     * @param title
     *            表明
     * @param columnJson
     *            列值
     * @param datas
     *            数据集
     * @throws UnsupportedEncodingException
     * @throws IOException
     */
    public void export(HttpServletRequest request,
            HttpServletResponse response, String operate, String title,
            String columnJson, List<?> datas)
            throws UnsupportedEncodingException, IOException {
        List<List<ColumnVO>> list = new ArrayList<List<ColumnVO>>();
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setIgnoreDefaultExcludes(true);
        jsonConfig.setExcludes(new String[] { "checkbox", "boxWidth",
                "deltaWidth", "cellClass", "iconCls", "sortable", "order",
                "editor", "auto" });
        JSONArray array = JSONArray.fromObject(columnJson, jsonConfig);
        for (int i = 0; i < array.size(); i++) {
            JSONArray columns = (JSONArray) array.get(i);
            @SuppressWarnings("unchecked")
            List<ColumnVO> temp = (List<ColumnVO>) JSONArray.toList(columns,
                    new ColumnVO(), jsonConfig);
            list.add(temp);
        }
        if ("export".equals(operate)) {
            try {
                HSSFWorkbook workbook = WorkbookUtil.export(list, datas);
                response.setContentType("APPLICATION/x-msdownload");
//                response.setHeader(
//                        "Content-Disposition",
//                        "attachment;filename*=UTF-8‘‘"
//                                + URLEncoder.encode("测试导出.xls", "UTF-8"));
                response.addHeader(
                        "Content-Disposition",
                        "attachment;filename="
                                + new String(title.getBytes("GBK"), "ISO8859-1")
                                + ".xls");
                /*response.setHeader("Content-disposition", "attachment;filename="
                        + URLEncoder.encode(title+".xls", "UTF-8"));*/
                OutputStream os = response.getOutputStream();
                workbook.write(os);
                os.close();
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        } else if ("print".equals(operate)) {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html; charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            OutputStream os = response.getOutputStream();
            String text = TableUtil.print(list, title, datas);
            os.write(text.getBytes("UTF-8"));
        }
    }
    
    /**
     *
     * @param request
     * @param response
     * @param operate
     *            导入还是导出 export or print
     * @param title
     *            表明
     * @param columnJson
     *            列值
     * @param datas
     *            数据集
     * @throws UnsupportedEncodingException
     * @throws IOException
     */
    public void exportTree(HttpServletRequest request,
            HttpServletResponse response, String operate, String title,
            String columnJson, List<?> datas)
            throws UnsupportedEncodingException, IOException {
        List<List<ColumnVO>> list = new ArrayList<List<ColumnVO>>();
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setIgnoreDefaultExcludes(true);
        jsonConfig.setExcludes(new String[] { "checkbox", "boxWidth",
                "deltaWidth", "cellClass", "iconCls", "sortable", "order",
                "editor", "auto" });
        JSONArray array = JSONArray.fromObject(columnJson, jsonConfig);
        for (int i = 0; i < array.size(); i++) {
            JSONArray columns = (JSONArray) array.get(i);
            @SuppressWarnings("unchecked")
            List<ColumnVO> temp = (List<ColumnVO>) JSONArray.toList(columns,
                    new ColumnVO(), jsonConfig);
            list.add(temp);
        }
        if ("export".equals(operate)) {
            try {
                HSSFWorkbook workbook = WorkbookUtil.exportTree(list, datas);
                response.setContentType("APPLICATION/x-msdownload");
//                response.setHeader(
//                        "Content-Disposition",
//                        "attachment;filename*=UTF-8‘‘"
//                                + URLEncoder.encode("测试导出.xls", "UTF-8"));
                response.addHeader(
                        "Content-Disposition",
                        "attachment;filename="
                                + new String(title.getBytes("GBK"), "ISO8859-1")
                                + ".xls");
                /*response.setHeader("Content-disposition", "attachment;filename="
                        + URLEncoder.encode(title+".xls", "UTF-8"));*/
                OutputStream os = response.getOutputStream();
                workbook.write(os);
                os.close();
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        } else if ("print".equals(operate)) {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html; charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            OutputStream os = response.getOutputStream();
            String text = TableUtil.print(list, title, datas);
            os.write(text.getBytes("UTF-8"));
        }
    }
    
    @SuppressWarnings("unchecked")
    public static HSSFWorkbook exportTree(List<List<ColumnVO>> list, List<?> datas) {
        // 声明工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成表格
        HSSFSheet sheet = workbook.createSheet();
        // 创建单元格样式
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        // style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        // style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        // style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 表头

HSSFRow row = null;
        Map<String, String> keyMap = new HashMap<String, String>();
        int totalColumn = 0;
        List<String> contains = new ArrayList<String>();
        for (int i = 0; i < list.size(); i++) {
            List<ColumnVO> columns = list.get(i);
            int startColumn = 0;
            row = sheet.createRow(i);
            int size = 0;
            if (i == 0) {
                size = columns.size();
            } else {
                size = totalColumn;
            }
            int index = 0;
            int p = 0;
            for (int j = 0; j < size; j++) {
                if (i > 0) {
                    if (p == columns.size()) {
                        break;
                    }
                }
                if (!contains.contains(startColumn + "," + i)) {
                    ColumnVO column = null;
                    if (i == 0) {
                        column = columns.get(j);
                    } else {
                        column = columns.get(j - index);
                    }
                    if ((Assert.isNotEmpty(column.getHidden()) && column
                            .getHidden()) || !column.isExported()) {
                        continue;
                    }
                    if (Assert.isNotEmpty(column.getField())) {
                        if (Assert.isNotEmpty(column.getFieldType())) {
                            keyMap.put(
                                    String.valueOf(startColumn),
                                    column.getField() + ","
                                            + column.getFieldType());
                        } else {
                            keyMap.put(String.valueOf(startColumn),
                                    column.getField());
                        }

}
                    HSSFCell cell = row.createCell(startColumn);
                    cell.setCellStyle(style);
                    if (Assert.isNotEmpty(column.getTitle())) {
                        cell.setCellValue(column.getTitle().replaceAll("<br>",
                                ""));
                    } else {
                        cell.setCellValue(column.getTitle());
                    }
                    int colspan = 1;
                    if ((Assert.isNotEmpty(column.getColspan()) && column
                            .getColspan() > 1)) {
                        colspan = column.getColspan();
                    }
                    int rowspan = 1;
                    if (Assert.isNotEmpty(column.getRowspan())
                            && column.getRowspan() > 1) {
                        rowspan = column.getRowspan();
                    }
                    if (colspan > 1 || rowspan > 1) {
                        // 合并单元格(startRow,endRow,startColumn,endColumn)
                        sheet.addMergedRegion(new CellRangeAddress(i, i
                                + rowspan - 1, startColumn, startColumn
                                + colspan - 1));
                    }
                    if (rowspan > 1) {
                        for (int k = 0; k < rowspan; k++) {
                            contains.add(startColumn + ","
                                    + (rowspan - i - 1 + k));
                        }
                    }
                    startColumn += colspan;
                    p += 1;
                } else {
                    startColumn += 1;
                    index += 1;
                }
            }
            if (i == 0) {
                totalColumn = startColumn;
            }
        }

//Object object = null;
        // 遍历集合
        //int rownum = list.size() - 1;
        int rownum = list.size();
        int valueRownum=0;
        if (datas != null) {
            for (int i = 0; i < datas.size(); i++) {
                Map<String, Object> map =(Map<String, Object>) datas.get(i);
                int number = 0;
                row = sheet.createRow(i + rownum+valueRownum);
                for (int j = 0; j < keyMap.size()+1; j++) {
                    if(j==keyMap.size()){
                        valueRownum+=loadChildren( rownum, valueRownum, row, sheet, i, map, keyMap);
                    }else{
                        String key = keyMap.get(String.valueOf(j));
                        String fieldType = "";
                        if (key.contains(",")) {
                            fieldType = key.substring(key.indexOf(",") + 1,
                                    key.length());
                            key = key.substring(0, key.indexOf(","));
                        }
                        String value = MapUtils.getString(map, key);
                        if (fieldType.equals("date")) {
                            try {
                                value = new GgczUtil().getDateToString(value,
                                        "yyyy-MM-dd");
                            } catch (ParseException e) {
                                e.printStackTrace();
                            }
                        }
                        HSSFCell cell = row.createCell(number);
                        cell.setCellValue(value);
                    }
                    number++;
                }
            }
        }

return workbook;
    }
    
    /**
     * 加载children
     * @param rownum
     * @param valueRownum
     * @param row
     * @param sheet
     * @param i
     * @param map
     * @param keyMap
     */
    @SuppressWarnings("unchecked")
    public static int loadChildren(int rownum,int valueRownum,HSSFRow row,HSSFSheet sheet,int i,Map<String, Object> map,Map<String, String> keyMap){
        List<Map<String, Object>> valueList= new ArrayList<Map<String,Object>>();
        Object object=map.get("children");
        if(Assert.isNotEmpty(object)){
            valueList=(List<Map<String, Object>>) object;
            for (int k = 0; k < valueList.size(); k++) {
                Map<String, Object> valueMap =(Map<String, Object>) valueList.get(i);
                int valueNumber = 0;
                row = sheet.createRow(i + k + rownum+valueRownum+1);
                for (int m = 0; m < keyMap.size(); m++) {
                    if(m==keyMap.size()){
                        loadChildren( rownum, valueRownum, row, sheet, i, map, keyMap);
                    }else{
                        String valueKey = keyMap.get(String.valueOf(m));
                        String valueFieldType = "";
                        if (valueKey.contains(",")) {
                            valueFieldType = valueKey.substring(valueKey.indexOf(",") + 1,
                                    valueKey.length());
                            valueKey = valueKey.substring(0, valueKey.indexOf(","));
                        }
                        String value = MapUtils.getString(valueMap, valueKey);
                        if (valueFieldType.equals("date")) {
                            try {
                                value = new GgczUtil().getDateToString(value,
                                        "yyyy-MM-dd");
                            } catch (ParseException e) {
                                e.printStackTrace();
                            }
                        }
                        HSSFCell cell = row.createCell(valueNumber);
                        cell.setCellValue(value);
                        valueNumber++;
                    }
                }
            }
            valueRownum=valueList.size();
        }
        return valueRownum;
    }

/**
     * 汇总明细table和 datagrid 拼接
     *
     * @param request
     * @param response
     * @param operate
     *            导入还是导出 export or print
     * @param title
     *            表明
     * @param columnJson
     *            列值
     * @param datas
     *            数据集
     * @throws UnsupportedEncodingException
     * @throws IOException
     */
    @SuppressWarnings("unchecked")
    public void exportToCollect(HttpServletRequest request,
            HttpServletResponse response, String operate, String title,
            String columnJson, List<?> datas)
            throws UnsupportedEncodingException, IOException {
        columnJson = columnJson.replaceAll("undefined", "");
        List<List<List<ColumnVO>>> list = new ArrayList<List<List<ColumnVO>>>();
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setIgnoreDefaultExcludes(true);
        jsonConfig.setExcludes(new String[] { "checkbox", "boxWidth",
                "deltaWidth", "cellClass", "iconCls", "sortable", "order",
                "editor", "auto" });
        JSONArray array = JSONArray.fromObject(columnJson, jsonConfig);
        for (int i = 0; i < array.size(); i++) {
            List<List<ColumnVO>> list1 = (List<List<ColumnVO>>) array.get(i);
            List<List<ColumnVO>> list2 = new ArrayList<List<ColumnVO>>();
            for (int j = 0; j < list1.size(); j++) {
                JSONArray columns = (JSONArray) list1.get(j);
                List<ColumnVO> temp = (List<ColumnVO>) JSONArray.toList(
                        columns, new ColumnVO(), jsonConfig);
                list2.add(temp);
            }
            list.add(list2);
        }

if ("export".equals(operate)) {
            try {
                HSSFWorkbook workbook = WorkbookUtil.exportToCollect(list,
                        datas);
                response.setContentType("APPLICATION/x-msdownload");
                response.addHeader(
                        "Content-Disposition",
                        "attachment;filename="
                                + new String(title.getBytes("GBK"), "ISO8859-1")
                                + ".xls");
                /*response.setHeader("Content-disposition", "attachment;filename="
                        + URLEncoder.encode(title+".xls", "UTF-8"));*/
                OutputStream os = response.getOutputStream();
                workbook.write(os);
                os.close();
            } catch (NumberFormatException e) {
                e.printStackTrace();
            }
        }
    }

@SuppressWarnings("unchecked")
    public static HSSFWorkbook exportToCollect(List<List<List<ColumnVO>>> list,
            List<?> datas) {
        // 声明工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成表格
        HSSFSheet sheet = workbook.createSheet();
        // 创建单元格样式
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 表头
        HSSFRow row = null;
        int rownum = 0;
        Map<String, String> keyMap = new HashMap<String, String>();
        for (int f = 0; f < list.size(); f++) {
            List<List<ColumnVO>> list1 = list.get(f);
            int totalColumn = 0;
            List<String> contains = new ArrayList<String>();
            for (int i = 0; i < list1.size(); i++) {
                List<ColumnVO> columns = list1.get(i);
                int startColumn = 0;
                row = sheet.createRow(i + rownum);
                int size = 0;
                if (i == 0) {
                    size = columns.size();
                } else {
                    size = totalColumn;
                }
                int index = 0;
                int p = 0;
                for (int j = 0; j < size; j++) {
                    if (i > 0) {
                        if (p == columns.size()) {
                            break;
                        }
                    }
                    if (!contains.contains(startColumn + "," + (i + rownum))) {
                        ColumnVO column = null;
                        if (i == 0) {
                            column = columns.get(j);
                        } else {
                            column = columns.get(j - index);
                        }
                        if ((Assert.isNotEmpty(column.getHidden()) && column
                                .getHidden()) || !column.isExported()) {
                            continue;
                        }
                        if (Assert.isNotEmpty(column.getField())) {
                            keyMap.put(String.valueOf(startColumn),
                                    column.getField());
                        }
                        HSSFCell cell = row.createCell(startColumn);
                        cell.setCellStyle(style);
                        if (Assert.isNotEmpty(column.getTitle())) {
                            cell.setCellValue(column.getTitle().replaceAll(
                                    "<br>", ""));
                        } else {
                            cell.setCellValue(column.getTitle());
                        }
                        int colspan = 1;
                        if ((Assert.isNotEmpty(column.getColspan()) && column
                                .getColspan() > 1)) {
                            colspan = column.getColspan();
                        }
                        int rowspan = 1;
                        if (Assert.isNotEmpty(column.getRowspan())
                                && column.getRowspan() > 1) {
                            rowspan = column.getRowspan();
                        }
                        if (colspan > 1 || rowspan > 1) {
                            // 合并单元格(startRow,endRow,startColumn,endColumn)
                            sheet.addMergedRegion(new CellRangeAddress(i
                                    + rownum, i + rownum + rowspan - 1,
                                    startColumn, startColumn + colspan - 1));
                        }
                        if (rowspan > 1) {
                            for (int k = 0; k < rowspan; k++) {
                                contains.add(startColumn + ","
                                        + (rowspan - i + rownum - 1 + k));
                            }
                        }
                        startColumn += colspan;
                        p += 1;
                    } else {
                        startColumn += 1;
                        index += 1;
                    }
                }
                if (i == 0) {
                    totalColumn = startColumn;
                }
            }
            if (list.size() > 1 && f == list.size() - 2) {
                rownum += list.get(f).size() + 1;
            } else {
                rownum += list.get(f).size();
            }
        }
        //Object object = null;
        // 遍历集合
        //int rownum = list.size() - 1;
        //rownum = list.get(1).size();
        if (datas != null) {
            for (int i = 0; i < datas.size(); i++) {
                Map<String, Object> map = (Map<String, Object>) datas.get(i);
                int number = 0;
                row = sheet.createRow(i + rownum);
                for (int j = 0; j < keyMap.size(); j++) {
                    String key = keyMap.get(String.valueOf(j));
                    String value = MapUtils.getString(map, key);
                    HSSFCell cell = row.createCell(number);
                    cell.setCellValue(value);
                    number++;
                }
            }
        }

return workbook;
    }

/**
     * 根据List Map<String,Object>导出Excel
     *
     * @param request
     * @param response
     * @param operate
     * @param title
     *            表名
     * @param TitleMp
     *            表头map,为空则根据datas中Map的Key
     * @param datas
     *            数据集
     * @throws UnsupportedEncodingException
     * @throws IOException
     */
    public void exportToTitleMap(HttpServletRequest request,
            HttpServletResponse response, String title,
            Map<String, String> TitleMp, List<?> datas)
            throws UnsupportedEncodingException, IOException {
        try {
            HSSFWorkbook workbook = WorkbookUtil.exportToTitleMap(TitleMp,
                    datas);
            response.setContentType("APPLICATION/x-msdownload");
            response.addHeader("Content-Disposition", "attachment;filename="
                    + new String(title.getBytes("GBK"), "ISO8859-1") + ".xls");
            OutputStream os = response.getOutputStream();
            workbook.write(os);
            os.close();
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }

@SuppressWarnings({ "unchecked", "rawtypes" })
    public static HSSFWorkbook exportToTitleMap(Map<String, String> titleMp,
            List<?> datas) {
        // 声明工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成表格
        HSSFSheet sheet = workbook.createSheet();
        // 创建单元格样式
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        // 表头
        HSSFRow row = null;
        List<String> keyArray = new ArrayList<String>();
        row = sheet.createRow(0);
        Set mapKey = null;
        if (Assert.isNotEmpty(titleMp)) {
            mapKey = titleMp.keySet();
        } else {
            if (Assert.isNotEmpty(datas)) {
                Map<String, Object> map = (Map<String, Object>) datas.get(0);
                mapKey = map.keySet();
            } else {
                return workbook;
            }
        }
        int s = 0;
        for (Object object : mapKey) {
            HSSFCell cell = row.createCell(s);
            cell.setCellStyle(style);
            keyArray.add(object.toString());
            if (Assert.isNotEmpty(titleMp)) {
                cell.setCellValue(titleMp.get(object));
            } else {
                cell.setCellValue(object.toString());
            }
            s++;
        }
        if (datas != null) {
            for (int i = 0; i < datas.size(); i++) {
                Map<String, Object> map = (Map<String, Object>) datas.get(i);
                row = sheet.createRow(i + 1);
                for (int j = 0; j < keyArray.size(); j++) {
                    String key = keyArray.get(j);
                    String value = MapUtils.getString(map, key);
                    HSSFCell cell = row.createCell(j);
                    cell.setCellValue(value);
                }
            }
        }
        return workbook;
    }
}

时间: 2024-08-26 01:40:57

easyui DataGrid 工具类之 WorkbookUtil class的相关文章

easyui DataGrid 工具类之 util js

var jq;                var tab;                var tabsIndex;                                /**                 * 常用说明                 * @param row                 * @returns {String}                 */                function formatItem(row) {     

easyui DataGrid 工具类之 Utils class

import java.lang.reflect.InvocationTargetException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map; import com.gsof

easyui DataGrid 工具类之 列属性class

public class ColumnVO { /**     * 列标题文本     */    private String title; /**     * 列字段名称     */    private String field;        /**     * 列样式     */    private String styler;        public String getStyler() {        return styler;    } public void se

JQuery EasyUI 学习——Struts2与EasyUI DataGrid数据表格结合使用显示数据库数据

因为EasyUI DataGrid只要取出后台传过来的一定格式的JSON数据,就可以在前台页面数据表格中,以一定形式显示数据库中的数据.此处,我们使用Struts2框架整合DataGrid,实现数据的显示. 一.页面内容 为了在页面中显示数据库中字段内容,需要定义一个table,通过EasyUI内部设计,自动显示数据,如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF

easyui datagrid 批量编辑和提交

前台主要代码: <script type="text/javascript"> $(function() { var $dg = $("#dg"); $dg.datagrid({ url : "servlet/list", width : 700, height : 250, columns : [ [ { field : 'code', title : 'Code', width : 100, editor : "vali

easyui datagrid导出excel

[第十四篇]easyui datagrid导出excel <a class="btn btn-app" onclick="exportExcel()"><i class="fa fa-edit"></i>导出Excel</a> 贴下面的代码之前,我想说一下 我的数据是主外键关系,有多张表关联,所以在做数据的时候,发现很多问题,读取的时候,它会自动读取所有的数据. 当然这不能满足我导出之后的要求,我只

EasyUI datagrid 动态绑定列

查了很多资料,有点乱 首先声明一下这里必须要用easyui1.3.1 不多说直接上代码: 首先打开jquery.easyui.min.js,查找_53b() 找到下面的代码 function _53b(){ var _53c=opts.loader.call(_538,_53a,function(data){ setTimeout(function(){ $(_538).datagrid("loaded"); },0); _4b1(_538,data); setTimeout(func

(转)easyui datagrid 部分参数说明

easyui datagrid 部分参数 数据表格属性(DataGrid Properties) 属性继承控制面板,以下是数据表格独有的属性. 名称 类型 描述 默认值 columns array 数据表格列配置对象,查看列属性以获取更多细节. undefined frozenColumns array 跟列属性一样,但是这些列固定在左边,不会滚动. undefined fitColumns boolean 设置为true将自动使列适应表格宽度以防止出现水平滚动. false autoRowHe

实现easyui datagrid在没有数据时显示相关提示内容

本示例实现easyui datagrid加载/查询数据时,如果没有相关记录,则在datagrid中显示没有相关记录的提示信息,效果如下图所示 本实例要实现如下图所示的效果: 本示例easyui版本为1.3.4,如果运行后没有效果,自己检查easyui版本 不同版本对appendRow和mergeCells支持不一样,参数不一致什么的. 无法隐藏分页导航容器,可以用chrome开发工具或者firebug查看分页导航容器的样式和原始datagrid table表格的关系. 源代码如下 $(funct