首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>java教程>资讯:Java操作excel

Java操作excel

www.jz123.cn  2009-12-31   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  最近公司要求把excel的数据导入到数据库中去。当时没怎么想就直接用java.sql包下的类把数据读出来然后拼装成sql语句,顺利完成了任务。后来用第三方插件实现了读,写,修改excel文件。 现在拿出来就和大家分享。希望能够在某种程度上帮大家解决一些实际问题。

  第三方组件可以在此下载:http://nexcel.sourceforge.net/

  首先我们先用Jdbc-Odbc桥连接excel文件:

  先配置好数据源(我的操作系统是Windows 7英文版,可能和大家的不一样):管理工具(Administrative Tools)->数据源(Data Source ODBC)->添加(Add),选择 Microsoft do Driver Excel->完成(Finish)->填写数据源名(Data Source Name)->选择工作薄(Select Workbook)找到你的excel文件就可以了。这里不多说了,大家可以查找相关资料。下面是我的测试代码:

public static void readXLSByJdbcOdbc() {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
       
        try {
            //这里使用JdbcOdbc桥
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //new为数据源名
            conn = DriverManager.getConnection("jdbc:odbc:test");
            //表明要用[$]括起来,data对应的是excel中sheet名
            ps = conn.prepareStatement("select * from [Person$]");
            rs = ps.executeQuery();
            while(rs.next()) {
                System.out.println(rs.getLong("uid") + "t" + rs.getString("用户名") + "t" + rs.getString("pwd"));
            }
            rs.close();
            ps.close();
            conn.close();   
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

  说明一下,用这种方式只能读取excel中的数据,而且不字段的数据类型不易控制。

  下面是运用第三方组件读写修改excel文件的测试代码,在此我就不详述了,代码中都有注释很容易理解:

package com.westdream.test;

import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class JavaAndExcel {

    public JavaAndExcel() {
    }

    /**
     *@author WESTDREAM
     */
    public static void main(String[] args) {
        updateXLSUsingJXL();
    }

  
    //读取excel文件中的数据
    public static void readXLSByJXL() {
        try {
            //读取已有excel文件
            Workbook workbook = Workbook.getWorkbook(new File("D:\test.xls"));
            //得到名为Person的sheet
            Sheet sheet = workbook.getSheet("Person");
            //循环输出excel中的数据
            for(int row = 0; row < 3; row++) {
                for(int col = 0; col < 3; col++) {
                    System.out.print(sheet.getCell(col, row).getContents() + "t");
                }
                System.out.println();
            }
           
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   
    //将数据写入excel文件
    public static void writeXLSUsingJXL() {
        WritableWorkbook workBook = null;
        try {
            //创建workbook对象
            workBook = Workbook.createWorkbook(new File("E:\student.xls"));
            //创建一个名为Student的sheet
            WritableSheet sheet = workBook.createSheet("Student", 0);
            //给sheet添加一系列的cell,注意cell的坐标是从(0,0)开始的,其代表着excel中第一行,第一列的方格
            //这里主要是在sheet中加入一行字段
            sheet.addCell(new Label(0,0, "student_id"));
            sheet.addCell(new Label(0,1, "student_name"));
            sheet.addCell(new Label(0,2,"student_age"));
           
            //下面添加两行数据
            sheet.addCell(new Label(1,0, "0000001"));
            sheet.addCell(new Label(1,1, "张三"));
            sheet.addCell(new Label(1,2, "20"));
           
            sheet.addCell(new Label(2,0, "0000002"));
            sheet.addCell(new Label(2,1, "李四"));
            sheet.addCell(new Label(2,2, "21"));
            workBook.write();
            workBook.close();
            System.out.println("文件写入成功");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (RowsExceededException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
    }
   
    //修改excel文件
    public static void updateXLSUsingJXL() {
        Workbook workBook = null;
        WritableWorkbook copy = null;
        WritableSheet sheet = null;
       
        try {
            System.out.println("开始修改文件...");
            //得到workbook
            workBook = Workbook.getWorkbook(new File("E:\student.xls"));
            //复制workbook并保存到student_copy.xls
            copy = Workbook.createWorkbook(new File("E:\student_copy.xls"), workBook);
            //得到Student
            sheet = copy.getSheet("Student");
            //拿到指定的cell(这里是第2行,第2列的数据)
            WritableCell cell = sheet.getWritableCell(1, 1);
            //修改数据
            if (cell.getType() == CellType.LABEL) {
              Label l = (Label) cell;
              l.setString("王五");
            }
           
            copy.write();
            copy.close();
            System.out.println("文件修改成功,并已保存至student_copy.xls");
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
    }
}

  总结一下,如果用JDBC-ODBC桥的话只能读取excel文件中的数据,而且其数据类型也不太好控制,jxl 作为第三组件比较容易上手,而且功能强大。能够对excel文件进行读写修改等操作。如果大家仔细观察其编码过程有点像awt编程,而实质上jxl也只是对文件流操作的封装。建议大家先学好j2se基础知识。顺便提一下,java jdbc还可以操作txt文件,这里我不举例了。

  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kings988/archive/2009/12/29/5099589.aspx


上一篇:java 文件读写_FileReader 下一篇:java 文件读写_FileInputStream_File

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图