版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdnwodeboke/article/details/80020691
很多时候会涉及到execl上传,如果使用数字取标示每一个单元格,日后维护起来将非常麻烦。
如果将execl单元格中的内容放到List<javaBean>中,一个javaBean对应一行execl中的内容,这样操作execl会很方便。
以后要在execl中添加某一列,对应地在javaBean中添加对应的字段即可。代码维护起来十分方便。
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 org.springframework.web.multipart.MultipartFile;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.util.LinkedList;
import java.util.List;
public class ExcelUtlis {
/**
*
* @param file execl文件
* @param sheetClazz 对应的实体类
* @param num 读取execl的起始行的索引
* @param columnNum 读取execl的列数
* @param <T>
* @return
* @throws Exception
*/
public static <T>List<T> getExcelListData(MultipartFile file, Class sheetClazz, Integer num, Integer columnNum) throws Exception {
Field[] totalRowClazzFields = sheetClazz.getDeclaredFields();
Workbook workbook = new XSSFWorkbook(file.getInputStream());
Sheet sheet = workbook.getSheetAt(0);
List<T> ts = new LinkedList<>();
for (int j = num; j < sheet.getLastRowNum() + 1; j++) {
Row row = sheet.getRow(j);
T obj = (T) sheetClazz.newInstance();
for (int k = 0; k < columnNum; k++) {
String value = "";
try {
value = row.getCell(k).getStringCellValue().trim();
} catch (Exception e) {
e.printStackTrace();
}
new PropertyDescriptor(totalRowClazzFields[k].getName(), sheetClazz).getWriteMethod().invoke(obj, value);
}
ts.add(obj);
}
return ts;
}
}