Kaynağa Gözat

修复bysax空字符串跳过的问题

4.1.3.A
jueyue 6 yıl önce
ebeveyn
işleme
876516263c
3 değiştirilmiş dosya ile 71 ekleme ve 59 silme
  1. +51
    -50
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java
  2. +13
    -7
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java
  3. +7
    -2
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java

+ 51
- 50
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java Dosyayı Görüntüle

@@ -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<String, Object> 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<ExcelForEachParams> columns = (List<ExcelForEachParams>) 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<String, Object> 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<ExcelForEachParams> columns = (List<ExcelForEachParams>) 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) {
}


+ 13
- 7
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java Dosyayı Görüntüle

@@ -1,12 +1,12 @@
/**
* Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com)
*
* <p>
* 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
*
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
*
* <p>
* 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;


+ 7
- 2
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SheetHandler.java Dosyayı Görüntüle

@@ -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 {


Yükleniyor…
İptal
Kaydet