diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java index de25b2a..70f97b6 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java @@ -129,6 +129,57 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { mergeCells(sheet, excelParams, titleHeight); } + /** + * 利用foreach循环输出数据 + * @param cell + * @param map + * @param name + * @throws Exception + */ + private void addListDataToExcel(Cell cell, Map map, + String name) throws Exception { + boolean isCreate = !name.contains(FOREACH_NOT_CREATE); + boolean isShift = name.contains(FOREACH_AND_SHIFT); + name = name.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY) + .replace(FOREACH, EMPTY).replace(START_STR, EMPTY); + String[] keys = name.replaceAll("\\s{1,}", " ").trim().split(" "); + Collection datas = (Collection) PoiPublicUtil.getParamsValue(keys[0], map); + Object[] columnsInfo = getAllDataColumns(cell, name.replace(keys[0], EMPTY), + mergedRegionHelper); + if (datas == null) { + return; + } + Iterator its = datas.iterator(); + int rowspan = (Integer) columnsInfo[0], colspan = (Integer) columnsInfo[1]; + @SuppressWarnings("unchecked") + List columns = (List) columnsInfo[2]; + Row row = null; + int rowIndex = cell.getRow().getRowNum() + 1; + //处理当前行 + if (its.hasNext()) { + Object t = its.next(); + setForEeachRowCellValue(isCreate, cell.getRow(), cell.getColumnIndex(), t, columns, map, + rowspan, colspan, mergedRegionHelper); + rowIndex += rowspan - 1; + } + //不论后面有没有数据,都应该执行的是插入操作 + // && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum() + if (isShift && datas.size() * rowspan > 1) { + createRowNoRow(cell.getRowIndex() + rowspan,cell.getRow().getSheet().getLastRowNum(),(datas.size() - 1) * rowspan); + cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan, + cell.getRow().getSheet().getLastRowNum(), (datas.size() - 1) * rowspan, true, true); + templateSumHandler.shiftRows(cell.getRowIndex(),(datas.size() - 1) * rowspan); + + } + while (its.hasNext()) { + Object t = its.next(); + row = createRow(rowIndex, cell.getSheet(), isCreate, rowspan); + setForEeachRowCellValue(isCreate, row, cell.getColumnIndex(), t, columns, map, rowspan, + colspan, mergedRegionHelper); + rowIndex += rowspan; + } + } + /** * 下移数据 * @param dataSet @@ -436,56 +487,6 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { || text.contains(" " + NUMBER_SYMBOL); } - /** - * 利用foreach循环输出数据 - * @param cell - * @param map - * @param name - * @throws Exception - */ - private void addListDataToExcel(Cell cell, Map map, - String name) throws Exception { - boolean isCreate = !name.contains(FOREACH_NOT_CREATE); - boolean isShift = name.contains(FOREACH_AND_SHIFT); - name = name.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY) - .replace(FOREACH, EMPTY).replace(START_STR, EMPTY); - String[] keys = name.replaceAll("\\s{1,}", " ").trim().split(" "); - Collection datas = (Collection) PoiPublicUtil.getParamsValue(keys[0], map); - Object[] columnsInfo = getAllDataColumns(cell, name.replace(keys[0], EMPTY), - mergedRegionHelper); - if (datas == null) { - return; - } - Iterator its = datas.iterator(); - int rowspan = (Integer) columnsInfo[0], colspan = (Integer) columnsInfo[1]; - @SuppressWarnings("unchecked") - List columns = (List) columnsInfo[2]; - Row row = null; - int rowIndex = cell.getRow().getRowNum() + 1; - //处理当前行 - if (its.hasNext()) { - Object t = its.next(); - setForEeachRowCellValue(isCreate, cell.getRow(), cell.getColumnIndex(), t, columns, map, - rowspan, colspan, mergedRegionHelper); - rowIndex += rowspan - 1; - } - //不论后面有没有数据,都应该执行的是插入操作 - // && cell.getRowIndex() + rowspan < cell.getRow().getSheet().getLastRowNum() - if (isShift && datas.size() * rowspan > 1) { - createRowNoRow(cell.getRowIndex() + rowspan,cell.getRow().getSheet().getLastRowNum(),(datas.size() - 1) * rowspan); - cell.getRow().getSheet().shiftRows(cell.getRowIndex() + rowspan, - cell.getRow().getSheet().getLastRowNum(), (datas.size() - 1) * rowspan, true, true); - templateSumHandler.shiftRows(cell.getRowIndex(),(datas.size() - 1) * rowspan); - } - while (its.hasNext()) { - Object t = its.next(); - row = createRow(rowIndex, cell.getSheet(), isCreate, rowspan); - setForEeachRowCellValue(isCreate, row, cell.getColumnIndex(), t, columns, map, rowspan, - colspan, mergedRegionHelper); - rowIndex += rowspan; - } - } - private void createRowNoRow(int startRow, int lastRowNum, int i1) { } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java index ae3e323..5b0abfa 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java @@ -1,12 +1,12 @@ /** * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + *

* http://www.apache.org/licenses/LICENSE-2.0 - * + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -30,6 +30,7 @@ import java.util.Map; import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; import cn.afterturn.easypoi.util.PoiReflectorUtil; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.DateUtil; @@ -205,7 +206,7 @@ public class CellValueService { result = handlerSuffix(entity.getSuffix(), result); result = replaceValue(entity.getReplace(), result); result = replaceValue(entity.getReplace(), result); - if(dictHandler != null && StringUtils.isNoneBlank(entity.getDict())){ + if (dictHandler != null && StringUtils.isNoneBlank(entity.getDict())) { dictHandler.toValue(entity.getDict(), object, entity.getName(), result); } } @@ -267,7 +268,12 @@ public class CellValueService { if (result == null || StringUtils.isBlank(result.toString())) { return null; } - if ("class java.util.Date".equals(classFullName)) { + if ("class java.util.Date".equals(classFullName) && result instanceof Date) { + return result; + } else if ("class java.util.Date".equals(classFullName) && result instanceof String) { + return DateUtils.parseDate(result.toString(), entity.getFormat()); + } + if ("class java.sql.Date".equals(classFullName) && result instanceof java.sql.Date) { return result; } if ("class java.lang.Boolean".equals(classFullName) || "boolean".equals(classFullName)) { @@ -311,9 +317,9 @@ public class CellValueService { } if (clazz != null && clazz.isEnum()) { if (StringUtils.isNotEmpty(entity.getEnumImportMethod())) { - return PoiReflectorUtil.fromCache(clazz).execEnumStaticMethod(entity.getEnumImportMethod(),result); + return PoiReflectorUtil.fromCache(clazz).execEnumStaticMethod(entity.getEnumImportMethod(), result); } else { - return Enum.valueOf(clazz,result.toString()); + return Enum.valueOf(clazz, result.toString()); } } return result; diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java index 60c7cfa..4d5393a 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java @@ -19,6 +19,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.xssf.model.SharedStringsTable; import org.apache.poi.xssf.usermodel.XSSFRichTextString; @@ -119,14 +120,18 @@ public class SheetHandler extends DefaultHandler { rowlist.add(curCol, new SaxReadCellEntity(CellValueType.String, value)); } curCol++; - } else if ("row".equals(name)) {//如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法 + //如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法 + } else if("c".equals(name) && StringUtils.isEmpty(lastContents)){ + rowlist.add(curCol,new SaxReadCellEntity(CellValueType.String,"")); + curCol++; + } else if ("row".equals(name)) { read.parse(curRow, rowlist); rowlist.clear(); curRow++; curCol = 0; } - } + } @Override public void characters(char[] ch, int start, int length) throws SAXException {