|
@@ -40,583 +40,593 @@ import com.keao.edu.util.exception.UtilException;
|
|
|
|
|
|
public class POIUtil {
|
|
|
|
|
|
- private final static Logger LOGGER = LoggerFactory.getLogger(POIUtil.class);
|
|
|
-
|
|
|
- // 能导出的最大数据条数
|
|
|
- private final static int MAX_DATA_SIZE = 50000;
|
|
|
-
|
|
|
- private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
-
|
|
|
- /**
|
|
|
- * 将数据集dataset导出到fileName文件中(只支持.xlsx格式)
|
|
|
- * @param headColumns 导出文件的列名
|
|
|
- * @param dataset 数据源
|
|
|
- * @return
|
|
|
- * @throws IOException
|
|
|
- */
|
|
|
- public static SXSSFWorkbook exportBigExcel(String[] headColumns, List<Map<String, Object>> dataset) throws IOException {
|
|
|
- if (headColumns == null) {
|
|
|
- throw new UtilException("excel列名不能为空");
|
|
|
- }
|
|
|
- if (dataset == null) {
|
|
|
- throw new UtilException("数据集不能为空");
|
|
|
- }
|
|
|
- SXSSFWorkbook workbook = new SXSSFWorkbook();
|
|
|
- CellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
- /************** 设置单元格样式 *************/
|
|
|
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
- style.setWrapText(true);
|
|
|
- Font font = workbook.createFont();
|
|
|
- font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
- font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
- style.setFont(font);
|
|
|
-
|
|
|
- Sheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
- // 设置表头
|
|
|
- // 创建第一行
|
|
|
- Row row1 = sheet.createRow(0);
|
|
|
- Cell cell = null;
|
|
|
- for (int i = 0; i < headColumns.length; i++) {
|
|
|
- // 创建列
|
|
|
- cell = row1.createCell(i);
|
|
|
- // 定义单元格为字符串类型
|
|
|
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
- // 设置单元格的样式
|
|
|
- cell.setCellStyle(style);
|
|
|
- // 设置单元格的值
|
|
|
- cell.setCellValue(headColumns[i]);
|
|
|
- }
|
|
|
- Row row = null;
|
|
|
- // 添加数据
|
|
|
- Map<String, Object> data = null;
|
|
|
- for (int i = 1; i <= dataset.size(); i++) {
|
|
|
- data = dataset.get(i - 1);
|
|
|
- if (data != null) {
|
|
|
- row = sheet.createRow(i);
|
|
|
- int index = 0;
|
|
|
- for (Entry<String, Object> entry : data.entrySet()) {
|
|
|
- row.createCell(index).setCellValue(entry.getValue().toString());
|
|
|
- index++;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return workbook;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将数据集dataset导出到fileName文件中
|
|
|
- * @param headColumns 导出文件的列名
|
|
|
- * @param dataset 数据源
|
|
|
- * @return
|
|
|
- * @throws IOException
|
|
|
- */
|
|
|
- public static HSSFWorkbook exportExcel(String[] headColumns, List<Map<String, Object>> dataset) throws IOException {
|
|
|
- if (headColumns == null) {
|
|
|
- throw new UtilException("excel列名不能为空");
|
|
|
- }
|
|
|
- if (dataset == null) {
|
|
|
- throw new UtilException("数据集不能为空");
|
|
|
- }
|
|
|
- if (dataset.size() > MAX_DATA_SIZE) {
|
|
|
- throw new UtilException("数据集太大,不能导出.最大数据集不能超过" + MAX_DATA_SIZE);
|
|
|
- }
|
|
|
- HSSFWorkbook workbook = new HSSFWorkbook();
|
|
|
- HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
- /************** 设置单元格样式 *************/
|
|
|
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
- style.setWrapText(true);
|
|
|
- HSSFFont font = workbook.createFont();
|
|
|
- font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
- font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
- style.setFont(font);
|
|
|
-
|
|
|
- HSSFSheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
- // 设置表头
|
|
|
- // 创建第一行
|
|
|
- HSSFRow row1 = sheet.createRow(0);
|
|
|
- HSSFCell cell = null;
|
|
|
- for (int i = 0; i < headColumns.length; i++) {
|
|
|
- // 创建列
|
|
|
- cell = row1.createCell(i);
|
|
|
- // 定义单元格为字符串类型
|
|
|
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
- // 设置单元格的样式
|
|
|
- cell.setCellStyle(style);
|
|
|
- // 设置单元格的值
|
|
|
- cell.setCellValue(headColumns[i]);
|
|
|
- }
|
|
|
- HSSFRow row = null;
|
|
|
- // 添加数据
|
|
|
- Map<String, Object> data = null;
|
|
|
- for (int i = 1; i <= dataset.size(); i++) {
|
|
|
- data = dataset.get(i - 1);
|
|
|
- if (data != null) {
|
|
|
- row = sheet.createRow(i);
|
|
|
- int index = 0;
|
|
|
- for (Entry<String, Object> entry : data.entrySet()) {
|
|
|
- row.createCell(index).setCellValue(entry.getValue().toString());
|
|
|
- index++;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return workbook;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将数据集dataset导出到fileName文件中
|
|
|
- * @param headColumns 导出文件的列名
|
|
|
- * @param fieldColumns
|
|
|
- * @param dataset 数据源
|
|
|
- * @return
|
|
|
- * @throws IOException
|
|
|
- * @throws NoSuchMethodException
|
|
|
- * @throws InvocationTargetException
|
|
|
- * @throws IllegalAccessException
|
|
|
- */
|
|
|
- public static <T> HSSFWorkbook exportExcel(String[] headColumns, String[] fieldColumns, List<T> dataset) throws IOException, IllegalAccessException,
|
|
|
- InvocationTargetException, NoSuchMethodException {
|
|
|
- if (headColumns == null) {
|
|
|
- throw new UtilException("excel列名不能为空");
|
|
|
- }
|
|
|
- if (dataset == null) {
|
|
|
- throw new UtilException("数据集不能为空");
|
|
|
- }
|
|
|
+ private final static Logger LOGGER = LoggerFactory.getLogger(POIUtil.class);
|
|
|
+
|
|
|
+ // 能导出的最大数据条数
|
|
|
+ private final static int MAX_DATA_SIZE = 50000;
|
|
|
+
|
|
|
+ private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将数据集dataset导出到fileName文件中(只支持.xlsx格式)
|
|
|
+ *
|
|
|
+ * @param headColumns 导出文件的列名
|
|
|
+ * @param dataset 数据源
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static SXSSFWorkbook exportBigExcel(String[] headColumns, List<Map<String, Object>> dataset) throws IOException {
|
|
|
+ if (headColumns == null) {
|
|
|
+ throw new UtilException("excel列名不能为空");
|
|
|
+ }
|
|
|
+ if (dataset == null) {
|
|
|
+ throw new UtilException("数据集不能为空");
|
|
|
+ }
|
|
|
+ SXSSFWorkbook workbook = new SXSSFWorkbook();
|
|
|
+ CellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
+ /************** 设置单元格样式 *************/
|
|
|
+ style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
+ style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
+ style.setWrapText(true);
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
+ style.setFont(font);
|
|
|
+
|
|
|
+ Sheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
+ // 设置表头
|
|
|
+ // 创建第一行
|
|
|
+ Row row1 = sheet.createRow(0);
|
|
|
+ Cell cell = null;
|
|
|
+ for (int i = 0; i < headColumns.length; i++) {
|
|
|
+ // 创建列
|
|
|
+ cell = row1.createCell(i);
|
|
|
+ // 定义单元格为字符串类型
|
|
|
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
+ // 设置单元格的样式
|
|
|
+ cell.setCellStyle(style);
|
|
|
+ // 设置单元格的值
|
|
|
+ cell.setCellValue(headColumns[i]);
|
|
|
+ }
|
|
|
+ Row row = null;
|
|
|
+ // 添加数据
|
|
|
+ Map<String, Object> data = null;
|
|
|
+ for (int i = 1; i <= dataset.size(); i++) {
|
|
|
+ data = dataset.get(i - 1);
|
|
|
+ if (data != null) {
|
|
|
+ row = sheet.createRow(i);
|
|
|
+ int index = 0;
|
|
|
+ for (Entry<String, Object> entry : data.entrySet()) {
|
|
|
+ row.createCell(index).setCellValue(entry.getValue().toString());
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return workbook;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将数据集dataset导出到fileName文件中
|
|
|
+ *
|
|
|
+ * @param headColumns 导出文件的列名
|
|
|
+ * @param dataset 数据源
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static HSSFWorkbook exportExcel(String[] headColumns, List<Map<String, Object>> dataset) throws IOException {
|
|
|
+ if (headColumns == null) {
|
|
|
+ throw new UtilException("excel列名不能为空");
|
|
|
+ }
|
|
|
+ if (dataset == null) {
|
|
|
+ throw new UtilException("数据集不能为空");
|
|
|
+ }
|
|
|
+ if (dataset.size() > MAX_DATA_SIZE) {
|
|
|
+ throw new UtilException("数据集太大,不能导出.最大数据集不能超过" + MAX_DATA_SIZE);
|
|
|
+ }
|
|
|
+ HSSFWorkbook workbook = new HSSFWorkbook();
|
|
|
+ HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
+ /************** 设置单元格样式 *************/
|
|
|
+ style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
+ style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
+ style.setWrapText(true);
|
|
|
+ HSSFFont font = workbook.createFont();
|
|
|
+ font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
+ style.setFont(font);
|
|
|
+
|
|
|
+ HSSFSheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
+ // 设置表头
|
|
|
+ // 创建第一行
|
|
|
+ HSSFRow row1 = sheet.createRow(0);
|
|
|
+ HSSFCell cell = null;
|
|
|
+ for (int i = 0; i < headColumns.length; i++) {
|
|
|
+ // 创建列
|
|
|
+ cell = row1.createCell(i);
|
|
|
+ // 定义单元格为字符串类型
|
|
|
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
+ // 设置单元格的样式
|
|
|
+ cell.setCellStyle(style);
|
|
|
+ // 设置单元格的值
|
|
|
+ cell.setCellValue(headColumns[i]);
|
|
|
+ }
|
|
|
+ HSSFRow row = null;
|
|
|
+ // 添加数据
|
|
|
+ Map<String, Object> data = null;
|
|
|
+ for (int i = 1; i <= dataset.size(); i++) {
|
|
|
+ data = dataset.get(i - 1);
|
|
|
+ if (data != null) {
|
|
|
+ row = sheet.createRow(i);
|
|
|
+ int index = 0;
|
|
|
+ for (Entry<String, Object> entry : data.entrySet()) {
|
|
|
+ row.createCell(index).setCellValue(entry.getValue().toString());
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return workbook;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将数据集dataset导出到fileName文件中
|
|
|
+ *
|
|
|
+ * @param headColumns 导出文件的列名
|
|
|
+ * @param fieldColumns
|
|
|
+ * @param dataset 数据源
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ * @throws NoSuchMethodException
|
|
|
+ * @throws InvocationTargetException
|
|
|
+ * @throws IllegalAccessException
|
|
|
+ */
|
|
|
+ public static <T> HSSFWorkbook exportExcel(String[] headColumns, String[] fieldColumns, List<T> dataset) throws IOException, IllegalAccessException,
|
|
|
+ InvocationTargetException, NoSuchMethodException {
|
|
|
+ if (headColumns == null) {
|
|
|
+ throw new UtilException("excel列名不能为空");
|
|
|
+ }
|
|
|
+ if (dataset == null) {
|
|
|
+ throw new UtilException("数据集不能为空");
|
|
|
+ }
|
|
|
/*if (dataset.size() > MAX_DATA_SIZE) {
|
|
|
throw new UtilException("数据集太大,不能导出.最大数据集不能超过" + MAX_DATA_SIZE);
|
|
|
}*/
|
|
|
- HSSFWorkbook workbook = new HSSFWorkbook();
|
|
|
- HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
- /************** 设置单元格样式 *************/
|
|
|
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
- style.setWrapText(true);
|
|
|
- HSSFFont font = workbook.createFont();
|
|
|
- font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
- font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
- style.setFont(font);
|
|
|
-
|
|
|
- HSSFSheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
- // 设置表头
|
|
|
- // 创建第一行
|
|
|
- HSSFRow row1 = sheet.createRow(0);
|
|
|
- HSSFCell cell = null;
|
|
|
- for (int i = 0; i < headColumns.length; i++) {
|
|
|
- // 创建列
|
|
|
- cell = row1.createCell(i);
|
|
|
- // 定义单元格为字符串类型
|
|
|
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
- // 设置单元格的样式
|
|
|
- cell.setCellStyle(style);
|
|
|
- // 设置单元格的值
|
|
|
- cell.setCellValue(headColumns[i]);
|
|
|
- }
|
|
|
- HSSFRow row = null;
|
|
|
- // 添加数据
|
|
|
- T data = null;
|
|
|
- Object obj = null;
|
|
|
- for (int i = 1; i <= dataset.size(); i++) {
|
|
|
- data = dataset.get(i - 1);
|
|
|
- if (data != null) {
|
|
|
- row = sheet.createRow(i);
|
|
|
- for (int j = 0; j < fieldColumns.length; j++) {
|
|
|
- cell = row.createCell(j);
|
|
|
- try {
|
|
|
- obj = PropertyUtils.getNestedProperty(data, fieldColumns[j]);
|
|
|
- if (obj instanceof Date) {
|
|
|
- obj = sdf.format(obj);
|
|
|
- }
|
|
|
- } catch (NestedNullException e) {
|
|
|
- LOGGER.warn(e.getMessage());
|
|
|
- obj = null;
|
|
|
- }
|
|
|
- if (obj != null) {
|
|
|
- cell.setCellValue(obj.toString());
|
|
|
- } else {
|
|
|
- cell.setCellValue("");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return workbook;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将数据集dataset导出到fileName文件中(只支持.xlsx格式)
|
|
|
- * @param headColumns 导出文件的列名
|
|
|
- * @param fieldColumns
|
|
|
- * @param dataset 数据源
|
|
|
- * @return
|
|
|
- * @throws IOException
|
|
|
- * @throws NoSuchMethodException
|
|
|
- * @throws InvocationTargetException
|
|
|
- * @throws IllegalAccessException
|
|
|
- */
|
|
|
- public static <T> SXSSFWorkbook exportBigExcel(String[] headColumns, String[] fieldColumns, List<T> dataset) throws IOException, IllegalAccessException,
|
|
|
- InvocationTargetException, NoSuchMethodException {
|
|
|
- if (headColumns == null) {
|
|
|
- throw new UtilException("excel列名不能为空");
|
|
|
- }
|
|
|
- if (dataset == null) {
|
|
|
- throw new UtilException("数据集不能为空");
|
|
|
- }
|
|
|
- SXSSFWorkbook workbook = new SXSSFWorkbook();
|
|
|
- CellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
- /************** 设置单元格样式 *************/
|
|
|
- style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
- style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
- style.setWrapText(true);
|
|
|
- Font font = workbook.createFont();
|
|
|
- font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
- font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
- style.setFont(font);
|
|
|
-
|
|
|
- Sheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
- // 设置表头
|
|
|
- // 创建第一行
|
|
|
- Row row1 = sheet.createRow(0);
|
|
|
- Cell cell = null;
|
|
|
- for (int i = 0; i < headColumns.length; i++) {
|
|
|
- // 创建列
|
|
|
- cell = row1.createCell(i);
|
|
|
- // 定义单元格为字符串类型
|
|
|
- cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
- // 设置单元格的样式
|
|
|
- cell.setCellStyle(style);
|
|
|
- // 设置单元格的值
|
|
|
- cell.setCellValue(headColumns[i]);
|
|
|
- }
|
|
|
- Row row = null;
|
|
|
- // 添加数据
|
|
|
- T data = null;
|
|
|
- Object obj = null;
|
|
|
- for (int i = 1; i <= dataset.size(); i++) {
|
|
|
- data = dataset.get(i - 1);
|
|
|
- if (data != null) {
|
|
|
- row = sheet.createRow(i);
|
|
|
- for (int j = 0; j < fieldColumns.length; j++) {
|
|
|
- cell = row.createCell(j);
|
|
|
- try {
|
|
|
- obj = PropertyUtils.getNestedProperty(data, fieldColumns[j]);
|
|
|
- if (obj instanceof Date) {
|
|
|
- obj = sdf.format(obj);
|
|
|
- }
|
|
|
- } catch (NestedNullException e) {
|
|
|
- LOGGER.warn(e.getMessage());
|
|
|
- obj = null;
|
|
|
- }
|
|
|
- if (obj != null) {
|
|
|
- cell.setCellValue(obj.toString());
|
|
|
- } else {
|
|
|
- cell.setCellValue("");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return workbook;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 导入指定的excel文件
|
|
|
- * @param excelFile excel文件
|
|
|
- * @param startRowNum 从第几行数据开始导入
|
|
|
- * @return
|
|
|
- * @throws IOException
|
|
|
- */
|
|
|
- public static Map<String, List<Map<String, Object>>> importExcel(File excelFile, int startRowNum) throws IOException {
|
|
|
- Map<String, List<Map<String, Object>>> result = new HashMap<String, List<Map<String, Object>>>();
|
|
|
-
|
|
|
- if (!excelFile.exists()) {
|
|
|
- LOGGER.error("文件" + excelFile.getAbsolutePath() + "不存在");
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- Workbook workbook = null;
|
|
|
- FileInputStream fis = new FileInputStream(excelFile);
|
|
|
- int index = excelFile.getName().lastIndexOf('.');
|
|
|
- if (index <= 0) {
|
|
|
- fis.close();
|
|
|
- throw new UtilException("excel文件的扩展名是.xls or .xlsx!");
|
|
|
- }
|
|
|
- String ext = excelFile.getName().substring(index).toLowerCase();
|
|
|
- try {
|
|
|
- if (".xlsx".equals(ext.toLowerCase())) {
|
|
|
- // 支持excel2007 xlsx格式
|
|
|
- workbook = new XSSFWorkbook(fis);
|
|
|
- } else if (".xls".equals(ext)) {
|
|
|
- // 支持excel2003以前 xls格式
|
|
|
- workbook = new HSSFWorkbook(fis);
|
|
|
- } else {
|
|
|
- throw new UtilException("excel文件的扩展名是.xls or .xlsx!");
|
|
|
- }
|
|
|
- } catch (Exception ex) {
|
|
|
- LOGGER.error("excel open error.", ex);
|
|
|
- return result;
|
|
|
- } finally {
|
|
|
- if (fis != null) {
|
|
|
- fis.close();
|
|
|
- }
|
|
|
- }
|
|
|
- int sheetCount = workbook.getNumberOfSheets();
|
|
|
- Sheet sheet = null;
|
|
|
- Row row = null;
|
|
|
- Cell cell = null;
|
|
|
- int currentRowNum = 0, currentCellNum = 0;
|
|
|
- // Object fieldValue = null;
|
|
|
- Iterator<Row> rowIter = null;
|
|
|
- Iterator<Cell> cellIter = null;
|
|
|
-
|
|
|
- for (int i = 0; i < sheetCount; i++) {
|
|
|
- String fieldsName[] = null;
|
|
|
- // 行号清零
|
|
|
- currentRowNum = 0;
|
|
|
- // 顺序取sheet
|
|
|
- sheet = workbook.getSheetAt(i);
|
|
|
- List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
|
|
|
- rowIter = sheet.iterator();
|
|
|
- while (rowIter.hasNext()) {
|
|
|
- Map<String, Object> obj = null;
|
|
|
- // 获取当前行
|
|
|
- row = rowIter.next();
|
|
|
- if (row != null) {
|
|
|
- currentRowNum++;
|
|
|
-
|
|
|
- if (currentRowNum == 1) {// 第一列表示英文名称对应表字段
|
|
|
- cellIter = row.iterator();
|
|
|
- // 列号清零
|
|
|
- currentCellNum = 0;
|
|
|
- List<String> names = new ArrayList<String>();
|
|
|
- while (cellIter.hasNext()) {
|
|
|
- cell = cellIter.next();
|
|
|
- names.add(cell.getStringCellValue());
|
|
|
- }
|
|
|
- fieldsName = names.toArray(new String[names.size()]);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // 跳过指定的行
|
|
|
- if (currentRowNum < startRowNum) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // 实例化对象
|
|
|
- obj = new HashMap<String, Object>();// clazz.newInstance();
|
|
|
-
|
|
|
- cellIter = row.iterator();
|
|
|
- // 列号清零
|
|
|
- currentCellNum = 0;
|
|
|
- while (cellIter.hasNext()) {
|
|
|
- cell = cellIter.next();
|
|
|
- cell.setCellType(Cell.CELL_TYPE_STRING);
|
|
|
- String fieldValue = cell.getStringCellValue();
|
|
|
- obj.put(fieldsName[currentCellNum], fieldValue);
|
|
|
- currentCellNum++;
|
|
|
- }
|
|
|
- }
|
|
|
- if (obj != null)
|
|
|
- datas.add(obj);
|
|
|
-
|
|
|
- }
|
|
|
- if (!datas.isEmpty())
|
|
|
- result.put(sheet.getSheetName(), datas);
|
|
|
- }
|
|
|
- if (workbook != null) {
|
|
|
- workbook.close();
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 导入指定的excel文件
|
|
|
- * @param inputStream excel文件流
|
|
|
- * @param startRowNum 从第几行数据开始导入
|
|
|
- * @param extName 文件扩展名,仅支持.xls 或 .xlsx
|
|
|
- * @return
|
|
|
- * @throws IOException
|
|
|
- */
|
|
|
- public static Map<String, List<Map<String, Object>>> importExcel(InputStream inputStream, int startRowNum, String extName) throws IOException {
|
|
|
-
|
|
|
- Map<String, List<Map<String, Object>>> result = new HashMap<String, List<Map<String, Object>>>();
|
|
|
-
|
|
|
- Workbook workbook = null;
|
|
|
-
|
|
|
- try {
|
|
|
- if (extName.endsWith(".xlsx")) {
|
|
|
- // 支持excel2007 xlsx格式
|
|
|
- workbook = new XSSFWorkbook(inputStream);
|
|
|
- } else if (extName.endsWith(".xls")) {
|
|
|
- // 支持excel2003以前 xls格式
|
|
|
- workbook = new HSSFWorkbook(inputStream);
|
|
|
- } else {
|
|
|
- throw new UtilException("excel文件的扩展名是.xls or .xlsx!");
|
|
|
- }
|
|
|
- } catch (Exception ex) {
|
|
|
- LOGGER.error("excel open error.", ex);
|
|
|
- return result;
|
|
|
- } finally {
|
|
|
- if (inputStream != null) {
|
|
|
- inputStream.close();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- int sheetCount = workbook.getNumberOfSheets();
|
|
|
- Sheet sheet = null;
|
|
|
- Row row = null;
|
|
|
- Cell cell = null;
|
|
|
- int currentRowNum = 0, currentCellNum = 0;
|
|
|
- // Object fieldValue = null;
|
|
|
- Iterator<Row> rowIter = null;
|
|
|
- Iterator<Cell> cellIter = null;
|
|
|
-
|
|
|
- for (int i = 0; i < sheetCount; i++) {
|
|
|
- String fieldsName[] = null;
|
|
|
- // 行号清零
|
|
|
- currentRowNum = 0;
|
|
|
- // 顺序取sheet
|
|
|
- sheet = workbook.getSheetAt(i);
|
|
|
- List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
|
|
|
- rowIter = sheet.iterator();
|
|
|
- while (rowIter.hasNext()) {
|
|
|
- Map<String, Object> obj = null;
|
|
|
- boolean hasVal = false;
|
|
|
- // 获取当前行
|
|
|
- row = rowIter.next();
|
|
|
- if (row != null) {
|
|
|
- currentRowNum++;
|
|
|
-
|
|
|
- if (currentRowNum == 1) {// 第一列表示英文名称对应表字段
|
|
|
- cellIter = row.iterator();
|
|
|
- // 列号清零
|
|
|
- currentCellNum = 0;
|
|
|
- List<String> names = new ArrayList<String>();
|
|
|
- while (cellIter.hasNext()) {
|
|
|
- cell = cellIter.next();
|
|
|
- names.add(cell.getStringCellValue());
|
|
|
- }
|
|
|
- fieldsName = names.toArray(new String[names.size()]);
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // 跳过指定的行
|
|
|
- if (currentRowNum < startRowNum) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- // 实例化对象
|
|
|
- obj = new HashMap<String, Object>();// clazz.newInstance();
|
|
|
-
|
|
|
- cellIter = row.iterator();
|
|
|
- // 列号清零
|
|
|
- currentCellNum = 0;
|
|
|
- while (cellIter.hasNext()) {
|
|
|
- cell = cellIter.next();
|
|
|
- cell.setCellType(Cell.CELL_TYPE_STRING);
|
|
|
- String fieldValue = cell.getStringCellValue();
|
|
|
- if(StringUtils.isNotBlank(fieldValue)){
|
|
|
- hasVal = true;
|
|
|
- }
|
|
|
- obj.put(fieldsName[currentCellNum], fieldValue);
|
|
|
- currentCellNum++;
|
|
|
- }
|
|
|
- }
|
|
|
- if (obj != null && hasVal)
|
|
|
- datas.add(obj);
|
|
|
-
|
|
|
- }
|
|
|
- if (!datas.isEmpty())
|
|
|
- result.put(sheet.getSheetName(), datas);
|
|
|
- }
|
|
|
- if (workbook != null) {
|
|
|
- workbook.close();
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 创建excel文档
|
|
|
- *
|
|
|
- * @param getters list中map的key数组集合
|
|
|
- * @param headers excel的列名
|
|
|
- */
|
|
|
- public static Workbook createWorkBook(List list, String[] getters, String[] headers, Class clazz) {
|
|
|
-
|
|
|
- List<Method> methods = getMethodsByStrs(getters, clazz);
|
|
|
-
|
|
|
- // 创建.xlsx工作簿
|
|
|
- Workbook wb = new XSSFWorkbook();
|
|
|
- // 创建第一个sheet(页),并命名
|
|
|
- Sheet sheet = wb.createSheet("sheet1");
|
|
|
- // 手动设置列宽.第一个参数表示要为第几列设,第二个参数表示列的宽度,n为列高的像素数.
|
|
|
-
|
|
|
- for (int i = 0; i < getters.length; i++) {
|
|
|
- sheet.setColumnWidth((short) i, (short) (35.7 * 200));
|
|
|
- }
|
|
|
-
|
|
|
- // 创建第一行
|
|
|
- Row header = sheet.createRow(0);
|
|
|
-
|
|
|
- // 创建两种单元格格式
|
|
|
- CellStyle cellStyle1 = wb.createCellStyle();
|
|
|
- CellStyle cellStyle2 = wb.createCellStyle();
|
|
|
-
|
|
|
- // 创建两种字体
|
|
|
- Font font1 = wb.createFont(); // 标题字体
|
|
|
- Font font2 = wb.createFont(); // 正文字体
|
|
|
-
|
|
|
- // 标题加粗
|
|
|
- font1.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
|
|
-
|
|
|
- // 设置两种单元格的样式
|
|
|
- setCellStype(cellStyle1, font1);
|
|
|
- setCellStype(cellStyle2, font2);
|
|
|
-
|
|
|
- //设置header
|
|
|
- for (int i = 0; i < headers.length; i++) {
|
|
|
- Cell cell = header.createCell(i);
|
|
|
- cell.setCellValue(headers[i]);
|
|
|
- cell.setCellStyle(cellStyle1);
|
|
|
- }
|
|
|
-
|
|
|
- //设置data
|
|
|
- int headersNum = 1;
|
|
|
- for (int i = 0; i < list.size(); i++) {
|
|
|
- Row row = sheet.createRow(i + headersNum);
|
|
|
- for (int j = 0; j < methods.size(); j++) {
|
|
|
- try {
|
|
|
- Object invoke = methods.get(j).invoke(list.get(i));
|
|
|
- if (invoke != null) {
|
|
|
- row.createCell(j).setCellValue(invoke.toString());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return wb;
|
|
|
- }
|
|
|
-
|
|
|
- private static void setCellStype(CellStyle cellStyle, Font font) {
|
|
|
- font.setFontHeightInPoints((short) 10);
|
|
|
- font.setColor(IndexedColors.BLACK.getIndex());
|
|
|
- cellStyle.setFont(font);
|
|
|
- cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
|
|
|
- cellStyle.setBorderRight(CellStyle.BORDER_THIN);
|
|
|
- cellStyle.setBorderTop(CellStyle.BORDER_THIN);
|
|
|
- cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
|
|
|
- cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
|
|
|
- }
|
|
|
-
|
|
|
- private static List<Method> getMethodsByStrs(String[] getters, Class clazz) {
|
|
|
- List<Method> list = new ArrayList<>();
|
|
|
- for (String getter : getters) {
|
|
|
- try {
|
|
|
- list.add(clazz.getDeclaredMethod(getter));
|
|
|
- } catch (NoSuchMethodException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- return list;
|
|
|
- }
|
|
|
+ HSSFWorkbook workbook = new HSSFWorkbook();
|
|
|
+ HSSFCellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
+ /************** 设置单元格样式 *************/
|
|
|
+ style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
+ style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
+ style.setWrapText(true);
|
|
|
+ HSSFFont font = workbook.createFont();
|
|
|
+ font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
+ style.setFont(font);
|
|
|
+
|
|
|
+ HSSFSheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
+ // 设置表头
|
|
|
+ // 创建第一行
|
|
|
+ HSSFRow row1 = sheet.createRow(0);
|
|
|
+ HSSFCell cell = null;
|
|
|
+ for (int i = 0; i < headColumns.length; i++) {
|
|
|
+ // 创建列
|
|
|
+ cell = row1.createCell(i);
|
|
|
+ // 定义单元格为字符串类型
|
|
|
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
+ // 设置单元格的样式
|
|
|
+ cell.setCellStyle(style);
|
|
|
+ // 设置单元格的值
|
|
|
+ cell.setCellValue(headColumns[i]);
|
|
|
+ }
|
|
|
+ HSSFRow row = null;
|
|
|
+ // 添加数据
|
|
|
+ T data = null;
|
|
|
+ Object obj = null;
|
|
|
+ for (int i = 1; i <= dataset.size(); i++) {
|
|
|
+ data = dataset.get(i - 1);
|
|
|
+ if (data != null) {
|
|
|
+ row = sheet.createRow(i);
|
|
|
+ for (int j = 0; j < fieldColumns.length; j++) {
|
|
|
+ cell = row.createCell(j);
|
|
|
+ try {
|
|
|
+ obj = PropertyUtils.getNestedProperty(data, fieldColumns[j]);
|
|
|
+ if (obj instanceof Date) {
|
|
|
+ obj = sdf.format(obj);
|
|
|
+ }
|
|
|
+ } catch (NestedNullException e) {
|
|
|
+ LOGGER.warn(e.getMessage());
|
|
|
+ obj = null;
|
|
|
+ }
|
|
|
+ if (obj != null) {
|
|
|
+ cell.setCellValue(obj.toString());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return workbook;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将数据集dataset导出到fileName文件中(只支持.xlsx格式)
|
|
|
+ *
|
|
|
+ * @param headColumns 导出文件的列名
|
|
|
+ * @param fieldColumns
|
|
|
+ * @param dataset 数据源
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ * @throws NoSuchMethodException
|
|
|
+ * @throws InvocationTargetException
|
|
|
+ * @throws IllegalAccessException
|
|
|
+ */
|
|
|
+ public static <T> SXSSFWorkbook exportBigExcel(String[] headColumns, String[] fieldColumns, List<T> dataset) throws IOException, IllegalAccessException,
|
|
|
+ InvocationTargetException, NoSuchMethodException {
|
|
|
+ if (headColumns == null) {
|
|
|
+ throw new UtilException("excel列名不能为空");
|
|
|
+ }
|
|
|
+ if (dataset == null) {
|
|
|
+ throw new UtilException("数据集不能为空");
|
|
|
+ }
|
|
|
+ SXSSFWorkbook workbook = new SXSSFWorkbook();
|
|
|
+ CellStyle style = workbook.createCellStyle(); // 获取单元格样式
|
|
|
+ /************** 设置单元格样式 *************/
|
|
|
+ style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直
|
|
|
+ style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平
|
|
|
+ style.setWrapText(true);
|
|
|
+ Font font = workbook.createFont();
|
|
|
+ font.setColor(HSSFFont.COLOR_NORMAL);
|
|
|
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
|
|
+ style.setFont(font);
|
|
|
+
|
|
|
+ Sheet sheet = workbook.createSheet(); // 创建sheet
|
|
|
+ // 设置表头
|
|
|
+ // 创建第一行
|
|
|
+ Row row1 = sheet.createRow(0);
|
|
|
+ Cell cell = null;
|
|
|
+ for (int i = 0; i < headColumns.length; i++) {
|
|
|
+ // 创建列
|
|
|
+ cell = row1.createCell(i);
|
|
|
+ // 定义单元格为字符串类型
|
|
|
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
|
|
+ // 设置单元格的样式
|
|
|
+ cell.setCellStyle(style);
|
|
|
+ // 设置单元格的值
|
|
|
+ cell.setCellValue(headColumns[i]);
|
|
|
+ }
|
|
|
+ Row row = null;
|
|
|
+ // 添加数据
|
|
|
+ T data = null;
|
|
|
+ Object obj = null;
|
|
|
+ for (int i = 1; i <= dataset.size(); i++) {
|
|
|
+ data = dataset.get(i - 1);
|
|
|
+ if (data != null) {
|
|
|
+ row = sheet.createRow(i);
|
|
|
+ for (int j = 0; j < fieldColumns.length; j++) {
|
|
|
+ cell = row.createCell(j);
|
|
|
+ try {
|
|
|
+ obj = PropertyUtils.getNestedProperty(data, fieldColumns[j]);
|
|
|
+ if (obj instanceof Date) {
|
|
|
+ obj = sdf.format(obj);
|
|
|
+ }
|
|
|
+ } catch (NestedNullException e) {
|
|
|
+ LOGGER.warn(e.getMessage());
|
|
|
+ obj = null;
|
|
|
+ }
|
|
|
+ if (obj != null) {
|
|
|
+ cell.setCellValue(obj.toString());
|
|
|
+ } else {
|
|
|
+ cell.setCellValue("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return workbook;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导入指定的excel文件
|
|
|
+ *
|
|
|
+ * @param excelFile excel文件
|
|
|
+ * @param startRowNum 从第几行数据开始导入
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static Map<String, List<Map<String, Object>>> importExcel(File excelFile, int startRowNum) throws IOException {
|
|
|
+ Map<String, List<Map<String, Object>>> result = new HashMap<String, List<Map<String, Object>>>();
|
|
|
+
|
|
|
+ if (!excelFile.exists()) {
|
|
|
+ LOGGER.error("文件" + excelFile.getAbsolutePath() + "不存在");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ Workbook workbook = null;
|
|
|
+ FileInputStream fis = new FileInputStream(excelFile);
|
|
|
+ int index = excelFile.getName().lastIndexOf('.');
|
|
|
+ if (index <= 0) {
|
|
|
+ fis.close();
|
|
|
+ throw new UtilException("excel文件的扩展名是.xls or .xlsx!");
|
|
|
+ }
|
|
|
+ String ext = excelFile.getName().substring(index).toLowerCase();
|
|
|
+ try {
|
|
|
+ if (".xlsx".equals(ext.toLowerCase())) {
|
|
|
+ // 支持excel2007 xlsx格式
|
|
|
+ workbook = new XSSFWorkbook(fis);
|
|
|
+ } else if (".xls".equals(ext)) {
|
|
|
+ // 支持excel2003以前 xls格式
|
|
|
+ workbook = new HSSFWorkbook(fis);
|
|
|
+ } else {
|
|
|
+ throw new UtilException("excel文件的扩展名是.xls or .xlsx!");
|
|
|
+ }
|
|
|
+ } catch (Exception ex) {
|
|
|
+ LOGGER.error("excel open error.", ex);
|
|
|
+ return result;
|
|
|
+ } finally {
|
|
|
+ if (fis != null) {
|
|
|
+ fis.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int sheetCount = workbook.getNumberOfSheets();
|
|
|
+ Sheet sheet = null;
|
|
|
+ Row row = null;
|
|
|
+ Cell cell = null;
|
|
|
+ int currentRowNum = 0, currentCellNum = 0;
|
|
|
+ // Object fieldValue = null;
|
|
|
+ Iterator<Row> rowIter = null;
|
|
|
+ Iterator<Cell> cellIter = null;
|
|
|
+
|
|
|
+ for (int i = 0; i < sheetCount; i++) {
|
|
|
+ String fieldsName[] = null;
|
|
|
+ // 行号清零
|
|
|
+ currentRowNum = 0;
|
|
|
+ // 顺序取sheet
|
|
|
+ sheet = workbook.getSheetAt(i);
|
|
|
+ List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
|
|
|
+ rowIter = sheet.iterator();
|
|
|
+ while (rowIter.hasNext()) {
|
|
|
+ Map<String, Object> obj = null;
|
|
|
+ // 获取当前行
|
|
|
+ row = rowIter.next();
|
|
|
+ if (row != null) {
|
|
|
+ currentRowNum++;
|
|
|
+
|
|
|
+ if (currentRowNum == 1) {// 第一列表示英文名称对应表字段
|
|
|
+ cellIter = row.iterator();
|
|
|
+ // 列号清零
|
|
|
+ currentCellNum = 0;
|
|
|
+ List<String> names = new ArrayList<String>();
|
|
|
+ while (cellIter.hasNext()) {
|
|
|
+ cell = cellIter.next();
|
|
|
+ names.add(cell.getStringCellValue());
|
|
|
+ }
|
|
|
+ fieldsName = names.toArray(new String[names.size()]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 跳过指定的行
|
|
|
+ if (currentRowNum < startRowNum) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 实例化对象
|
|
|
+ obj = new HashMap<String, Object>();// clazz.newInstance();
|
|
|
+
|
|
|
+ cellIter = row.iterator();
|
|
|
+ // 列号清零
|
|
|
+ currentCellNum = 0;
|
|
|
+ while (cellIter.hasNext()) {
|
|
|
+ cell = cellIter.next();
|
|
|
+ cell.setCellType(Cell.CELL_TYPE_STRING);
|
|
|
+ String fieldValue = cell.getStringCellValue();
|
|
|
+ obj.put(fieldsName[currentCellNum], fieldValue);
|
|
|
+ currentCellNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (obj != null)
|
|
|
+ datas.add(obj);
|
|
|
+
|
|
|
+ }
|
|
|
+ if (!datas.isEmpty())
|
|
|
+ result.put(sheet.getSheetName(), datas);
|
|
|
+ }
|
|
|
+ if (workbook != null) {
|
|
|
+ workbook.close();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导入指定的excel文件
|
|
|
+ *
|
|
|
+ * @param inputStream excel文件流
|
|
|
+ * @param startRowNum 从第几行数据开始导入
|
|
|
+ * @param extName 文件扩展名,仅支持.xls 或 .xlsx
|
|
|
+ * @return
|
|
|
+ * @throws IOException
|
|
|
+ */
|
|
|
+ public static Map<String, List<Map<String, Object>>> importExcel(InputStream inputStream, int startRowNum, String extName) throws IOException {
|
|
|
+
|
|
|
+ Map<String, List<Map<String, Object>>> result = new HashMap<String, List<Map<String, Object>>>();
|
|
|
+
|
|
|
+ Workbook workbook = null;
|
|
|
+
|
|
|
+ try {
|
|
|
+ if (extName.endsWith(".xlsx")) {
|
|
|
+ // 支持excel2007 xlsx格式
|
|
|
+ workbook = new XSSFWorkbook(inputStream);
|
|
|
+ } else if (extName.endsWith(".xls")) {
|
|
|
+ // 支持excel2003以前 xls格式
|
|
|
+ workbook = new HSSFWorkbook(inputStream);
|
|
|
+ } else {
|
|
|
+ throw new UtilException("excel文件的扩展名是.xls or .xlsx!");
|
|
|
+ }
|
|
|
+ } catch (Exception ex) {
|
|
|
+ LOGGER.error("excel open error.", ex);
|
|
|
+ return result;
|
|
|
+ } finally {
|
|
|
+ if (inputStream != null) {
|
|
|
+ inputStream.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int sheetCount = workbook.getNumberOfSheets();
|
|
|
+ Sheet sheet = null;
|
|
|
+ Row row = null;
|
|
|
+ Cell cell = null;
|
|
|
+ int currentRowNum = 0, currentCellNum = 0;
|
|
|
+ // Object fieldValue = null;
|
|
|
+ Iterator<Row> rowIter = null;
|
|
|
+ Iterator<Cell> cellIter = null;
|
|
|
+
|
|
|
+ for (int i = 0; i < sheetCount; i++) {
|
|
|
+ String fieldsName[] = null;
|
|
|
+ // 行号清零
|
|
|
+ currentRowNum = 0;
|
|
|
+ // 顺序取sheet
|
|
|
+ sheet = workbook.getSheetAt(i);
|
|
|
+ List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
|
|
|
+ rowIter = sheet.iterator();
|
|
|
+ while (rowIter.hasNext()) {
|
|
|
+ Map<String, Object> obj = null;
|
|
|
+ boolean hasVal = false;
|
|
|
+ // 获取当前行
|
|
|
+ row = rowIter.next();
|
|
|
+ if (row != null) {
|
|
|
+ currentRowNum++;
|
|
|
+
|
|
|
+ if (currentRowNum == 1) {// 第一列表示英文名称对应表字段
|
|
|
+ cellIter = row.iterator();
|
|
|
+ // 列号清零
|
|
|
+ currentCellNum = 0;
|
|
|
+ List<String> names = new ArrayList<String>();
|
|
|
+ while (cellIter.hasNext()) {
|
|
|
+ cell = cellIter.next();
|
|
|
+ names.add(cell.getStringCellValue());
|
|
|
+ }
|
|
|
+ fieldsName = names.toArray(new String[names.size()]);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 跳过指定的行
|
|
|
+ if (currentRowNum < startRowNum) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 实例化对象
|
|
|
+ obj = new HashMap<String, Object>();// clazz.newInstance();
|
|
|
+
|
|
|
+ cellIter = row.iterator();
|
|
|
+ // 列号清零
|
|
|
+ currentCellNum = 0;
|
|
|
+ while (cellIter.hasNext()) {
|
|
|
+ cell = cellIter.next();
|
|
|
+ int columnIndex = cell.getColumnIndex();
|
|
|
+ cell.setCellType(Cell.CELL_TYPE_STRING);
|
|
|
+ String fieldValue = "";
|
|
|
+ if (columnIndex == currentCellNum) {
|
|
|
+ fieldValue = cell.getStringCellValue();
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(fieldValue)) {
|
|
|
+ hasVal = true;
|
|
|
+ }
|
|
|
+ obj.put(fieldsName[currentCellNum], fieldValue);
|
|
|
+ currentCellNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (obj != null && hasVal)
|
|
|
+ datas.add(obj);
|
|
|
+
|
|
|
+ }
|
|
|
+ if (!datas.isEmpty())
|
|
|
+ result.put(sheet.getSheetName(), datas);
|
|
|
+ }
|
|
|
+ if (workbook != null) {
|
|
|
+ workbook.close();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建excel文档
|
|
|
+ *
|
|
|
+ * @param getters list中map的key数组集合
|
|
|
+ * @param headers excel的列名
|
|
|
+ */
|
|
|
+ public static Workbook createWorkBook(List list, String[] getters, String[] headers, Class clazz) {
|
|
|
+
|
|
|
+ List<Method> methods = getMethodsByStrs(getters, clazz);
|
|
|
+
|
|
|
+ // 创建.xlsx工作簿
|
|
|
+ Workbook wb = new XSSFWorkbook();
|
|
|
+ // 创建第一个sheet(页),并命名
|
|
|
+ Sheet sheet = wb.createSheet("sheet1");
|
|
|
+ // 手动设置列宽.第一个参数表示要为第几列设,第二个参数表示列的宽度,n为列高的像素数.
|
|
|
+
|
|
|
+ for (int i = 0; i < getters.length; i++) {
|
|
|
+ sheet.setColumnWidth((short) i, (short) (35.7 * 200));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建第一行
|
|
|
+ Row header = sheet.createRow(0);
|
|
|
+
|
|
|
+ // 创建两种单元格格式
|
|
|
+ CellStyle cellStyle1 = wb.createCellStyle();
|
|
|
+ CellStyle cellStyle2 = wb.createCellStyle();
|
|
|
+
|
|
|
+ // 创建两种字体
|
|
|
+ Font font1 = wb.createFont(); // 标题字体
|
|
|
+ Font font2 = wb.createFont(); // 正文字体
|
|
|
+
|
|
|
+ // 标题加粗
|
|
|
+ font1.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
|
|
+
|
|
|
+ // 设置两种单元格的样式
|
|
|
+ setCellStype(cellStyle1, font1);
|
|
|
+ setCellStype(cellStyle2, font2);
|
|
|
+
|
|
|
+ //设置header
|
|
|
+ for (int i = 0; i < headers.length; i++) {
|
|
|
+ Cell cell = header.createCell(i);
|
|
|
+ cell.setCellValue(headers[i]);
|
|
|
+ cell.setCellStyle(cellStyle1);
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置data
|
|
|
+ int headersNum = 1;
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ Row row = sheet.createRow(i + headersNum);
|
|
|
+ for (int j = 0; j < methods.size(); j++) {
|
|
|
+ try {
|
|
|
+ Object invoke = methods.get(j).invoke(list.get(i));
|
|
|
+ if (invoke != null) {
|
|
|
+ row.createCell(j).setCellValue(invoke.toString());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return wb;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void setCellStype(CellStyle cellStyle, Font font) {
|
|
|
+ font.setFontHeightInPoints((short) 10);
|
|
|
+ font.setColor(IndexedColors.BLACK.getIndex());
|
|
|
+ cellStyle.setFont(font);
|
|
|
+ cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
|
|
|
+ cellStyle.setBorderRight(CellStyle.BORDER_THIN);
|
|
|
+ cellStyle.setBorderTop(CellStyle.BORDER_THIN);
|
|
|
+ cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
|
|
|
+ cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static List<Method> getMethodsByStrs(String[] getters, Class clazz) {
|
|
|
+ List<Method> list = new ArrayList<>();
|
|
|
+ for (String getter : getters) {
|
|
|
+ try {
|
|
|
+ list.add(clazz.getDeclaredMethod(getter));
|
|
|
+ } catch (NoSuchMethodException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
}
|