POI读取Execl表格 应用层数据传递
POI读取Execl依赖代码Controller层的数据传递
POI读取Execl
POI是一款 读写 Execl表格的第三方插件 这里主要是读取Execl表格数据 xls03版 xlsx 07版。
没有什么难点 就两点需要注意下一个数据转换 一个单元格的定位,代码我会填写注释。 还有一个就是刚才说的Execl版本问题。Execl03版是有行数限制的 65535行 而07版以后的没有限制。他们的调用方式也不一样。
依赖
<dependency>
<groupId>org
.apache
.poi
</groupId
>
<artifactId>poi
</artifactId
>
<version>3.9</version
>
</dependency
>
<dependency>
<groupId>org
.apache
.poi
</groupId
>
<artifactId>poi
-ooxml
</artifactId
>
<version>3.9</version
>
</dependency
>
<dependency>
<groupId>joda
-time
</groupId
>
<artifactId>joda
-time
</artifactId
>
<version>2.10.5</version
>
</dependency
>
<dependency>
<groupId>com
.alibaba
</groupId
>
<artifactId>fastjson
</artifactId
>
<version>1.2.15</version
>
</dependency
>
代码
03版 Workbook workbook
= new HSSFWorkbook(fileInputStream
);
07版 Workbook workbook
= new XSSFWorkbook(fileInputStream
);
@PostMapping("/Cell03")
public String
Cell03Controlller(@RequestBody String file
,
RedirectAttributes attr
) throws IOException
{
JSONObject jsonObject
= JSON
.parseObject(file
);
List
<String> list
= new LinkedList<>();
FileInputStream fileInputStream
= new FileInputStream(jsonObject
.getString("file")+"templ.xls");
jsonObject
.remove("file");
Workbook workbook
= new HSSFWorkbook(fileInputStream
);
Sheet sheet
= workbook
.getSheetAt(0);
Row row
= sheet
.getRow(0);
int a
= row
.getPhysicalNumberOfCells();
int b
= sheet
.getPhysicalNumberOfRows();
for (int i
= 1; i
< b
; i
++) {
Row row1
= sheet
.getRow(i
);
for (int k
= 0; k
< a
; k
++) {
Cell cell
= row
.getCell(k
);
Cell cell1
= row1
.getCell(k
);
if (cell1
!= null
) {
String cellvalue
= "";
switch (cell1
.getCellType()) {
case HSSFCell
.CELL_TYPE_STRING
:
cellvalue
= cell1
.getStringCellValue();
break;
case HSSFCell
.CELL_TYPE_NUMERIC
:
if (HSSFDateUtil
.isCellDateFormatted(cell1
)) {
Date date
= cell1
.getDateCellValue();
cellvalue
= new DateTime(date
).toString("yyyy-MM-dd");
} else {
cell1
.setCellType(HSSFCell
.CELL_TYPE_STRING
);
cellvalue
= cell1
.toString();
}
break;
case HSSFCell
.CELL_TYPE_BOOLEAN
:
cellvalue
= String
.valueOf(cell1
.getBooleanCellValue());
break;
case HSSFCell
.CELL_TYPE_BLANK
:
break;
case HSSFCell
.CELL_TYPE_ERROR
:
cellvalue
= String
.valueOf(cell1
.getErrorCellValue());
break;
}
jsonObject
.put(String
.valueOf(cell
.getStringCellValue())
,cellvalue
);
}
}
list
.add(jsonObject
.toJSONString());
}
attr
.addFlashAttribute("jsonObject",list
);
fileInputStream
.close();
return "redirect:/test" ;
}
@PostMapping("/Cell07")
public String
Cell07Controlller(@RequestBody String file
,
RedirectAttributes attr
) throws IOException
{
JSONObject jsonObject
= JSON
.parseObject(file
);
List
<String> list
= new LinkedList<>();
FileInputStream fileInputStream
= new FileInputStream(jsonObject
.getString("file") + "templ.xlsx");
jsonObject
.remove("file");
Workbook workbook
= new XSSFWorkbook(fileInputStream
);
Sheet sheet
= workbook
.getSheetAt(0);
Row row
= sheet
.getRow(0);
int a
= row
.getPhysicalNumberOfCells();
int b
= sheet
.getPhysicalNumberOfRows();
for (int i
= 1; i
< b
; i
++) {
Row row1
= sheet
.getRow(i
);
for (int k
= 0; k
< a
; k
++) {
Cell cell
= row
.getCell(k
);
Cell cell1
= row1
.getCell(k
);
if (cell1
!= null
) {
String cellvalue
= "";
switch (cell1
.getCellType()) {
case HSSFCell
.CELL_TYPE_STRING
:
cellvalue
= cell1
.getStringCellValue();
break;
case HSSFCell
.CELL_TYPE_NUMERIC
:
if (HSSFDateUtil
.isCellDateFormatted(cell1
)) {
Date date
= cell1
.getDateCellValue();
cellvalue
= new DateTime(date
).toString("yyyy-MM-dd");
} else {
cell1
.setCellType(HSSFCell
.CELL_TYPE_STRING
);
cellvalue
= cell1
.toString();
}
break;
case HSSFCell
.CELL_TYPE_BOOLEAN
:
cellvalue
= String
.valueOf(cell1
.getBooleanCellValue());
break;
case HSSFCell
.CELL_TYPE_BLANK
:
break;
case HSSFCell
.CELL_TYPE_ERROR
:
cellvalue
= String
.valueOf(cell1
.getErrorCellValue());
break;
}
jsonObject
.put(String
.valueOf(cell
.getStringCellValue())
,cellvalue
);
}
}
list
.add(jsonObject
.toJSONString());
}
attr
.addFlashAttribute("jsonObject",list
);
fileInputStream
.close();
return "redirect:/test" ;
}
Controller层的数据传递
@ResponseBody
@RequestMapping (value
= "/test")
public Map
<String,Object> test(@ModelAttribute("jsonObject")List
<String> list
){
Map
<String,Object> map
= new HashMap<>();
String ret
= "0";
if (!list
.isEmpty()) {
ret
= "1";
System
.out
.println(list
.toString());
}
map
.put("ret",ret
);
return map
;
}
}
代码本身没有任何难度 可以将我的Cell03Controlller/Cell07Controlller封装成一个工具类 只需传递一个FileInputStream 就可以使用