如何在Java中导入Excel表数据

前期准备和申明:

    1.之前自己在做这个Excel导入的时候也看了网上的一些博客,jxl很容易存在.xls 和.xlsx格式判断的问题。所以我选择POI,自己可以去网上下载,下载地址:http://poi.apache.org/download.html

    2.Excel数据模型准备好

开始:

   jsp和js中的代码自己写哈,因为我们用的前段框架可能不同,所以写出来也没有用,如果用ace框架的倒是可以私信我要代码,我这里只展示一下效果图


在Java后台中

  首先我们如何在后台获取到你上传的Excel的文件类型和名称呢?在你的action中定义这个几个变量,我是在公司封装的框架下的某个层。但道理一样,如下:

    private File     uploadexcel;                    //文件(和jsp中的名字保持一致)
    private String uploadexcelFileName;            //文件名称
    private String uploadexcelContentType;        //文件类型

值得注意的是,在你的jsp中<input >标签中文件的名字必须是uploadexcel,例如<input id="importFile" type="file" data-options="required:false"
                        name="dto.uploadexcel" />

然后是在后台的上传的方法,我这里会贴出与代码中相关的方法,但不会把封装的公共类拿出来,望见谅。

public void uploadexcle(BaseAbstractDto basedto) throws Exception{        
        MemberDto dto=super.getExactlyDto(basedto);     //公司封装的参数传输层,按你们的框架自行修改  
        File uploadexcle =dto.getUploadexcel();                //获取上传的Excel表格文件
        List<Member> list = new ArrayList<Member>();
            String filetype =UploadFileUtil.getFileExp(dto.getUploadexcelFileName());    //这个方法我会在名为方法一的下面贴出来
            Workbook workbook=null;                                    //POI中的
            if(filetype.equals(".xls")||filetype.equals(".xlsx")){
                if (uploadexcle!=null&&uploadexcle.length()>0) {                                        
                    workbook=UploadFileUtil.getWorkbook(uploadexcle);                //这个方法我会在名为方法二的下面贴出来           
                Sheet sheet=UploadFileUtil.deleteNullRow(workbook.getSheetAt(0));   //这个方法我会在名为方法三的下面贴出来
                for (int numRows = 1; numRows <= sheet.getLastRowNum(); numRows++) {
                    Row row = sheet.getRow(numRows);  //poi中的
                    Member member = new Member();       //我自己的实体类
                    for (int CellNum = 0; CellNum < row.getLastCellNum(); CellNum++) {
                        
                        Cell cell = row.getCell(CellNum);//poi中的
                        if(cell!=null){
                            cell.setCellType(Cell.CELL_TYPE_STRING);
                        }
                            switch (CellNum){
                            case 0://姓名                  //你Excel中的第一列,这里说一下哈,一定和你Excel中的顺序保持一致,下面我要是记起来再回啰嗦一句的
                                if(cell==null){
                                    member.setName("");
                                }else{
                                    member.setName(cell.toString());        
                                }
                                break;
                            case 1://名族
                                if(cell==null){
                                    member.setNation("");
                                }else{
                                    member.setNation(cell.toString());
                                }
                                break;
                            case 2://身份证号码
                                if(cell==null){
                                    member.setIdNumber("");
                                }else{
                                    member.setIdNumber(cell.toString());
                                    member.setUserName("a"+cell.toString());
                                }
                                break;
                            case 3://电话号码
                                if(cell==null){
                                    member.setPhoneNum("");
                                }else{                                    
                                    member.setPhoneNum(cell.toString());
                                }
                                break;
                            //邮箱
                            case 4:
                                if(cell==null){
                                    member.setEmail("");
                                }else{
                                    member.setEmail(cell.toString());
                                }
                                break;
                            //性别代码
                            case 5:
                                
                                if(cell==null){
                                    member.setGenderCode("");
                                
                                }else{
                                    member.setGenderCode(cell.toString());

                                }
                                break;
                            //性别
                            case 6:
                                
                                if(cell==null){
                                    member.setGenderName("");
                                }else{
                                    member.setGenderName(cell.toString());
                                }
                                break;
                            //出生日期
                    /*        case 10:
                                if(cell==null){
                                    member.setBirthday(null);
                                }else{
                                    SimpleDateFormat sdf=new SimpleDateFormat("dd-MM -yyyy");
                                    String birthTime=cell.toString();
                                    if(!StringUtils.isNullOrEmpty(birthTime)){
                                        
                                        Date date=sdf.parse(birthTime);
                                        member.setBirthday(date);
                                        //staffRegRequest.setBirthTime(date);
                                    }else{
                                        member.setBirthday(null);
                                        //staffRegRequest.setBirthTime(null);
                                    }
                                }
                                break;*/
                            //邮编
                            case 7:
                                if(cell==null){
                                    member.setZipCode("");
                                    //staffEmpoymentResponse.setJobTitleCode("");

                                }else{
                                    member.setZipCode(cell.toString());
                                }
                                break;
                            //现住址
                            case 8:
                                if(cell==null){
                                    member.setAddress("");
                                }else{
                                    member.setAddress(cell.toString());
                                }
                                break;
            
                    }
                            
                    }
                member.setStatus("1");       //设置一些固定属性的值
                member.setAuditStatus("1");          //设置一些固定属性的值
                

                list.add(member);   //把实体类中设置的值封装到实体中后在放到list集合中
                }

                dto.setMembers(list);
                saveMemberList(dto);  //这里你们估计要变一下了,这是往数据库保存这个实体的方法,我里面还有调别的接口,就不把这个方法铺出来了,你们就直接把这个当做save方法存到数据库中就行。方法参数可以直接是实体类,不用我这里的dto。另外service和dao层我也不铺了,因为关系不大

                }else{
                    dto.setOpFlg("-1");
                    dto.setMsg("上传文件为空,请重新上传");
                }
                
            }else {
                dto.setOpFlg("-1");
                dto.setMsg("上传文件格式不正确,请选择excel格式文件上传");
            }
            
            
        
    }

这里做个简要说明啊,重要的代码我再后面做了批注。我觉得说的够啰嗦了,而且关键也说清楚了哈。没意见的往下看,有意见的可以关了。嘻嘻嘻嘻,哈哈哈

方法一

public static String getFileExp(String fileName) throws Exception{
        int pos = fileName.lastIndexOf(".");
        return fileName.substring(pos);
    }

方法二

    public static Workbook getWorkbook(File file) throws IOException, InvalidFormatException{
        FileInputStream inputStream=new FileInputStream(file);

        Workbook workbook=WorkbookFactory.create(inputStream);

        return workbook;
    }

方法三

    public static Sheet deleteNullRow(Sheet sheet){
        if(sheet!=null){
            Row row = null;
            Cell cell = null;
            for (int numRows = 1; numRows <= sheet.getLastRowNum(); numRows++){
                row = sheet.getRow(numRows);
                boolean nullRowMark = true;
                //每一行的前三列如果都为空则删掉这行
                for(int numCells = 0; numCells<=2; numCells++){
                    cell = row.getCell(numCells);
                    nullRowMark = nullRowMark&&(cell==null||cell.getCellType()==HSSFCell.CELL_TYPE_BLANK);
                }
                //删除空行
                if(nullRowMark){
                    int ls=sheet.getLastRowNum();
                    sheet.shiftRows(numRows, numRows, ls-numRows);
                    numRows = numRows-1;
                    Row nullrow=sheet.getRow(ls);  
                    sheet.removeRow(nullrow);
                }
            }
        }
        return sheet;
    }

那么至此,这不武功秘籍就差不多完结了。祝各位小伙伴早日修行得道啊。觉得有用就支持一下下下下啊

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用 Apache POI 库来解析 Excel 数据,并使用 JDBC 将数据导入数据库。是一个简单的 Java 代码示: 首先,确保你已经将 POI 和 JDBC 相关的 JAR 文件添加到你的项目。 ```java import java.FileInputStream; import java.sql; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelImporter { public static void main(String[] args) { String excelFilePath = "path/to/your/excel/file.xlsx"; try (FileInputStream inputStream = new FileInputStream(excelFilePath); Workbook workbook = new XSSFWorkbook(inputStream)) { Sheet sheet = workbook.getSheetAt(0); int rowCount = 0; for (Row row : sheet) { if (rowCount == 0) { rowCount++; continue; } String column1 = row.getCell(0).getStringCellValue(); int column2 = (int) row.getCell(1).getNumericCellValue(); // 获取其他列的数据 // 将数据插入数据库 insertToDatabase(column1, column2); rowCount++; } System.out.println("数据导入成功!"); } catch (Exception e) { e.printStackTrace(); } } private static void insertToDatabase(String column1, int column2) { String url = "jdbc:mysql://localhost:3306/your_database"; String username = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(url, username, password)) { String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, column1); statement.setInt(2, column2); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的示例,你需要将 `path/to/your/excel/file.xlsx` 替换为你实际的 Excel 文件路径。此外,你还需要根据你的数据库设置更新 `url`、`username`、`password`、`your_database` 和 `your_table`。 这个示例假设 Excel 的第一行为标题,从第二行开始是数据。你可以根据需要调整代码以适应不同的格结构。同时,你可以根据你的数据结构调整 `insertToDatabase()` 方法的 SQL 语句和参数设置。 请确保你已正确引入所需的库和驱动程序,并在执行代码之前设置好数据库连接信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值