poi报表工具类的使用方法,报表导出,批量导出


本次使用的是ApachePOI技术,挺简单的就不多说了,做下记录

1、使用ExcelUtils工具类进行操作

工具类:

package com.youming.shuiku.system.utils.excel;

import cn.hutool.json.JSON;
import com.alibaba.fastjson.JSONObject;
import com.youming.shuiku.commons.exception.BusinessException;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Hyperlink;
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 java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Excel工具类
 */
@Slf4j
public class ExcelUtils {
    public static String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static List<List<String>> getExcelContent(InputStream inputStream, int beginRow, ExcelFilesVaildate[] validates)throws Exception {
        DataFormatter dataFormatter = new DataFormatter();
        List<List<String>> fileContent = new ArrayList();
        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getLastRowNum() + 1;
        if (rows >= 1000 + beginRow) {
            throw new BusinessException("excel文件的行数超过系统允许导入最大行数:" + 1000);
        } else {
            if (rows >= beginRow) {
                List rowList = null;
                Row row = null;

                for (int i = beginRow - 1; i < rows; ++i) {
                    row = sheet.getRow(i);
                    rowList = new ArrayList();
                    fileContent.add(rowList);
                    if (row != null) {
                        int cells = row.getLastCellNum();
                        if (cells > 200) {
                            throw new BusinessException("文件列数超过200列,请检查文件!");
                        }

                        for (int j = 0; j < cells; ++j) {
                            Cell cell = row.getCell(j);
                            String cellValue = "";
                            Hyperlink hyperlink = cell.getHyperlink();
                            if(hyperlink != null){
                                HashMap<String,Object> map=new HashMap<>();
                                map.put("key",cell.getStringCellValue());
                                map.put("value",hyperlink.getAddress());
                                Object json = JSONObject.toJSON(map);
                                cellValue =json.toString();
                            }
                            if (cell != null && hyperlink == null) {
                                log.debug("Reading Excel File row:" + i + ", col:" + j + " cellType:" + cell.getCellType());
                                switch (cell.getCellType()) {
                                    case 0:
                                        if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
                                            cellValue = formatDateByFormat(cell.getDateCellValue(), DATETIME_FORMAT);
                                        } else {
                                            cellValue = dataFormatter.formatCellValue(cell);
                                        }
                                        break;
                                    case 1:
                                        cellValue = cell.getStringCellValue();
                                        break;
                                    case 2:
                                        cellValue = String.valueOf(cell.getNumericCellValue());
                                        break;
                                    case 3:
                                        cellValue = "";
                                        break;
                                    case 4:
                                        cellValue = String.valueOf(cell.getBooleanCellValue());
                                        break;
                                    case 5:
                                        cellValue = String.valueOf(cell.getErrorCellValue());
                                }
                            }

                            if (validates != null && validates.length > j) {
                                if (cellValue == null) {
                                    throw new BusinessException("第" + (i + beginRow - 1) + "行,第" + (j + 1) + "列数据校验出错:" + validates[j].getErrorMsg());
                                }

                                Pattern p = Pattern.compile(validates[j].getPattern());
                                Matcher m = p.matcher(cellValue);
                                if (!m.matches()) {
                                    throw new BusinessException("第" + (i + beginRow - 1) + "行,第" + (j + 1) + "列数据校验出错:" + validates[j].getErrorMsg());
                                }
                            }

                            rowList.add(cellValue);
                        }
                    }
                }
            }

            return fileContent;
        }
    }
    public static String formatDateByFormat(Date date, String format) {
        String result = "";
        if (date != null) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                result = sdf.format(date);
            } catch (Exception var4) {
                var4.printStackTrace();
            }
        }

        return result;
    }



    public static String getExcelValue(List<String> list, int index) {
        if (list == null || list.isEmpty() || list.size() < index + 1) {
            return null;
        }
        return StringUtils.trim(list.get(index));
    }
}

使用:

LambdaQueryWrapper<ArchiveDisplacementMeter> lambda = Wrappers.lambdaQuery();
        lambda.orderByAsc(ArchiveDisplacementMeter::getNumber);
        List<ArchiveDisplacementMeter> list = this.list(lambda);
        try {
            String[] showName = null;
            String[] resourceFild = null;
            if (list != null && list.size() > 0) {
                for (ArchiveDisplacementMeter archiveDisplacementMeter: list) {
                    archiveDisplacementMeter.setMeasurePointExport("多点位移计"+archiveDisplacementMeter.getNumber());
                    double v = Double.valueOf(archiveDisplacementMeter.getElevation()) -
                            Double.valueOf(archiveDisplacementMeter.getHead());
                    archiveDisplacementMeter.setBeginEndElevation(String.valueOf(v));
                    archiveDisplacementMeter.setWorkState("正常");

                }
            }
            showName = new String[]{"水工建筑物编号","测点编号","测点别名","考证信息日期","型式",
            "桩号","轴距","起始高程","安装日期","测定日期","仪器出厂编号","工作状态","备注"};
            resourceFild = new String[]{"getToponym","getMeasurePointExport","getMeasurePointName","getPreparerTime",
            "getSensorType","getStakeMark","getAxisDistance","getBeginEndElevation","getPreparerTime","getPreparerTime",
            "getFactoryNumber","getWorkState","getRemark"};

            XSSFWorkbook workbook = ExportExcel.getWorkbookXlsx(list, showName, resourceFild, ArchiveDisplacementMeter.class,
                    null);
            ByteArrayOutputStream os = new ByteArrayOutputStream();

            workbook.write(os);
            byte[] b = os.toByteArray();

            MinioUploadDto minioUploadDto = minioService.upload("多点位移计安装埋设考证表.xlsx", b, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            return minioUploadDto.getUrl();

ExportExcel的工具类详情:

package com.youming.shuiku.system.utils.excel;

import org.apache.poi.hssf.usermodel.DVConstraint;
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.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

//import org.apache.poi.hssf.usermodel.HSSFCellStyle;

@SuppressWarnings("all")
public class ExportExcel implements Serializable {

	public static String getFileName() {
		return com.youming.shuiku.system.utils.excel.DateUtil.toString(new Date(), "yyyyMMdd-HHmmss");
	}

	@SuppressWarnings("deprecation")
	public static HSSFWorkbook getWorkbookXls(List<?> resultList, String[] showName, String[] resourceField,
			Class<?> resultObj, Map<String, Map<String, String>> formatMap) throws SecurityException,
			NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("sheet1");
		sheet.setDefaultColumnWidth((short) 20);
		HSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		centerStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		centerStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		centerStyle.setBorderTop(BorderStyle.THIN);// 上边框
		centerStyle.setBorderRight(BorderStyle.THIN);// 右边框
		Font font = workbook.createFont();
		font.setBold(true); // 粗体
		centerStyle.setFont(font);

		HSSFCellStyle contentStyle = workbook.createCellStyle();// 设置为水平居中
		contentStyle.setAlignment(HorizontalAlignment.CENTER);
		contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		contentStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		contentStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		contentStyle.setBorderTop(BorderStyle.THIN);// 上边框
		contentStyle.setBorderRight(BorderStyle.THIN);// 右边框

		HSSFRow row;
		HSSFCell cell;
		createTitleXls(showName, sheet, centerStyle);
		// 下面是输出各行的数据 下面是输出各行的数据 下面是输出各行的
		for (int i = 0; i < resultList.size(); i++) {
			Object result = resultList.get(i);
			row = sheet.createRow(i + 1);
			// 创建第 i+1 行
			for (int j = 0; j < resourceField.length; j++) {
				cell = row.createCell(j);// 创建第 j 列
				Method method;
				method = resultObj.getMethod(resourceField[j]);
				// 这里用到了反射机制,通 这里用到了反射机制, 这里用到了反射机制 过方法名来取得对应方法返回的结果对象
				Object obj = method.invoke(result);
				if (obj != null) {
					if (formatMap != null && formatMap.containsKey(resourceField)) {
						cell.setCellValue(formatMap.get(resourceField).get(obj.toString()));
						cell.setCellStyle(contentStyle);
					}
					else {
						String type = method.getGenericReturnType().toString();
						if ("class java.util.Date".equals(type)) {
							cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtil.toString((Date) obj,
									com.youming.shuiku.system.utils.excel.DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
							cell.setCellStyle(contentStyle);
						}
						else if ("class java.time.LocalDateTime".equals(type)) {
							cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtils.formatLocalDateTime(
									(LocalDateTime) obj,
									com.youming.shuiku.system.utils.excel.DateUtils.DATETIME_FORMAT));
							cell.setCellStyle(contentStyle);
						}
						else {
							cell.setCellValue(obj.toString());
							cell.setCellStyle(contentStyle);
						}
					}
				}
				else {
					cell.setCellStyle(contentStyle);
				}
			}
		}
		return workbook;
	}

	@SuppressWarnings("deprecation")
	public static XSSFWorkbook getWorkbookXlsx(List<?> resultList, String[] showName, String[] resourceField,
			Class<?> resultObj, Map<String, Map<String, String>> formatMap) throws SecurityException,
			NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		XSSFWorkbook workbook = new XSSFWorkbook();
		XSSFSheet sheet = workbook.createSheet("sheet1");
		sheet.setDefaultColumnWidth((short) 20);// 设置宽度
		XSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		centerStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		centerStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		centerStyle.setBorderTop(BorderStyle.THIN);// 上边框
		centerStyle.setBorderRight(BorderStyle.THIN);// 右边框
		Font font = workbook.createFont();
		font.setBold(true); // 粗体
		centerStyle.setFont(font);

		XSSFCellStyle contentStyle = workbook.createCellStyle();// 设置为水平居中
		contentStyle.setAlignment(HorizontalAlignment.CENTER);
		contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		contentStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		contentStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		contentStyle.setBorderTop(BorderStyle.THIN);// 上边框
		contentStyle.setBorderRight(BorderStyle.THIN);// 右边框

		XSSFRow row;
		XSSFCell cell;
		createTitleXlsx(showName, sheet, centerStyle);
		// 下面是输出各行的数据 下面是输出各行的数据 下面是输出各行的
		for (int i = 0; i < resultList.size(); i++) {
			Object result = resultList.get(i);
			row = sheet.createRow(i + 1);
			// 创建第 i+1 行
			for (int j = 0; j < resourceField.length; j++) {
				cell = row.createCell(j);// 创建第 j 列
				Method method;
				method = resultObj.getMethod(resourceField[j]);
				// 这里用到了反射机制,通 这里用到了反射机制, 这里用到了反射机制 过方法名来取得对应方法返回的结果对象
				Object obj = method.invoke(result);
				if (obj != null) {
					if (formatMap != null && formatMap.containsKey(resourceField)) {
						cell.setCellValue(formatMap.get(resourceField).get(obj.toString()));
						cell.setCellStyle(contentStyle);
					}
					else {
						String type = method.getGenericReturnType().toString();
						if ("class java.util.Date".equals(type)) {
							cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtil.toString((Date) obj,
									com.youming.shuiku.system.utils.excel.DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
							cell.setCellStyle(contentStyle);
						}
						else if ("class java.time.LocalDateTime".equals(type)) {
							cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtils.formatLocalDateTime(
									(LocalDateTime) obj,
									com.youming.shuiku.system.utils.excel.DateUtils.DATETIME_FORMAT));
							cell.setCellStyle(contentStyle);
						}
						else {
							cell.setCellValue(obj.toString());
							cell.setCellStyle(contentStyle);
						}
					}
				}
				else {
					cell.setCellStyle(contentStyle);
				}
			}
		}
		return workbook;
	}

	/*
	 * @description: 当数据量过大 分为多个sheet表
	 * @author: wangxihao
	 * @date:2023/2/13 10:50
	 * @param: resultList
	 * @param: showName
	 * @param: resourceField
	 * @param: resultObj
	 * @param: formatMap
	 * @return: org.apache.poi.xssf.usermodel.XSSFWorkbook
	 **/
	public static XSSFWorkbook getWorkbookXlsxMore(List<?> resultList, String[] showName, String[] resourceField,
			Class<?> resultObj, Map<String, Map<String, String>> formatMap) throws SecurityException,
			NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		XSSFWorkbook workbook = new XSSFWorkbook();
		//万条为一sheet
		if(resultList != null && resultList.size() >10000){
			int num = 0;
			if(resultList.size() % 10000 == 0){
				num = resultList.size() % 10000;
			}else {
				num = resultList.size() / 10000 +1;
			}
			for (int k = 0; k < num; k++) {
				List<?> objects = null;
				if(k == num-1){
					objects = resultList.subList(k, resultList.size());
				}else {
					objects = resultList.subList(k, k + 10000);
				}
				XSSFSheet sheet = workbook.createSheet("数据页"+k);
				sheet.setDefaultColumnWidth((short) 20);// 设置宽度
				XSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
				centerStyle.setAlignment(HorizontalAlignment.CENTER);
				centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
				centerStyle.setBorderBottom(BorderStyle.THIN); // 下边框
				centerStyle.setBorderLeft(BorderStyle.THIN);// 左边框
				centerStyle.setBorderTop(BorderStyle.THIN);// 上边框
				centerStyle.setBorderRight(BorderStyle.THIN);// 右边框
				Font font = workbook.createFont();
				font.setBold(true); // 粗体
				centerStyle.setFont(font);

				XSSFCellStyle contentStyle = workbook.createCellStyle();// 设置为水平居中
				contentStyle.setAlignment(HorizontalAlignment.CENTER);
				contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
				contentStyle.setBorderBottom(BorderStyle.THIN); // 下边框
				contentStyle.setBorderLeft(BorderStyle.THIN);// 左边框
				contentStyle.setBorderTop(BorderStyle.THIN);// 上边框
				contentStyle.setBorderRight(BorderStyle.THIN);// 右边框

				XSSFRow row;
				XSSFCell cell;
				createTitleXlsx(showName, sheet, centerStyle);
				// 下面是输出各行的数据 下面是输出各行的数据 下面是输出各行的
				for (int i = 0; i < objects.size(); i++) {
					Object result = objects.get(i);
					row = sheet.createRow(i + 1);
					// 创建第 i+1 行
					for (int j = 0; j < resourceField.length; j++) {
						cell = row.createCell(j);// 创建第 j 列
						Method method;
						method = resultObj.getMethod(resourceField[j]);
						// 这里用到了反射机制,通 这里用到了反射机制, 这里用到了反射机制 过方法名来取得对应方法返回的结果对象
						Object obj = method.invoke(result);
						if (obj != null) {
							if (formatMap != null && formatMap.containsKey(resourceField)) {
								cell.setCellValue(formatMap.get(resourceField).get(obj.toString()));
								cell.setCellStyle(contentStyle);
							}
							else {
								String type = method.getGenericReturnType().toString();
								if ("class java.util.Date".equals(type)) {
									cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtil.toString((Date) obj,
											com.youming.shuiku.system.utils.excel.DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
									cell.setCellStyle(contentStyle);
								}
								else if ("class java.time.LocalDateTime".equals(type)) {
									cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtils.formatLocalDateTime(
											(LocalDateTime) obj,
											com.youming.shuiku.system.utils.excel.DateUtils.DATETIME_FORMAT));
									cell.setCellStyle(contentStyle);
								}
								else {
									cell.setCellValue(obj.toString());
									cell.setCellStyle(contentStyle);
								}
							}
						}
						else {
							cell.setCellStyle(contentStyle);
						}
					}
				}
			}
		}
		return workbook;
	}

	@SuppressWarnings("deprecation")
	public static XSSFWorkbook getWorkbookXlsx(String[] showName, Map<String, Map<String, String>> formatMap)
			throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
			InvocationTargetException {
		XSSFWorkbook workbook = new XSSFWorkbook();
		XSSFSheet sheet = workbook.createSheet("sheet1");
		sheet.setDefaultColumnWidth((short) 20);
		XSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		centerStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		centerStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		centerStyle.setBorderTop(BorderStyle.THIN);// 上边框
		centerStyle.setBorderRight(BorderStyle.THIN);// 右边框
		Font font = workbook.createFont();
		font.setBold(true); // 粗体
		centerStyle.setFont(font);

		XSSFCellStyle contentStyle = workbook.createCellStyle();// 设置为水平居中
		contentStyle.setAlignment(HorizontalAlignment.CENTER);
		contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		contentStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		contentStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		contentStyle.setBorderTop(BorderStyle.THIN);// 上边框
		contentStyle.setBorderRight(BorderStyle.THIN);// 右边框

		XSSFRow row;
		XSSFCell cell;
		createTitleXlsx(showName, sheet, centerStyle);
		return workbook;
	}

	@SuppressWarnings("deprecation")
	public static XSSFWorkbook getWorkbookXlsxContract(String[] showName, Map<String, Map<String, String>> formatMap)
			throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
			InvocationTargetException {
		XSSFWorkbook workbook = new XSSFWorkbook();
		XSSFSheet sheet = workbook.createSheet("sheet1");
		CellStyle textStyle = workbook.createCellStyle();
		DataFormat format = workbook.createDataFormat();
		textStyle.setDataFormat(format.getFormat("@"));
		for (int i = 0; i < showName.length; i++) {
			sheet.setDefaultColumnStyle(0, textStyle);
		}
		sheet.setDefaultColumnWidth((short) 20);
		XSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		centerStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		centerStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		centerStyle.setBorderTop(BorderStyle.THIN);// 上边框
		centerStyle.setBorderRight(BorderStyle.THIN);// 右边框
		Font font = workbook.createFont();
		font.setBold(true); // 粗体
		centerStyle.setFont(font);

		XSSFCellStyle contentStyle = workbook.createCellStyle();// 设置为水平居中
		contentStyle.setAlignment(HorizontalAlignment.CENTER);
		contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		contentStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		contentStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		contentStyle.setBorderTop(BorderStyle.THIN);// 上边框
		contentStyle.setBorderRight(BorderStyle.THIN);// 右边框

		XSSFRow row;
		XSSFCell cell;
		createTitleXlsx(showName, sheet, centerStyle);
		return workbook;
	}

	/**
	 * 设置某些列的值只能输入预制的数据,显示下拉框.
	 * @param sheet 要设置的sheet.
	 * @param textlist 下拉框显示的内容
	 * @param firstRow 开始行
	 * @param endRow 结束行
	 * @param firstCol 开始列
	 * @param endCol 结束列
	 * @return 设置好的sheet.
	 */
	public static XSSFSheet setXSSFValidation(XSSFSheet sheet, String[] textlist, int firstRow, int endRow,
			int firstCol, int endCol) {
		// 加载下拉列表内容
		DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
		// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
		CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
		// 数据有效性对象
		HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);
		sheet.addValidationData(data_validation_list);
		return sheet;
	}

	private static void createTitleXls(String[] showName, HSSFSheet sheet, HSSFCellStyle cellStyle) {
		HSSFRow row = sheet.createRow(0); // 创建第 1 行,也就是输出表头 创建第
		HSSFCell cell;
		for (int i = 0; i < showName.length; i++) {
			cell = row.createCell(i);
			// 创建第 i 列 创建第
			cell.setCellValue(new HSSFRichTextString(showName[i]));
			cell.setCellStyle(cellStyle);
		}
	}

	private static void createTitleXlsx(String[] showName, XSSFSheet sheet, XSSFCellStyle cellStyle) {
		XSSFRow row = sheet.createRow(0); // 创建第 1 行,也就是输出表头 创建第
		XSSFCell cell;
		for (int i = 0; i < showName.length; i++) {
			cell = row.createCell(i);
			// 创建第 i 列 创建第
			cell.setCellValue(new XSSFRichTextString(showName[i]));
			cell.setCellStyle(cellStyle);
		}
	}

	private static void createTitle2(String[] showName, HSSFSheet sheet, HSSFCellStyle centerStyle,
			HSSFCellStyle style) {
		HSSFRow row = sheet.createRow(3); // 创建第 1 行,也就是输出表头 创建第
		HSSFCell cell;
		for (int i = 0; i < showName.length; i++) {
			cell = row.createCell(i);
			// 创建第 i 列 创建第
			cell.setCellValue(new HSSFRichTextString(showName[i]));
			cell.setCellStyle(centerStyle); // 样式,居中
			cell.setCellStyle(style); // 填充亮橘色
		}
	}

	/**
	 * @param @param resultList
	 * @param @param showName
	 * @param @return 设定文件
	 * @return HSSFWorkbook 返回类型
	 * @throws
	 * @Title: createWorkbook
	 * @Description: 创建Workbook
	 */
	@SuppressWarnings("deprecation")
	public static HSSFWorkbook createWorkbook(List<List<Cell>> resultList, String[] showName) {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("sheet1");
		HSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		// centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// centerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		createTitleXls(showName, sheet, centerStyle);
		HSSFRow row = null;
		HSSFCell cell = null;
		if (resultList.size() > 0) {
			int[][] arraSort = new int[resultList.get(0).size()][resultList.size()];
			for (int i = 0; i < resultList.size(); i++) {
				row = sheet.createRow(i + 1);
				// sheet.setColumnWidth(i + 1, 15);
				List<Cell> cellList = resultList.get(i);
				for (int j = 0; j < cellList.size(); j++) {
					cell = row.createCell(j);// 创建第 j 列
					cell.setCellValue(cellList.get(j).getValue());
					int b = cell.getStringCellValue().getBytes().length;
					arraSort[j][i] = b;
					if (cellList.get(j).getStyle() != null) {
						cell.setCellStyle(cellList.get(j).getStyle());
					}
				}
			}
			// 列的最大列宽值(不包括标题)
			int widthInfo[] = TwoMaxInfo(arraSort);
			// 与标题在比较列宽
			for (int i = 0; i < showName.length; i++) {
				// sheet.autoSizeColumn(i);
				// 算出列(包括标题的最大列宽)
				int maxWidthInfo = showName[i].getBytes().length > widthInfo[i] ? showName[i].getBytes().length
						: widthInfo[i];
				sheet.setColumnWidth(i, maxWidthInfo > 255 ? 255 * 256 : maxWidthInfo * 256);
			}
		}
		return workbook;
	}

	public static int[] TwoMaxInfo(int[][] arraSort) {
		int[] arraySortInfo = null;
		arraySortInfo = new int[arraSort.length];
		int count = 0;
		for (int[] is : arraSort) {
			int[] arraInfo = is;
			Arrays.sort(arraInfo);
			arraySortInfo[count] = arraInfo[arraInfo.length - 1];
			count++;
		}
		return arraySortInfo;
	}

	/**
	 * @param @param resultList
	 * @param @param showName
	 * @param @return 设定文件
	 * @return HSSFWorkbook 返回类型
	 * @throws
	 * @Title: createWorkbookAll
	 * @Description: 创建Workbook
	 */
	@SuppressWarnings("deprecation")
	public static HSSFWorkbook createWorkbookAll(Map<String, List<List<Cell>>> vMap, String[] showName) {
		HSSFWorkbook workbook = new HSSFWorkbook();
		for (Map.Entry<String, List<List<Cell>>> entry : vMap.entrySet()) {
			HSSFSheet sheet = workbook.createSheet(entry.getKey());
			sheet.setDefaultColumnWidth((short) 15);
			HSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
			// centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
			// centerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			centerStyle.setAlignment(HorizontalAlignment.CENTER);
			centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
			createTitleXls(showName, sheet, centerStyle);
			HSSFRow row;
			HSSFCell cell;
			for (int i = 0; i < entry.getValue().size(); i++) {
				row = sheet.createRow(i + 1);
				List<Cell> cellList = entry.getValue().get(i);
				for (int j = 0; j < cellList.size(); j++) {
					cell = row.createCell(j);// 创建第 j 列
					cell.setCellValue(cellList.get(j).getValue());
					if (cellList.get(j).getStyle() != null) {
						cell.setCellStyle(cellList.get(j).getStyle());
					}
				}
			}
			for (int i = 0; i < showName.length; i++) {
				sheet.autoSizeColumn(i);
			}
		}
		return workbook;
	}

	public static InputStream workbook2InputStreamXls(HSSFWorkbook workbook, String fileName) throws Exception {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		workbook.write(baos);
		baos.flush();
		byte[] aa = baos.toByteArray();
		InputStream excelStream = new ByteArrayInputStream(aa, 0, aa.length);
		baos.close();
		return excelStream;
	}

	public static InputStream workbook2InputStreamXlsx(XSSFWorkbook workbook, String fileName) throws Exception {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		workbook.write(baos);
		baos.flush();
		byte[] aa = baos.toByteArray();
		InputStream excelStream = new ByteArrayInputStream(aa, 0, aa.length);
		baos.close();
		return excelStream;
	}

	/**
	 * @param @param resultList 导出的数据集合
	 * @param @param showName 导出的字段名称
	 * @param @param headerName Excel表头参数
	 * @param @param resourceField 实例类对象get方法名,通过反射获取值
	 * @param @param resultObj 实例类
	 * @param @param formatMap
	 * @param @return 返回workbook
	 * @param @throws SecurityException
	 * @param @throws NoSuchMethodException
	 * @param @throws IllegalArgumentException
	 * @param @throws IllegalAccessException
	 * @param @throws InvocationTargetException 设定文件
	 * @return HSSFWorkbook 返回类型
	 * @throws
	 * @Title: createWorkbookVariety
	 * @Description: 导出Excel报表
	 */

	public static HSSFWorkbook createWorkbookVariety(List<?> resultList, String[] showName,
			ArrayList<String> headerName, String[] resourceField, Class<?> resultObj,
			Map<String, Map<String, String>> formatMap) throws SecurityException, NoSuchMethodException,
			IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("sheet1");
		sheet.setDefaultColumnWidth((short) 15);
		HSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		// centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// centerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		/**
		 * 设置表头的样式
		 */
		HSSFCellStyle titylStyle = workbook.createCellStyle();
		createTitleVariety(showName, headerName, sheet, titylStyle);
		HSSFRow row;
		HSSFCell cell;
		for (int i = 0; i < resultList.size(); i++) {
			Object result = resultList.get(i);
			if (headerName != null && headerName.size() > 0) {
				row = sheet.createRow(i + 1 + headerName.size());
			}
			else {
				row = sheet.createRow(i + 1);
			}
			// 创建第 i+1 行
			for (int j = 0; j <= resourceField.length; j++) {
				cell = row.createCell(j);// 创建第 j 列
				cell.setCellStyle(centerStyle);
				if (j == 0) {
					// 为Excel表的第一列添加编号,表头为:序号;eg:1,2,3,4……
					cell.setCellValue(i + 1);
				}
				else {
					Method method;
					method = resultObj.getMethod(resourceField[j - 1]);
					// 这里用到了反射机制,通 这里用到了反射机制, 这里用到了反射机制 过方法名来取得对应方法返回的结果对象
					Object obj = method.invoke(result);
					if (obj != null) {
						if (formatMap != null && formatMap.containsKey(resourceField)) {
							cell.setCellValue(formatMap.get(resourceField).get(obj.toString()));
						}
						else {
							String type = method.getGenericReturnType().toString();
							if ("class java.util.Date".equals(type)) {
								cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtil.toString((Date) obj,
										com.youming.shuiku.system.utils.excel.DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
							}
							else {
								cell.setCellValue(obj.toString());
							}
						}
					}
				}
			}
		}
		return workbook;
	}

	/**
	 * @param @param showName
	 * @param @param headerName
	 * @param @param sheet 设定文件
	 * @return void 返回类型
	 * @throws
	 * @Title: createTitleVariety
	 * @Description: 多行表头
	 */
	private static void createTitleVariety(String[] showName, ArrayList<String> headerName, HSSFSheet sheet,
			HSSFCellStyle titylStyle) {
		HSSFRow row;
		HSSFCell cell;
		// titylStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// titylStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		titylStyle.setAlignment(HorizontalAlignment.CENTER);
		titylStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		if (headerName != null && headerName.size() > 0) {
			for (int i = 0; i < headerName.size(); i++) {
				row = sheet.createRow((short) i);
				if (i == 0) {
					cell = row.createCell(i);
					sheet.addMergedRegion(new CellRangeAddress(i, i, (short) 0, (short) showName.length));
					cell.setCellStyle(titylStyle);
					if (headerName.get(i) != null) {
						cell.setCellValue(new HSSFRichTextString(headerName.get(i).toString()));
					}
					else {
						cell.setCellValue(new HSSFRichTextString(""));
					}
				}
				else {
					cell = row.createCell(i - 1);
					sheet.addMergedRegion(new CellRangeAddress(i, i, (short) 0, (short) showName.length));
					if (headerName.get(i) != null) {
						cell.setCellValue(new HSSFRichTextString(headerName.get(i).toString()));
					}
					else {
						cell.setCellValue(new HSSFRichTextString(""));
					}
				}
			}
		}
		// 设置Excel字段
		if (headerName != null && headerName.size() > 0) {
			row = sheet.createRow((short) headerName.size());
		}
		else {
			row = sheet.createRow(0);
		}
		for (int n = 0; n <= showName.length; n++) {
			if (n == 0) {
				cell = row.createCell(n);
				cell.setCellStyle(titylStyle);
				cell.setCellValue(new HSSFRichTextString("序号"));
			}
			else {
				cell = row.createCell(n);
				cell.setCellStyle(titylStyle);
				cell.setCellValue(new HSSFRichTextString(showName[n - 1]));
			}
		}
	}

	public static HSSFWorkbook createWorkbookVarietyParam(ArrayList<ArrayList<String>> resultList, String[] showName,
			ArrayList<String> headerName) {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("sheet1");
		sheet.setDefaultColumnWidth((short) 15);
		HSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		// centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// centerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		/**
		 * 设置表头的样式
		 */
		HSSFCellStyle titylStyle = workbook.createCellStyle();
		createTitleVariety(showName, headerName, sheet, titylStyle);
		HSSFRow row;
		HSSFCell cell;
		if (resultList != null && resultList.size() > 0) {
			for (int i = 0; i < resultList.size(); i++) {
				ArrayList<String> rowResultList = resultList.get(i);
				if (headerName != null && headerName.size() > 0) {
					row = sheet.createRow((short) (i + 1 + headerName.size()));
				}
				else {
					row = sheet.createRow((short) (i + 1));
				}
				if (rowResultList != null && rowResultList.size() > 0) {

					for (int n = 0; n <= rowResultList.size(); n++) {
						cell = row.createCell(n);// 创建第 j 列
						cell.setCellStyle(centerStyle);
						if (n == 0) {
							// 为Excel表的第一列添加编号,表头为:序号;eg:1,2,3,4……
							cell.setCellValue(i + 1);
						}
						else if (rowResultList.get(n - 1) != null) {
							cell.setCellValue(rowResultList.get(n - 1).toString());
						}
						else {
							cell.setCellValue("");
						}
					}

				}
			}
		}

		return workbook;
	}

	/**
	 * @param @param resultList
	 * @param @param headList
	 * @param @param sumList
	 * @param @param showName
	 * @param @param resourceField
	 * @param @param resultObj
	 * @param @param formatMap
	 * @param @return
	 * @param @throws SecurityException
	 * @param @throws NoSuchMethodException
	 * @param @throws IllegalArgumentException
	 * @param @throws IllegalAccessException
	 * @param @throws InvocationTargetException 设定文件
	 * @return HSSFWorkbook 返回类型
	 * @throws
	 * @Title: getWorkbook2
	 * @Description: TODO(导出车辆运行过程分析Excel)
	 */
	@SuppressWarnings("deprecation")
	public static HSSFWorkbook getWorkbook2(List<?> resultList, List<?> headList, List<?> sumList, String[] showName,
			String[] resourceField, Class<?> resultObj, Map<String, Map<String, String>> formatMap)
			throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
			InvocationTargetException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("sheet1");
		sheet.setDefaultColumnWidth((short) 20);
		HSSFCellStyle centerStyle = workbook.createCellStyle();// 设置为水平居中
		// centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// centerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		centerStyle.setAlignment(HorizontalAlignment.CENTER);
		centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);

		centerStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		centerStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		centerStyle.setBorderTop(BorderStyle.THIN);// 上边框
		centerStyle.setBorderRight(BorderStyle.THIN);// 右边框
		HSSFDataFormat format = workbook.createDataFormat();
		// 这样才能真正的控制单元格格式,@就是指文本型
		centerStyle.setDataFormat(format.getFormat("@"));

		HSSFCellStyle style = workbook.createCellStyle();
		// style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		style.setAlignment(HorizontalAlignment.CENTER);
		style.setVerticalAlignment(VerticalAlignment.CENTER);
		style.setBorderBottom(BorderStyle.THIN); // 下边框
		style.setBorderLeft(BorderStyle.THIN);// 左边框
		style.setBorderTop(BorderStyle.THIN);// 上边框
		style.setBorderRight(BorderStyle.THIN);// 右边框
		style.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 填充单元格
		style.setFillForegroundColor(HSSFColor.HSSFColorPredefined.LIGHT_ORANGE.getIndex());// 填亮橘色

		HSSFCellStyle greenStyle = workbook.createCellStyle();
		// greenStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// greenStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		greenStyle.setAlignment(HorizontalAlignment.CENTER);
		greenStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		greenStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		greenStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		greenStyle.setBorderTop(BorderStyle.THIN);// 上边框
		greenStyle.setBorderRight(BorderStyle.THIN);// 右边框
		greenStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 填充单元格
		// greenStyle.setFillForegroundColor(HSSFColor.BRIGHT_GREEN.index);//填亮绿色
		greenStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SEA_GREEN.getIndex());// 填深绿色
		Font greenfont = workbook.createFont();
		greenfont.setBold(true); // 粗体
		greenStyle.setFont(greenfont);

		HSSFCellStyle overGreenStyle = workbook.createCellStyle();
		// overGreenStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// overGreenStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		overGreenStyle.setAlignment(HorizontalAlignment.CENTER);
		overGreenStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		overGreenStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		overGreenStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		overGreenStyle.setBorderTop(BorderStyle.THIN);// 上边框
		overGreenStyle.setBorderRight(BorderStyle.THIN);// 右边框
		overGreenStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 填充单元格
		overGreenStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SEA_GREEN.getIndex());// 填深绿色

		HSSFCellStyle fontStyle = workbook.createCellStyle();// 字体样式
		fontStyle.setAlignment(HorizontalAlignment.CENTER);
		fontStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		fontStyle.setBorderBottom(BorderStyle.THIN); // 下边框
		fontStyle.setBorderLeft(BorderStyle.THIN);// 左边框
		fontStyle.setBorderTop(BorderStyle.THIN);// 上边框
		fontStyle.setBorderRight(BorderStyle.THIN);// 右边框
		fontStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 填充单元格
		fontStyle.setFillForegroundColor(HSSFColor.HSSFColorPredefined.SEA_GREEN.getIndex());// 填深绿色
		Font font = workbook.createFont();
		font.setColor(HSSFColor.HSSFColorPredefined.WHITE.getIndex()); // 白字
		fontStyle.setFont(font);

		HSSFRow row;
		HSSFCell cell;
		// createTitle2(showName, sheet, centerStyle, style);

		for (int j = 0; j < 3; j++) {
			row = sheet.createRow(j);
			for (int i = 0; i < showName.length; i++) {
				cell = row.createCell(i);
				if (j == 0) {
					if (i == 0) {
						cell.setCellValue(new HSSFRichTextString("查询时间"));
						cell.setCellStyle(greenStyle);
					}
					else if (i == 1) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(j, j, (short) i, (short) (i + 3));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString(headList.get(0).toString()));
						cell.setCellStyle(fontStyle);
					}
				}
				else if (j == 1) {
					if (i == 0) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(j, (j + 1), (short) 0, (short) 0);
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("车辆信息"));
						cell.setCellStyle(greenStyle);
					}
					else if (i == 1) {
						cell.setCellValue(new HSSFRichTextString("车牌号"));
					}
					else if (i == 2) {
						cell.setCellValue(new HSSFRichTextString("所属公司"));
					}
					else if (i == 3) {
						cell.setCellValue(new HSSFRichTextString("车辆类型"));
					}
					else if (i == 4) {
						cell.setCellValue(new HSSFRichTextString("入网时间"));
					}
					else if (i == 5) {
						cell.setCellValue(new HSSFRichTextString("车身颜色"));
					}
					else if (i == 6) {
						cell.setCellValue(new HSSFRichTextString("型号"));
					}
					else if (i == 7) {
						cell.setCellValue(new HSSFRichTextString("司机"));
					}
					else if (i == 8) {
						cell.setCellValue(new HSSFRichTextString("手机号"));
					}
					if (i > 0 && i < 9) {
						cell.setCellStyle(overGreenStyle);
					}
				}
				else if (j == 2) {
					if (i == 1) {
						cell.setCellValue(new HSSFRichTextString(headList.get(1).toString()));
					}
					else if (i == 2) {
						cell.setCellValue(new HSSFRichTextString(headList.get(2).toString()));
					}
					else if (i == 3) {
						cell.setCellValue(new HSSFRichTextString(headList.get(3).toString()));
					}
					else if (i == 4) {
						cell.setCellValue(new HSSFRichTextString(headList.get(4).toString()));
					}
					else if (i == 5) {
						cell.setCellValue(new HSSFRichTextString(headList.get(5).toString()));
					}
					else if (i == 6) {
						cell.setCellValue(new HSSFRichTextString(headList.get(6).toString()));
					}
					else if (i == 7) {
						cell.setCellValue(new HSSFRichTextString(headList.get(7).toString()));
					}
					else if (i == 8) {
						cell.setCellValue(new HSSFRichTextString(headList.get(8).toString()));
					}
					if (i > 0 && i < 9) {
						cell.setCellStyle(fontStyle);
					}
				}
			}
		}

		for (int k = 0; k < 3; k++) {
			row = sheet.createRow(k + 3);
			for (int i = 0; i < showName.length; i++) {
				cell = row.createCell(i);
				if (k == 0) {
					if (i == 0) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 4, (short) (i), (short) (i + 1));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("时间区间"));
					}
					else if (i == 2) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 4, (short) (i), (short) (i + 1));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("时长"));
					}
					else if (i == 4) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 4, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("位置信息"));
					}
					else if (i == 5) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 4, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("车辆状态"));
					}
					else if (i == 6) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("行驶里程(km)"));
					}
					else if (i == 7) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("超速(次数)"));
					}
					else if (i == 8) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 3, (short) (i), (short) (i + 3));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("疲劳驾驶"));
					}
					else if (i == 12) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("急加速(次数)"));
					}
					else if (i == 13) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("急减速(次数)"));
					}
					else if (i == 14) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("急转弯(次数)"));
					}
					else if (i == 15) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("平均速度(km/h)"));
					}
					else if (i == 16) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 5, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("最高速度(km/h)"));
					}
				}
				else if (k == 1) {
					if (i == 8) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 4, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("次数"));
					}
					else if (i == 9) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 3, (short) (i), (short) (i + 1));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("时长"));
					}
					else if (i == 11) {
						// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
						CellRangeAddress region1 = new CellRangeAddress(k + 3, k + 4, (short) (i), (short) (i));
						sheet.addMergedRegion(region1);
						cell.setCellValue(new HSSFRichTextString("里程(km)"));
					}
				}
				else if (k == 2) {
					if (i == 0) {
						cell.setCellValue(new HSSFRichTextString("开始时间"));
					}
					else if (i == 1) {
						cell.setCellValue(new HSSFRichTextString("结束时间"));
					}
					else if (i == 2) {
						cell.setCellValue(new HSSFRichTextString("小时"));
					}
					else if (i == 3) {
						cell.setCellValue(new HSSFRichTextString("分钟"));
					}
					else if (i == 4) {
						cell.setCellValue(new HSSFRichTextString("详细地址"));
					}
					else if (i == 5) {
						cell.setCellValue(new HSSFRichTextString("状态"));
					}
					else if (i == 9) {
						cell.setCellValue(new HSSFRichTextString("小时"));
					}
					else if (i == 10) {
						cell.setCellValue(new HSSFRichTextString("分钟"));
					}
				}
				cell.setCellStyle(style); // 填充亮橘色
			}
		}

		// 下面是输出各行的数据 下面是输出各行的数据 下面是输出各行的
		for (int i = 0; i < resultList.size(); i++) {
			Object result = resultList.get(i);
			row = sheet.createRow(i + 6);
			// 创建第 i+1 行
			for (int j = 0; j < resourceField.length; j++) {
				cell = row.createCell(j);// 创建第 j 列
				Method method;
				method = resultObj.getMethod(resourceField[j]);
				// 这里用到了反射机制,通 这里用到了反射机制, 这里用到了反射机制 过方法名来取得对应方法返回的结果对象
				Object obj = method.invoke(result);
				if (obj != null) {
					if (formatMap != null && formatMap.containsKey(resourceField)) {
						cell.setCellValue(formatMap.get(resourceField).get(obj.toString()));
						cell.setCellStyle(centerStyle); // 样式,居中
					}
					else {
						String type = method.getGenericReturnType().toString();
						if ("class java.util.Date".equals(type)) {
							cell.setCellValue(com.youming.shuiku.system.utils.excel.DateUtil.toString((Date) obj,
									com.youming.shuiku.system.utils.excel.DateUtil.DEFAULT_DATETIME_FORMAT_SEC));
						}
						else {
							cell.setCellValue(obj.toString());
						}
						cell.setCellStyle(centerStyle); // 样式,居中
					}
				}
				else {
					cell.setCellStyle(centerStyle); // 样式,居中
				}
			}
		}

		// 参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
		// CellRangeAddress region1 = new CellRangeAddress(showName.length,
		// showName.length, (short) 0, (short) 11);
		row = sheet.createRow(resultList.size() + 6);
		for (int i = 0; i < showName.length; i++) {
			cell = row.createCell(i);
			if (i == 0) {
				// 参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号
				CellRangeAddress region1 = new CellRangeAddress(resultList.size() + 6, resultList.size() + 6,
						(short) (i), (short) (i + 1));
				sheet.addMergedRegion(region1);
				cell.setCellValue(new HSSFRichTextString("总计"));
				cell.setCellStyle(greenStyle);
			}
			else if (i == 2) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(0).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 3) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(1).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 4) {// 折合时间(min)
				cell.setCellValue(new HSSFRichTextString("折合时间(min)"));
				cell.setCellStyle(greenStyle);
			}
			else if (i == 5) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(2).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 6) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(3).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 7) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(4).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 8) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(5).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 9) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(6).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 10) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(7).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 11) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(8).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 12) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(9).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 13) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(10).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 14) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(11).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 15) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(12).toString()));
				cell.setCellStyle(fontStyle);
			}
			else if (i == 16) {
				cell.setCellValue(new HSSFRichTextString(sumList.get(13).toString()));
				cell.setCellStyle(fontStyle);
			}
		}

		return workbook;
	}

}

2、原始poi

int a = waterHeightReport.get(0).getPrv().size()+2;
XSSFWorkbook sheets = new XSSFWorkbook();
XSSFSheet water1 = sheets.createSheet("water1");
XSSFRow row = water1.createRow(0);
XSSFCell cell1 = row.createCell(0);
XSSFCellStyle cellStyle = sheets.createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
XSSFFont font = sheets.createFont(); //创建字体
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //字体加粗
cellStyle.setFont(font);
cell1.setCellStyle(cellStyle);
cell1.setCellValue("水位报表");

CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,a-1);//起始行,结束行,起始列,结束列
water1.addMergedRegion(callRangeAddress);//合并
XSSFRow row1 = water1.createRow(1);
XSSFCell cell2 = row1.createCell(0);
cell2.setCellValue("站点");
cell2.setCellStyle(cellStyle);
XSSFCell cell3 = row1.createCell(1);
cell3.setCellValue("实时水位");
cell3.setCellStyle(cellStyle);
for (int i = 0; i < waterHeightReport.get(0).getPrv().size() ; i++) {
	XSSFCell cell = row1.createCell(i+2);
	cell.setCellValue(waterHeightReport.get(0).getPrv().get(i).getPeriod()+"日(米)");
	cell.setCellStyle(cellStyle);
}
for (int i = 0; i < waterHeightReport.size(); i++) {
	XSSFRow rows = water1.createRow(i + 2);
	rows.createCell(0).setCellValue(waterHeightReport.get(i).getStNm());
	rows.createCell(1).setCellValue(waterHeightReport.get(i).getPrv().get(a-3).getWaterHeight());
	for (int j = 0; j < waterHeightReport.get(i).getPrv().size(); j++) {
		rows.createCell(j+2).setCellValue(waterHeightReport.get(i).getPrv().get(j).getWaterHeight());
	}
}
ByteArrayOutputStream os = new ByteArrayOutputStream();
sheets.write(os);
byte[] b = os.toByteArray();
MinioUploadDto minioUploadDto = minioService.upload("水位报表.xlsx", b, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
return minioUploadDto.getUrl();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值