java导入Excel表格数据
1.首先导入两个依赖jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
2.需要编写一个工具类
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ImportExcel {
// abc.xls
public static boolean isXls(String fileName){
// (?i)忽略大小写
if(fileName.matches("^.+\\.(?i)(xls)$")){
return true;
}else if(fileName.matches("^.+\\.(?i)(xlsx)$")){
return false;
}else{
throw new RuntimeException("格式不对");
}
}
public static List<Map<String, Object>> readExcel(String fileName, InputStream inputStream) throws Exception{
boolean ret = isXls(fileName);
Workbook workbook = null;
// 根据后缀创建不同的对象
if(ret){
workbook = new HSSFWorkbook(inputStream);
}else{
workbook = new XSSFWorkbook(inputStream);
}
Sheet sheet = workbook.getSheetAt(0);
// 得到标题行
Row titleRow = sheet.getRow(0);
int lastRowNum = sheet.getLastRowNum();
int lastCellNum = titleRow.getLastCellNum();
List<Map<String, Object>> list = new ArrayList<>();
for(int i = 1; i <= lastRowNum; i++ ){
Map<String, Object> map = new HashMap<>();
Row row = sheet.getRow(i);
for(int j = 0; j < lastCellNum; j++){
// 得到列名
String key = titleRow.getCell(j).getStringCellValue();
Cell cell = row.getCell(j);
cell.setCellType(CellType.STRING);
map.put(key, cell.getStringCellValue());
}
list.add(map);
}
workbook.close();
return list;
}
public static List<Map<String, Object>> readExcel(String fileName, InputStream inputStream,Map<String,String> colmus) throws Exception{
boolean ret = isXls(fileName);
Workbook workbook = null;
// 根据后缀创建不同的对象
if(ret){
workbook = new HSSFWorkbook(inputStream);
}else{
workbook = new XSSFWorkbook(inputStream);
}
Sheet sheet = workbook.getSheetAt(0);
// 得到标题行
Row titleRow = sheet.getRow(0);
int lastRowNum = sheet.getLastRowNum();
int lastCellNum = titleRow.getLastCellNum();
List<Map<String, Object>> list = new ArrayList<>();
for(int i = 1; i <= lastRowNum; i++ ){
Map<String, Object> map = new HashMap<>();
Row row = sheet.getRow(i);
for(int j = 0; j < lastCellNum; j++){
// 得到列名
String key = titleRow.getCell(j).getStringCellValue();
Cell cell = row.getCell(j);
cell.setCellType(CellType.STRING);
if(colmus.get(key) != null && !"".equals(colmus.get(key))){
key = colmus.get(key);
}
map.put(key, cell.getStringCellValue());
}
list.add(map);
}
workbook.close();
return list;
}
}
3.需要一个Student对象,读取Excel表格数据后为json格式,需要用json格式转换为Student对象
public class Student {
private int studentid;//学号id
private String name;//姓名
private String sex;//性别
public int getStudentid() {
return studentid;
}
public void setStudentid(int studentid) {
this.studentid = studentid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
3.编写一个demo测试类
import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ibeetl.admin.console.tool.ImportExcel;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;
public class demo {
public static void main(String[] args){
importExcel("D:\\测试.xls");
}
public static void importExcel(String fileName){
try {
// 获取上传文件的输入流
InputStream inputStream = new FileInputStream(fileName);
Map<String,String> colmus = new HashMap<>();
colmus.put("学号","studentid");//读取Excel数据后是json格式的,然后在json格式转换为对象,因此Excel表格里面中文字段所以要通过这里更改json的key
colmus.put("姓名","name");
colmus.put("性别","sex");
// 调用工具类中方法,读取excel文件中数据
List<Map<String, Object>> sourceList = ImportExcel.readExcel(fileName, inputStream,colmus);
ObjectMapper objMapper = new ObjectMapper();
String infos = objMapper.writeValueAsString(sourceList);
//json转换对象
List<Student> list = JSONArray.parseArray(infos, Student.class);
for (int i = 0; i< list.size();i++){
System.out.print("姓名:");
System.out.println(list.get(i).getName());
System.out.print("性别:");
System.out.println(list.get(i).getSex());
System.out.print("学号:");
System.out.println(list.get(i).getStudentid());
//然后在这里编写插入数据库的操作
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.然后在给你们看看我的Excel表格里面的内容
5.输出结果: