springboot接收并解析vue前端传的excel文件
springboot接收并解析vue前端传的excell文件代码运行环境环境与导包问题接收文件使用MultipartFile file(需单独配置解析器)解析Execll通过导入 POI 的jar包解决接收前端发送的excell文件解析excell内容以对象集合的形式打印输出代码运行环境环境与导包问题后端使用SpringMVC、Spring,如果是Springboot,则不用考虑配置问题接收文件使
springboot接收并解析vue前端传的excel文件
代码运行环境与导包问题
后端使用SpringMVC、Spring,如果是Springboot,则不用考虑配置问题
接收文件使用MultipartFile file(需单独配置解析器)
解析Execl通过导入 POI 的jar包解决
配置依赖
//MultipartFile需要导入的依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
//导入POI需要的依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.6</version>
</dependency>
springmvc配置文件中,加上文件上传解析器
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
前端vue发送excel文件
可以参考我的另一篇博客:添加链接描述
https://blog.csdn.net/weixin_44452346/article/details/107613304
接收前端发送的excel文件
public String fileupload( MultipartFile file, Model model)
throws IOException, InterruptedException {
System.out.println("接收到前端文件");
//调用Read.excel方法,传入file文件进行解析
解析excel内容
此处需要说明的是文件格式问题
目前通常用到的excel文件有两种类型,一种是.xls、一种是.xlsx
.xls是excel2003的版本,比较老
.xlsx是2007之后的版本,兼容性更好,而且文件所占用的内存小了一倍。
推荐使用.xlsx这种文件类型,也是目前最常使用的
两种在解析上的主要区别是:
扩展名为.xls的话,workbook 对象要写成HSSFWorkbook
扩展名是.xlsx,workbook 对象要写成XSSFWorkbook
我是定义了一个类,便于接收这个形式的对象集合,在接收的时候好遍历集合,得到想要的类型传给前端。读者可以自行定义。
不足之处在于,我把excel表格中的类型全部处理为了字符串格式,因为全变为字符串比较简单。如果有date类型或者数字类型是需要添加条件选择,做出不同的方法对应。
//解析xlsx
public class Read {
public static List<xxx> excel(MultipartFile file) {
//定义一个空数组
List <xxx> list = new ArrayList<>();
//定义数组中的对象,全局可使用
xxx xxx = null;
try {
//1. 创建一个 workbook 对象
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
//2. 获取 workbook 中表单的数量
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
//3. 获取表单,先得到每一行,在得到每一列
XSSFSheet sheet = workbook.getSheetAt(i);
//4. 获取表单中的行数
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < physicalNumberOfRows; j++) {
//5. 跳过标题行
if (j == 0) {
continue;//跳过标题行
}
//6. 获取行
XSSFRow row = sheet.getRow(j);
if (row == null) {
continue;//防止数据中间有空行
}
//7. 获取列数
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
//循环获得每一行中每一列数据
xxx = new xxx();
for (int k = 0; k < physicalNumberOfCells; k++) {
XSSFCell cell = row.getCell(k);
//pridict里边的excell是数字型,要把先转换成String类型
if(cell != null){
cell.setCellType(Cell.CELL_TYPE_STRING);
}
String cellValue = cell.getStringCellValue();
//k为表示哪一列,用switch选择,把对应值加入对象中
switch (k) {
case 0:
break;
case 1:
break;
case 2:
break;
........
default:
System.out.println("default!");
break;
}
}
// 最后将解析后的数据,为csv对象,添加到List集合中
list.add(xxx);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
}
以对象集合的形式打印输出
List <xxx> xxx = Read.excel(file);
//定义全局变量,接收java解析出的数据,并给python发送
String receive = "";
// 遍历输出解析出的对象,格式可以通过tostring方法自行定义
for ( xxx xxx : list) {
receive=csv.toString();
}
System.out.println(receive);
System.out.println("文件解析了");
刚入门的小白,写的不足之处请多多指教,欢迎与我沟通交流!!!
更多推荐
所有评论(0)