1.pom文件
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.5-FINAL</version>
</dependency>
2.工具类
package com.hndct.util;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
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;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.hndct.test.ExcelTestEntity;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
/**
* 基于poi的Excel操作工具类
* @author rabbit
*/
public class ExcelUtils {
/**
* 方法说明:根据filePath获取文件,根据传入的开始行和结束行,获取文件中的数据存到传入的T类型的list中返回。
* 注意:
* 1.T的字段名称必须和Excel中的列按照顺序一一对应才能正确获取到数据。
* 2.该方法只操作Excel中的第一个sheet。
* 3.只能读取文本,图片什么的没考虑。
* 4.取出的数据包含头(startRow)不包含尾(endRow)。
*
* @param filePath
* 文件路径
* @param startRow
* 数据开始行
* @param endRow
* 数据结束行
* @param clazz
* 包装返回数据用的Class对象。
* @return
* @throws Exception
*/
public static <T> List<T> getBeanFromExcel(String filePath, int startRow, int endRow, Class<T> clazz) {
Sheet sheet = getSheet(filePath);
Method[] methods = getMethods(clazz);
int lastRowNum = sheet.getLastRowNum();
startRow = startRow < 1 ? 1 : startRow;
endRow = endRow > lastRowNum ? lastRowNum : endRow;
int coloumNums = sheet.getRow(0).getPhysicalNumberOfCells();
return getResult(startRow, endRow, coloumNums, sheet, clazz, methods);
}
/**
* 导出excel 2019-9-3 09:53:00
* @param entityList 要导出的数据列表,
* 如果想要指定表中每个列的名字,就在实体类的字段上增加注解,
* 类似:@RabbitExcel(columnName="第一列")即可,不加注解则列名为字段名。
* 有时用户身份用0和1表示普通和会员,那么最终体现到excel里应该是普通或会员而不是0或1,
* 此时,用注解中的dict指定,示例:@RabbitExcel(columnName="用户状态",dict="{\"1\":\"正常\",\