需求
excel表格=>List<Map<K,V>>
的形式
技术需要:
io流,poi,List和Map集合基本用法
流程
一步一步来
❤️ 组装io流:
InputStream is =new FileInputStream(new File(path))//path:xhl路径
❤️ poi WorkBook一本书
XSSFWorkbook xssfWorkbook = null;
try {
xssfWorkbook = new XSSFWorkbook(is);
} catch (Exception e) {
e.printStackTrace();
}
<wornning>
不要用下面这种构造方法去构造XSSFWorkbook对象,不然会破坏你的Excel
//如果Excel仅仅是作为模板来使用,不希望得到变更,不要用这种构造方式,会造成原Excel变更!!!
XSSFWorkbook workbook = new XSSFWorkbook(“Excel绝对路径”);// 创建excel模板workbook,
❤️ poi Sheet一本书的每一页
XSSFSheet xssfSheet=null;
xssfSheet = xssfWorkbook.getSheetAt(0);//我的xhl只有一页
List<Map<String, String>> list = new ArrayList<Map<String, String>>();//一会用这个集合存我们需要的数据
❤️ poi Rows 标题行
XSSFRow titleRow = xssfSheet.getRow(0);//标题行 XSSRow也是个集合
❤️ poi 循环遍历每一行 以及每一个单元格 双层嵌套
for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {
XSSFRow xssfRow = xssfSheet.getRow(rowIndex);
//空值判断
if (xssfRow == null) {
continue;
}
Map<String, String> map = new LinkedHashMap<String, String>();
//循环取每个单元格(cell)的数据
for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {
XSSFCell titleCell = titleRow.getCell(cellIndex);
XSSFCell xssfCell = xssfRow.getCell(cellIndex);
map.put(getString(titleCell),getString(xssfCell));
}
list.add(map);
}
截至到这 我们需要的List集合就拿到了 可以进行你需要的操作了 我封装成方法了 着急干活的小伙伴可以直接c+v👇
public static List<Map<String,String>> getMapArr(InputStream is){
XSSFWorkbook xssfWorkbook = null;
try {
xssfWorkbook = new XSSFWorkbook(is);
} catch (Exception e) {
e.printStackTrace();
}
//定义工作表
XSSFSheet xssfSheet;
xssfSheet = xssfWorkbook.getSheetAt(0);
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
//定义行
//默认第一行为标题行,index = 0
XSSFRow titleRow = xssfSheet.getRow(0);
//循环取每行的数据
for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {
XSSFRow xssfRow = xssfSheet.getRow(rowIndex);
if (xssfRow == null) {
continue;
}
Map<String, String> map = new LinkedHashMap<String, String>();
//循环取每个单元格(cell)的数据
for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {
XSSFCell titleCell = titleRow.getCell(cellIndex);
XSSFCell xssfCell = xssfRow.getCell(cellIndex);
map.put(getString(titleCell),getString(xssfCell));
}
list.add(map);
}
return list;
}
按说到这,我们要求的excel变Map集合就实现了,但是!我还不满意,我还需要将这个excel表格里的东西读出来然后存到数据库里,那咋办呢?我们试着操作一手…下篇见=>客户都excel表格最终进入服务器数据库
喜欢的朋友点个赞吧,一起交流进步,纯原创