首页 > 代码库 > java easyreport 导入excel、 txt 数据简单实现(一)

java easyreport 导入excel、 txt 数据简单实现(一)

一直在看博客,却不知道怎么写,但是总是想写点什么,犹豫了两三天,决定还是写点东西吧,来和大家分享下。


    今年上半年时候接到了一个需求,具体什么需求就不说了,要求导入excel数据,并提示每一行错误信息。接到手后,查看之前的导入excel报表的代码,发现只有初始化workBook和根据cell获取cell 字符串值得通用方法。觉得可利用的东西太少了,于是决定就构建一个通用的实现导入excel报表的工具包。

    实现思路大致是这样的:

  1. 提供模板,模板包含读起始行、属性模板集合、读批次、校验出错中端。

  2. 添加属性模板,属性模板包含标题、属性名、字段索引、属性校验对象。

  3. 提供读引擎类,初始化读文件输入流、根据模板读取校验字段、校验错误信息管理、对象分配属性,匹配添加对象。

   具体实现方式不做详细讲述,只讲述如何使用,我会把源码提供给大家,源码在com.easyReport.read下,有兴趣的可以读下,欢迎交流。


    测试使用DEMO。


    首先构建基础测试类BasicTest

package test;


import java.io.FileInputStream;

import java.lang.reflect.ParameterizedType;

import java.util.List;

import java.util.Map;


import org.junit.Test;


import com.easyReport.read.ConvertReader;

import com.easyReport.read.temp.ReadTemp;


public abstract class BasicTest<T> {

//测试执行方法

@Test

public abstract void test();

//构建读引擎

protected abstract ConvertReader buildReader();

//构建读模板

protected abstract ReadTemp bulidReadTemp();

//输出对象信息

protected abstract void writeBeanList(List<T> modelLists);

//输出Map信息

protected abstract void writeMapList(List<Map<String, Object>> mapLists);


@SuppressWarnings("unchecked")

public void testReadBean(FileInputStream fis) throws Exception {

ConvertReader reader = buildReader();

writeBeanList((List<T>) reader.readToBeanList(fis, getModelClass()));

}


public void testReadMap(FileInputStream fis) throws Exception {

ConvertReader reader = buildReader();

writeMapList(reader.readToMapList(fis));

}


protected Class<?> getModelClass() {

return (Class<?>) ((ParameterizedType) (getClass()

.getGenericSuperclass())).getActualTypeArguments()[0];

}

}

构建excel基础类实现读引擎

package test;


import com.easyReport.read.ConvertReader;

import com.easyReport.read.ExcelReader;

import com.easyReport.read.ReaderContext;


public abstract class AbstractExcelTest<T> extends BasicTest<T> {


@Override

protected ConvertReader buildReader() {

return new ExcelReader(new ReaderContext(bulidReadTemp()));

}

}

构建txt基础类实现读引擎

package test;


import com.easyReport.read.ConvertReader;

import com.easyReport.read.ReaderContext;

import com.easyReport.read.TxtReader;


public abstract class AbstractTxtTest<T> extends BasicTest<T> {


@Override

protected ConvertReader buildReader() {

return new TxtReader(new ReaderContext(bulidReadTemp()));

}

}


test.xls报表数据

姓名年龄科目分数
王老五12语文80

Excel导入

package example;


import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import java.util.Map;


import model.Student;

import test.AbstractExcelTest;


import com.easyReport.read.temp.PropertyTemp;

import com.easyReport.read.temp.ReadTemp;


public class TestExcelSimple extends AbstractExcelTest<Student> {

@Override

public void test() {

FileInputStream fileInputStream;

try {

fileInputStream = new FileInputStream(new File("testFile/test.xls"));

testReadBean(fileInputStream);

// testReadMap(fileInputStream);

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}


@Override

protected ReadTemp bulidReadTemp() {

ReadTemp readTemp = new ReadTemp(1);

readTemp.addPropertyTemp(new PropertyTemp("姓名", "name"));

readTemp.addPropertyTemp(new PropertyTemp("年龄", "age"));

readTemp.addPropertyTemp(new PropertyTemp("科目", "course.name"));

readTemp.addPropertyTemp(new PropertyTemp("分数", "course.score"));

return readTemp;

}


@Override

protected void writeBeanList(List<Student> modelLists) {

System.out.println("--------------bean---------------");

for (Student s : modelLists) {

System.out.println(s.getName() + "|"+s.getAge()+s.getCourse().getName()+"|"+s.getCourse().getScore());

}

}


@Override

protected void writeMapList(List<Map<String, Object>> mapLists) {

System.out.println("--------------map---------------");

for (Map<String, Object> m : mapLists) {

System.out.println(m.get("name") + "|" + m.get("age")+"|" + m.get("course.name")+"|" + m.get("course.score"));

}

}


}

运行结果:

--------------bean---------------

王老五|12语文|80.0

切换至testReadMap(fileInputStream),运行结果:

--------------map---------------

王老五|12.0|语文|80.0


test.txt数据

姓名|年龄|科目|年龄

王老五|12|语文|80

Txt导入

package example;


import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import java.util.Map;


import model.Student;

import test.AbstractTxtTest;


import com.easyReport.read.temp.PropertyTemp;

import com.easyReport.read.temp.ReadTemp;

import com.easyReport.read.temp.TxtReadTemp;


public class TestTxtSimple extends AbstractTxtTest<Student> {

@Override

public void test() {

FileInputStream fileInputStream;

try {

fileInputStream = new FileInputStream(new File("testFile/test.txt"));

testReadBean(fileInputStream);

// testReadMap(fileInputStream);

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}


@Override

protected ReadTemp bulidReadTemp() {

TxtReadTemp readTemp = new TxtReadTemp(1);

readTemp.setSplit("\\|");//默认,或,分割符

readTemp.addPropertyTemp(new PropertyTemp("姓名", "name"));

readTemp.addPropertyTemp(new PropertyTemp("年龄", "age"));

readTemp.addPropertyTemp(new PropertyTemp("科目", "course.name"));

readTemp.addPropertyTemp(new PropertyTemp("分数", "course.score"));

return readTemp;

}


@Override

protected void writeBeanList(List<Student> modelLists) {

System.out.println("--------------bean---------------");

for (Student s : modelLists) {

System.out.println(s.getName() + "|"

+ s.getAge()+s.getCourse().getName()+"|"+s.getCourse().getScore());

}

}


@Override

protected void writeMapList(List<Map<String, Object>> mapLists) {

System.out.println("--------------map---------------");

for (Map<String, Object> m : mapLists) {

System.out.println(m.get("name") + "|" + m.get("age")+"|" + m.get("course.name")+"|" + m.get("course.score"));

}

}


}

运行结果:

--------------map---------------

王老五|12|语文|80


easyreport依赖jar包

wKioL1R5UWDgWumuAADri8pIRM8487.jpg



本文出自 “菜鸟博博” 博客,请务必保留此出处http://zhangxiao2.blog.51cto.com/6342789/1584435

java easyreport 导入excel、 txt 数据简单实现(一)