java 读取excel文件内容 java读取excel文件并导入数据库 您所在的位置:网站首页 2007版excel后缀 java 读取excel文件内容 java读取excel文件并导入数据库

java 读取excel文件内容 java读取excel文件并导入数据库

2023-06-19 13:50| 来源: 网络整理| 查看: 265

这是我来公司的第二周的一个小学习任务,下面是实现过程:

 

1.建立maven工程(方便管理jar包)

在pom.xml导入 jxl,mysql-connector 依赖

java 读取excel文件内容 java读取excel文件并导入数据库_java 读取excel文件内容

 

可以在maven仓库搜索

2.建立数据库连接类,数据库对应实体类

2.编写数据库表对应的实体类 ,get、set方法等

3.下面是编写读取excel文件的类 ,和运行主类

 

package service; import java.io.File; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import jxl.Sheet; import jxl.Workbook; import excel.DB; import excel.Student; public class StudentService { /** * 查询Student表中所有的数据 * @return */ public static List getAllByDb(){ List list=new ArrayList(); try { DB db=new DB(); String sql="select * from student"; ResultSet rs= db.Search(sql, null); while (rs.next()) { int id=rs.getInt("id"); String s_name=rs.getString("s_name"); String age=rs.getString("age"); String address=rs.getString("address"); list.add(new Student(id, s_name, age,address)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } /** * 查询指定目录中电子表格中所有的数据 * @param file 文件完整路径 * @return */ public static List getAllByExcel(String file){ List list=new ArrayList(); try { Workbook rwb=Workbook.getWorkbook(new File("F:\\student.xls")); Sheet rs=rwb.getSheet(0);//表 int clos=rs.getColumns();//得到所有的列 int rows=rs.getRows();//得到所有的行 System.out.println("表的列数:"+clos+" 表的行数:"+rows); for (int i = 1; i < rows; i++) { for (int j = 0; j < clos; j++) { //第一个是列数,第二个是行数 String id=rs.getCell(j++, i).getContents();//默认最左边编号也算一列 所以这里得j++ String s_name=rs.getCell(j++, i).getContents(); String age=rs.getCell(j++, i).getContents(); String address=rs.getCell(j++, i).getContents(); System.out.println("id:"+id+" name:"+s_name+" sex:"+age+" address:"+address); list.add(new Student(Integer.parseInt(id), s_name,age,address)); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } /** * 通过Id判断是否存在 * @param id * @return */ public static boolean isExist(int id){ try { DB db=new DB(); ResultSet rs=db.Search("select * from student where id=?", new String[]{id+""}); if (rs.next()) { return true; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } public static void main(String[] args) { System.out.println(isExist(1)); } }

运行主类:

package service; import java.util.List; import excel.DB; import excel.Student; public class TestExcelToDb { public static void main(String[] args) { //得到表格中所有的数据 List listExcel=StudentService.getAllByExcel("F:\\student.xls"); DB db=new DB(); for (Student student : listExcel) { int id=student.getId(); System.out.println(id); if (!StudentService.isExist(id)) { //不存在就添加 String sql="insert into student (id,s_name,age,address) values(?,?,?,?)"; String[] str=new String[]{id+"",student.getS_name(),student.getAge(),student.getAddress()+""}; db.AddU(sql, str); }else { //存在就更新 String sql="update student set s_name=?,age=?,address=? where id=?"; String[] str=new String[]{student.getS_name(),student.getAge(),student.getAddress()+"",id+""}; db.AddU(sql, str); } } } }

数据库截图:[Excel数据表头要与数据库字段对应]

java 读取excel文件内容 java读取excel文件并导入数据库_List_02

 

总结:以上是使用了 jxl实现的读取excel文件内容,并且将数据传到mysql,缺陷是:jxl仅支持EXCEL2003。

   要改进兼容2003和2007需要使用pol,要导入pol相关jar包

    pol 里面有有两个类是处理Excel2003 和Excel2007的

    HSSF-----2003,XSSF-----2007

下面是通过读取文件名判断该文件类型是03还是07的类方法。因为03和07很显然在文件后缀名就存在区别

/** * 对外提供读取excel 的方法 * */ public static List readExcel(File file) throws IOException { String fileName = file.getName(); List list = new ArrayList(); //根据其名称获取后缀 String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName .substring(fileName.lastIndexOf(".") + 1); String[][] result = null; if ("xls".equals(extension)) { result = read2003Excel(file); } else if ("xlsx".equals(extension)) { result = read2007Excel(file); } else { throw new IOException("不支持的文件类型"); } int rowLength = result.length; for (int i = 0; i < rowLength; i++) { StringBuffer sb = new StringBuffer(); for (int j = 0; j < result[i].length; j++) { if(!"".equals(result[i][j]) && result[i][j].trim().length()>0){ sb.append(result[i][j]).append("##"); }else{ sb.append("@@").append("##"); } } if(sb.toString().endsWith("##")){ sb.delete(sb.toString().length()-2, sb.toString().length()); } System.out.println(sb.toString()); list.add(sb.toString()); } return list; }

然后根据上面在编写一个读取Excel2003和一个Excel2007的类就行了。

以上是个人在测试编写后做的一点记录,有不对的地方望指正和见谅。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有