Parcourir la source

合计信息,统计基础合计完成,增加基础合计测试

4.1.3.A
jueyue il y a 10 ans
Parent
révision
e2cb16cfbf
12 fichiers modifiés avec 243 ajouts et 44 suppressions
  1. +8
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java
  2. +9
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/ExcelBaseParams.java
  3. +12
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java
  4. +4
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java
  5. +44
    -2
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java
  6. +1
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java
  7. +3
    -3
      easypoi-test/src/main/java/org/jeecgframework/poi/entity/CourseEntity.java
  8. +11
    -10
      easypoi-test/src/main/java/org/jeecgframework/poi/entity/StudentEntity.java
  9. +1
    -1
      easypoi-test/src/main/java/org/jeecgframework/poi/entity/TeacherEntity.java
  10. +80
    -0
      easypoi-test/src/main/java/org/jeecgframework/poi/entity/statistics/StatisticEntity.java
  11. +45
    -0
      easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportStatisticTest.java
  12. +25
    -28
      easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilTest.java

+ 8
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/annotation/Excel.java Voir le fichier

@@ -47,6 +47,7 @@ public @interface Excel {
* 导入的时间格式,以这个是否为空来判断是否需要格式化日期
*/
public String importFormat() default "";
/**
* 文字后缀,如% 90 变成90%
*/
@@ -104,4 +105,11 @@ public @interface Excel {
* 性别列4【男女占1,但是列标题两个汉字】 限制1-255
*/
public int width() default 10;
/**
* 是否自动统计数据,如果是统计,true的话在最后追加一行统计,把所有数据都和
* 这个处理会吞没异常,请注意这一点
* @return
*/
public boolean isStatistics() default false;
}

+ 9
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/ExcelBaseParams.java Voir le fichier

@@ -8,6 +8,15 @@ import org.jeecgframework.poi.handler.inter.IExcelDataHandler;
* @date 2014年6月20日 下午1:56:52
*/
public class ExcelBaseParams {
/**
* 03版本Excel
*/
public static final String HSSF = "HSSF";
/**
* 07版本Excel
*/
public static final String XSSF = "XSSF";
/**
* 数据处理接口,以此为主,replace,format都在这后面
*/


+ 12
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/entity/params/ExcelExportEntity.java Voir le fichier

@@ -54,6 +54,10 @@ public class ExcelExportEntity extends ExcelBaseEntity {
* 后缀
*/
private String suffix;
/**
* 统计
*/
private boolean isStatistics;
private List<ExcelExportEntity> list;
@@ -172,4 +176,12 @@ public class ExcelExportEntity extends ExcelBaseEntity {
this.suffix = suffix;
}
public boolean isStatistics() {
return isStatistics;
}
public void setStatistics(boolean isStatistics) {
this.isStatistics = isStatistics;
}
}

+ 4
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/ExcelExportServer.java Voir le fichier

@@ -139,12 +139,16 @@ public class ExcelExportServer extends ExcelExportBase {
its.next();
its.remove();
}
// 创建合计信息
addStatisticsRow(styles.get("one"),sheet);
// 发现还有剩余list 继续循环创建Sheet
if (dataSet.size() > 0) {
createSheet(workbook, entity, pojoClass, dataSet, type);
}
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(), e.fillInStackTrace());
throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause());
}


+ 44
- 2
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExcelExportBase.java Voir le fichier

@@ -4,6 +4,7 @@ import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -40,9 +41,13 @@ import org.jeecgframework.poi.util.POIPublicUtil;
*/
public abstract class ExcelExportBase extends ExportBase {
private int currentIndex = 0;
private int currentIndex = 0;
protected String type = PoiBaseConstants.HSSF;
protected String type = PoiBaseConstants.HSSF;
private Map<Integer, Double> statistics = new HashMap<Integer, Double>();
private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");
private boolean checkIsEqualByCellContents(MergeEntity mergeEntity, String text, Cell cell,
int[] delys, int rowNum) {
@@ -259,6 +264,43 @@ public abstract class ExcelExportBase extends ExportBase {
if (style != null) {
cell.setCellStyle(style);
}
addStatisticsData(index, text, entity);
}
/**
* 创建统计行
* @param styles
* @param sheet
*/
public void addStatisticsRow(CellStyle styles, Sheet sheet) {
Row row = sheet.createRow(sheet.getLastRowNum() + 1);
Set<Integer> keys = statistics.keySet();
createStringCell(row, 0, "合计", styles, null);
for (Integer key : keys) {
createStringCell(row, key, DOUBLE_FORMAT.format(statistics.get(key)), styles, null);
}
statistics.clear();
}
/**
* 合计统计信息
* @param index
* @param text
* @param entity
*/
private void addStatisticsData(Integer index, String text, ExcelExportEntity entity) {
if (entity != null && entity.isStatistics()) {
Double temp = 0D;
if (!statistics.containsKey(index)) {
statistics.put(index, temp);
}
try {
temp = Double.valueOf(text);
} catch (NumberFormatException e) {
}
statistics.put(index, statistics.get(index) + temp);
}
}
/**


+ 1
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/base/ExportBase.java Voir le fichier

@@ -203,6 +203,7 @@ public class ExportBase {
excelEntity.setDatabaseFormat(excel.databaseFormat());
excelEntity.setFormat(StringUtils.isNotEmpty(excel.exportFormat()) ? excel.exportFormat()
: excel.format());
excelEntity.setStatistics(excel.isStatistics());
String fieldname = field.getName();
excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass));
}


+ 3
- 3
easypoi-test/src/main/java/org/jeecgframework/poi/entity/CourseEntity.java Voir le fichier

@@ -22,17 +22,17 @@ public class CourseEntity implements java.io.Serializable {
/** 主键 */
private String id;
/** 课程名称 */
@Excel(name = "课程名称", orderNum = "1", needMerge = true)
@Excel(name = "课程名称", orderNum = "1", width = 15, needMerge = true)
private String name;
/** 老师主键 */
@ExcelEntity(id = "yuwen")
@ExcelVerify()
private TeacherEntity teacher;
/** 老师主键 */
@ExcelEntity(id = "shuxue")
//@ExcelEntity(id = "shuxue")
private TeacherEntity shuxueteacher;
@ExcelCollection(name = "选课学生", orderNum = "4")
//@ExcelCollection(name = "选课学生", orderNum = "4")
private List<StudentEntity> students;
/**


+ 11
- 10
easypoi-test/src/main/java/org/jeecgframework/poi/entity/StudentEntity.java Voir le fichier

@@ -25,20 +25,16 @@ public class StudentEntity implements java.io.Serializable {
/**
* 学生性别
*/
@Excel(name = "学生性别", replace = { "男_1", "女_2" },suffix = "生")
@Excel(name = "学生性别", replace = { "男_1", "女_2" }, suffix = "生", mergeVertical = true)
private int sex;
@Excel(name = "出生日期", format = "yyyy-MM-dd HH:mm:ss", mergeVertical = true)
@Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", exportFormat = "yyyy-MM-dd", mergeVertical = true)
private Date birthday;
/**
* 课程主键
*/
private CourseEntity course;
public Date getBirthday() {
return birthday;
}
public CourseEntity getCourse() {
return course;
}
@@ -70,10 +66,6 @@ public class StudentEntity implements java.io.Serializable {
return this.sex;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public void setCourse(CourseEntity course) {
this.course = course;
}
@@ -104,4 +96,13 @@ public class StudentEntity implements java.io.Serializable {
public void setSex(int sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}

+ 1
- 1
easypoi-test/src/main/java/org/jeecgframework/poi/entity/TeacherEntity.java Voir le fichier

@@ -18,7 +18,7 @@ public class TeacherEntity implements java.io.Serializable {
@Excel(name = "老师ID_teacherEntity,老师属性_courseEntity", orderNum = "2", needMerge = false)
private String id;
/** name */
@Excel(name = "语文老师_yuwen,数学老师_shuxue", orderNum = "2", needMerge = true)
@Excel(name = "语文老师_yuwen,数学老师_shuxue", orderNum = "2", mergeVertical = true)
private String name;
/*


+ 80
- 0
easypoi-test/src/main/java/org/jeecgframework/poi/entity/statistics/StatisticEntity.java Voir le fichier

@@ -0,0 +1,80 @@
package org.jeecgframework.poi.entity.statistics;
import java.math.BigDecimal;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* 统计测试类
* @author JueYue
* @date 2014年12月17日 上午11:51:10
*/
public class StatisticEntity {
@Excel(name = "名称")
private String name;
@Excel(name = "int 测试", width = 15, isStatistics = true)
private int intTest;
@Excel(name = "long 测试", width = 15, isStatistics = true)
private long longTest;
@Excel(name = "double 测试", width = 15, isStatistics = true)
private double doubleTest;
@Excel(name = "string 测试", width = 15, isStatistics = true)
private String stringTest;
@Excel(name = "BigDecimal 测试", width = 15, isStatistics = true)
private BigDecimal bigDecimalTest;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIntTest() {
return intTest;
}
public void setIntTest(int intTest) {
this.intTest = intTest;
}
public long getLongTest() {
return longTest;
}
public void setLongTest(long longTest) {
this.longTest = longTest;
}
public double getDoubleTest() {
return doubleTest;
}
public void setDoubleTest(double doubleTest) {
this.doubleTest = doubleTest;
}
public String getStringTest() {
return stringTest;
}
public void setStringTest(String stringTest) {
this.stringTest = stringTest;
}
public BigDecimal getBigDecimalTest() {
return bigDecimalTest;
}
public void setBigDecimalTest(BigDecimal bigDecimalTest) {
this.bigDecimalTest = bigDecimalTest;
}
}

+ 45
- 0
easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportStatisticTest.java Voir le fichier

@@ -0,0 +1,45 @@
package org.jeecgframework.poi.excel.test;
import java.io.File;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecgframework.poi.entity.statistics.StatisticEntity;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants;
import org.junit.Test;
public class ExcelExportStatisticTest {
@Test
public void test() throws Exception {
List<StatisticEntity> list = new ArrayList<StatisticEntity>();
for (int i = 0; i < 250000; i++) {
StatisticEntity client = new StatisticEntity();
client.setName("index" + i);
client.setIntTest(1 + i);
client.setLongTest(1 + i);
client.setDoubleTest(1.2D + i);
client.setBigDecimalTest(new BigDecimal(1.2 + i));
client.setStringTest("12" + i);
list.add(client);
}
Date start = new Date();
ExportParams params = new ExportParams("2412312", "测试");
params.setType(ExportParams.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(params, StatisticEntity.class, list);
System.out.println(new Date().getTime() - start.getTime());
File savefile = new File("d:/");
if (!savefile.exists()) {
savefile.mkdirs();
}
FileOutputStream fos = new FileOutputStream("d:/tt.xlsx");
workbook.write(fos);
fos.close();
}
}

+ 25
- 28
easypoi-test/src/main/java/org/jeecgframework/poi/excel/test/ExcelExportUtilTest.java Voir le fichier

@@ -33,12 +33,9 @@ public class ExcelExportUtilTest {
@Test
public void oneHundredThousandRowTest() throws Exception {
for (int i = 0; i < 250; i++) {
list.add(courseEntity);
}
Date start = new Date();
Workbook workbook = ExcelExportUtil.exportExcel(
new ExportParams("2412312", "测试", "测试"), CourseEntity.class, list);
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("2412312", "测试"),
CourseEntity.class, list);
System.out.println(new Date().getTime() - start.getTime());
File savefile = new File("d:/");
if (!savefile.exists()) {
@@ -59,31 +56,31 @@ public class ExcelExportUtilTest {
@Before
public void testBefore() {
courseEntity = new CourseEntity();
courseEntity.setId("1131");
courseEntity.setName("小白");
TeacherEntity teacherEntity = new TeacherEntity();
teacherEntity.setId("12131231");
teacherEntity.setName("你们");
courseEntity.setTeacher(teacherEntity);
for (int i = 0; i < 2; i++) {
courseEntity = new CourseEntity();
courseEntity.setId("1131");
courseEntity.setName("海贼王必修(" + (i + 1) + ")");
teacherEntity = new TeacherEntity();
teacherEntity.setId("121312314312421131");
teacherEntity.setName("老王");
courseEntity.setShuxueteacher(teacherEntity);
TeacherEntity teacherEntity = new TeacherEntity();
teacherEntity.setId("12131231");
teacherEntity.setName("路飞");
courseEntity.setTeacher(teacherEntity);
StudentEntity studentEntity = new StudentEntity();
studentEntity.setId("11231");
studentEntity.setName("撒旦法司法局");
studentEntity.setBirthday(new Date());
studentEntity.setSex(1);
List<StudentEntity> studentList = new ArrayList<StudentEntity>();
studentList.add(studentEntity);
studentList.add(studentEntity);
courseEntity.setStudents(studentList);
teacherEntity = new TeacherEntity();
teacherEntity.setId("121312314312421131");
teacherEntity.setName("老王");
courseEntity.setShuxueteacher(teacherEntity);
for (int i = 0; i < 3; i++) {
StudentEntity studentEntity = new StudentEntity();
studentEntity.setId("11231");
studentEntity.setName("撒旦法司法局");
studentEntity.setBirthday(new Date());
studentEntity.setSex(1);
List<StudentEntity> studentList = new ArrayList<StudentEntity>();
studentList.add(studentEntity);
studentList.add(studentEntity);
courseEntity.setStudents(studentList);
list.add(courseEntity);
}
}
@@ -96,8 +93,8 @@ public class ExcelExportUtilTest {
//@Test
public void testExportExcel() throws Exception {
Date start = new Date();
Workbook workbook = ExcelExportUtil.exportExcel(
new ExportParams("2412312", "测试", "测试"), CourseEntity.class, list);
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("2412312", "测试", "测试"),
CourseEntity.class, list);
System.out.println(new Date().getTime() - start.getTime());
File savefile = new File("d:/");
if (!savefile.exists()) {


Chargement…
Annuler
Enregistrer