国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java操作excel

2019-11-17 03:54:52
字體:
供稿:網(wǎng)友
最近公司要求把Excel的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中去。當(dāng)時(shí)沒怎么想就直接用java.sql包下的類把數(shù)據(jù)讀出來然后拼裝成sql語句,順利完成了任務(wù)。后來用第三方插件實(shí)現(xiàn)了讀,寫,修改excel文件。 現(xiàn)在拿出來就和大家分享。希望能夠在某種程度上幫大家解決一些實(shí)際問題。

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

首先我們先用Jdbc-Odbc橋連接excel文件:

先配置好數(shù)據(jù)源(我的操作系統(tǒng)Windows 7英文版,可能和大家的不一樣):管理工具(Administrative Tools)->數(shù)據(jù)源(Data Source ODBC)->添加(Add),選擇 Microsoft do Driver Excel->完成(Finish)->填寫數(shù)據(jù)源名(Data Source Name)->選擇工作薄(Select Workbook)找到你的excel文件就可以了。這里不多說了,大家可以查找相關(guān)資料。下面是我的測試代碼:

public static void readXLSByJdbcOdbc() {
        Connection conn = null;
        PReparedStatement ps = null;
        ResultSet rs = null;
        
        try {
            //這里使用JdbcOdbc橋
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //new為數(shù)據(jù)源名
            conn = DriverManager.getConnection("jdbc:odbc:test");
            //表明要用[$]括起來,data對應(yīng)的是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中的數(shù)據(jù),而且不字段的數(shù)據(jù)類型不易控制。

下面是運(yùn)用第三方組件讀寫修改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文件中的數(shù)據(jù)
    public static void readXLSByJXL() {
        try {
            //讀取已有excel文件
            Workbook workbook = Workbook.getWorkbook(new File("D://test.xls"));
            //得到名為Person的sheet
            Sheet sheet = workbook.getSheet("Person");
            //循環(huán)輸出excel中的數(shù)據(jù)
            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();
        }
    }
    
    //將數(shù)據(jù)寫入excel文件
    public static void writeXLSUsingJXL() {
        WritableWorkbook workBook = null;
        try {
            //創(chuàng)建workbook對象
            workBook = Workbook.createWorkbook(new File("E://student.xls"));
            //創(chuàng)建一個(gè)名為Student的sheet
            WritableSheet sheet = workBook.createSheet("Student", 0);
            //給sheet添加一系列的cell,注意cell的坐標(biāo)是從(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"));
            
            //下面添加兩行數(shù)據(jù)
            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"));
            //復(fù)制workbook并保存到student_copy.xls
            copy = Workbook.createWorkbook(new File("E://student_copy.xls"), workBook);
            //得到Student
            sheet = copy.getSheet("Student");
            //拿到指定的cell(這里是第2行,第2列的數(shù)據(jù))
            WritableCell cell = sheet.getWritableCell(1, 1);
            //修改數(shù)據(jù)
            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();
        }
    }
}

總結(jié)一下,如果用JDBC-ODBC橋的話只能讀取excel文件中的數(shù)據(jù),而且其數(shù)據(jù)類型也不太好控制,jxl 作為第三組件比較容易上手,而且功能強(qiáng)大。能夠?qū)xcel文件進(jìn)行讀寫修改等操作。如果大家仔細(xì)觀察其編碼過程有點(diǎn)像awt編程,而實(shí)質(zhì)上jxl也只是對文件流操作的封裝。建議大家先學(xué)好j2se基礎(chǔ)知識。順便提一下,java jdbc還可以操作txt文件,這里我不舉例了。



本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/kings988/archive/2009/12/29/5099589.aspx
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泾川县| 民权县| 秀山| 泽库县| 曲周县| 新龙县| 田阳县| 清远市| 巢湖市| 成武县| 云霄县| 金寨县| 娱乐| 葵青区| 宁陕县| 霞浦县| 定兴县| 益阳市| 安岳县| 二连浩特市| 南丰县| 四川省| 隆子县| 寿光市| 太保市| 乡宁县| 宁强县| 微博| 长兴县| 鄂州市| 绍兴市| 石狮市| 克山县| 辽阳市| 历史| 临邑县| 泸西县| 廉江市| 内乡县| 思南县| 江孜县|