2008-04-15

java读取excel文件

关键字: java

因为公司工程的需要,所以学习了一下java读取excel的方法,开始以为会比较复杂。写完了也觉得没什么。还是归功于java的强大啊!(后来我从网上查到js也可以读取excel,不过他的那个ActiveXObject对象好像在火狐上面不支持。)今天把代码写出来,希望大家多多指点。我可以多多改进。个人觉得好像excel读取没有一个通用的解法。因为我们用hibernate框架,所以我的思路是把一行读取为一个对象,有几行就有几个对象,然后将其插入数据库。读取的excel只能为固定的格式。

 

    /*

     * 导入excel信息

     */

    public boolean attendanceAdd(AttendanceInfoRecordAddForm form)

    {

        String filePath = form.getFilePath();//从struts的form中提取出文件路径

        int rowCount; // excel的行数

        int colCount; // excel的列数

        Workbook rwb = null;

        try

        {

            InputStream is = new FileInputStream(filePath);

            rwb = Workbook.getWorkbook(is);

        }

        catch (FileNotFoundException e)

        {

            System.out.println("文件路径错误!");

            return false;

        }

        catch (BiffException e)

        {

            e.printStackTrace();

            return false;

        }

        catch (IOException e)

        {

            e.printStackTrace();

            return false;

        }

        Sheet rs = rwb.getSheet(0);//得到第一张工作表

        rowCount = rs.getRows();//行数

        colCount = rs.getColumns();//列数

        List excelArray = new ArrayList();//对象数组

        loop1: for (int i = 1; i < rowCount; i++)

        {

            HzOaEhrAttendanceInfo excel = new HzOaEhrAttendanceInfo();//hibernate对象

            for (int j = 0; j < colCount; j++)

            {

                Cell cell = rs.getCell(j, i);//得到单元格

                String content = cell.getContents();//得到单元格内容转换为字符串

                if (content == "")//如果一个单元格为空,则该行不形成对象

                    continue loop1;

                switch (j)

                {

                case 0:

                    excel.setInfoOrder(Integer.valueOf(content));//转换为Integer对象

                    break;

                case 1:

                    excel.setName(content);

                    break;

                case 2:

                    excel.setThisDate(UTDate.getDate(content));//UTDate为一个工具类,将字符串转换为date类型

                    break;

                case 3:

                    excel.setThisTime(content);

                    break;

                case 4:

                    excel.setOnDutyTime(content);

                    break;

                case 5:

                    excel.setOffDutyTime(content);

                    break;

                case 6:

                    excel.setMyOnDutyTime(content);

                    break;

                case 7:

                    excel.setMyOffDutyTime(content);

                    break;

                case 8:

                    excel.setShouldNumber(Integer.valueOf(content));

                    break;

                case 9:

                    excel.setTrueNumber(Integer.valueOf(content));

                    break;

                case 10:

                    excel.setLateTime(content);

                    break;

                case 11:

                    excel.setLeaveTime(content);

                    break;

                case 12:

                    excel.setAbsenteeism(Integer.valueOf(content));

                    break;

                case 13:

                    excel.setOverTime(content);

                    break;

                default:

                    break;

                }

            }

            excelArray.add(excel);//将对象加入数组

        }

        //在这里可以把对象数组插入到数据库

        return true;

    }

 可能有点麻烦,水平有限,那位有好的解决办法,还望不吝赐教。由于客户是要求读入规定的excel文档,所以后期改进了一下,主要是加了一些判断是不是规定的文档。在此就不再写出来了。

评论
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

terryang
搜索本博客
最近加入圈子
存档
最新评论