WEB开发网
开发学院WEB开发Jsp Java操作excel 阅读

Java操作excel

 2009-12-30 21:14:40 来源:WEB开发网   
核心提示:最近公司要求把Excel的数据导入到数据库中去,当时没怎么想就直接用java.sql包下的类把数据读出来然后拼装成sql语句,Java操作excel,顺利完成了任务,后来用第三方插件实现了读,java jdbc还可以操作txt文件,这里我不举例了,写,修改excel文件
最近公司要求把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

Tags:Java 操作 excel

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接