Execl export
We use Apache 's POI tool, download address . The
process is very simple, mainly the use of API, the code is as follows:
ExeclUtil.java:
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/**
* Execl工具类
* @author Cherry
*/
public class ExeclUtil {
private static final int MAXSIZE = 5000;
/**
* 传入数据列表进行Execl导出
* @throws Exception
*/
public static <T> void listToExecl(List<T> data, OutputStream out, Map<String, String> fields)
throws Exception {
if (data == null || data.size() == 0) {
throw new Exception("传入的数据源中无数据");
}
HSSFWorkbook workbook = new HSSFWorkbook();
//1.计算一共有多少个Sheet
int sheetNum = data.size() / MAXSIZE;
if (data.size() % MAXSIZE != 0) {
sheetNum += 1;
}
String[] fieldNames = new String[fields.size()];
String[] values = new String[fields.size()];
int count = 0;
for (Entry<String, String> entry : fields.entrySet()) {
String fieldName = entry.getKey();
String value = entry.getValue();
fieldNames[count] = fieldName;
values[count] = value;
count++;
}
//填充数据
for (int i = 0; i < sheetNum; i++) {
int rowCount = 0;
HSSFSheet sheet = workbook.createSheet();
int startIndex = i * MAXSIZE;
int endIndex = (i + 1) * MAXSIZE - 1 > data.size() ? data.size()
: (i + 1) * MAXSIZE - 1;
HSSFRow row = sheet.createRow(rowCount);
//标题行
for (int j = 0; j < values.length; ++j) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(values[j]);
}
rowCount++;
for (int index = startIndex; index < endIndex; index++) {
T item = data.get(index);//获取数据的实体对象
row = sheet.createRow(rowCount);
//通过反射取值
for (int j = 0; j < values.length; ++j) {
Field field = item.getClass().getDeclaredField(fieldNames[j]);
field.setAccessible(true);
Object object = field.get(item);
String value = object == null ? "" : object.toString();
HSSFCell cell = row.createCell(j);
cell.setCellValue(value);
}
rowCount++;
}
}
workbook.write(out);
}
}
Test.java:
package com.cherry.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class Test {
public static void main(String[] args) throws Exception {
/*//1创建工作簿(WorkBook)
HSSFWorkbook workBook = new HSSFWorkbook();
//HSSFCellStyle cellStyle = workBook.createCellStyle();
//cellStyle.set
//2.创建Sheet
HSSFSheet sheet = workBook.createSheet("班级信息");
//3.创建行
HSSFRow row = sheet.createRow(0);
//4.创建列
HSSFCell cell = row.createCell(0);
//5.填写数据
cell.setCellValue("bmy");
//6.execl传递
OutputStream out = new FileOutputStream("E:/test.xls");
//通过workbook的write方法实现execl的输出
workBook.write(out);
out.close();*/
//================================ 导出 =======================================
List<Student> data = new ArrayList<>();
Student stu0 = new Student();
stu0.setAge(18);
stu0.setName("DJJ");
stu0.setNum("20177507");
stu0.setSex("女");
data.add(stu0);
Student stu1 = new Student();
stu1.setAge(18);
stu1.setName("DJJ");
stu1.setNum("20177507");
stu1.setSex("女");
data.add(stu1);
Student stu2 = new Student();
stu2.setAge(18);
stu2.setName("DJJ");
stu2.setNum("20177507");
stu2.setSex("女");
data.add(stu2);
Student stu3 = new Student();
stu3.setAge(18);
stu3.setName("DJJ");
stu3.setNum("20177507");
stu3.setSex("女");
data.add(stu3);
Student stu4 = new Student();
stu4.setAge(18);
stu4.setName("DJJ");
stu4.setNum("20177507");
stu4.setSex("女");
data.add(stu4);
Student stu5 = new Student();
stu5.setAge(18);
stu5.setName("DJJ");
stu5.setNum("20177507");
stu5.setSex("女");
data.add(stu5);
OutputStream out = new FileOutputStream("E:/test.xls");
Map<String, String> fields = new LinkedHashMap<>();//HashMap不会保证数据的顺序,LinkedHashMap可以保证数据的顺序
fields.put("num", "学号");
fields.put("name", "姓名");
fields.put("age", "年龄");
fields.put("sex", "性别");
ExeclUtil.listToExecl(data, out, fields);
//============================== 导入 =====================================
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("E:/test.xls"));
//迭代每个工作簿
for (int i = 0; i < workbook.getNumberOfSheets(); ++i) {
HSSFSheet sheet = workbook.getSheetAt(i);
if (sheet == null) {
continue;
}
List<Student> data = new ArrayList<>();
//循环每一行
for (int j = 1; j < sheet.getLastRowNum(); ++j) {
HSSFRow row = sheet.getRow(j);
if (row == null) {
continue;
}
Student student = new Student();
student.setNum(row.getCell(0).getStringCellValue());
student.setName(row.getCell(1).getStringCellValue());
student.setAge(Integer.valueOf(row.getCell(2).getStringCellValue()));
student.setSex(row.getCell(3).getStringCellValue());
data.add(student);
}
for (Student stu : data) {
System.out.println(stu.getNum() + " " + stu.getName() + " " + stu.getAge() + " " + stu.getSex());
}
}
}
}
The specific data can be obtained from the database through JDBC.