1. 程式人生 > >Java 使用jxl對Excel進行操作

Java 使用jxl對Excel進行操作

一個作業需要對excel資料進行離散化,想起好像可以用java對excel資料進行處理,因此學習使用,

在網上也有很多人對這個內容解釋,但是還是覺得有些雜,就自己整理了一些別人寫的內容。

 

/************************************************正文啦*****************************************************/

在處理excel資料時候有兩種方式:
jxl:一種是首先依據excel中的資料建立一個相應的實體類,將每一條資料視為一個物件,然後將對excel中的資料處理轉成對物件的處理。

       (支援.xls檔案,excel2003版,好像最最新的jxl.jar可以支援2007版excel)
poi

:一種是將每一條資料視為一個集合或者陣列,然後再將整個資料視為一個整體。(支援excel.xls和excel.xlsx,  還支援word檔案)

注:由於我自己寫的是用jxl,所以主要講jxl的使用

jxl.jar是通過java操作excel表格的工具類庫;

下載地址:百度網盤連結:https://pan.baidu.com/s/1ceIT6oDRDGFott7b7u0Jgw  提取碼:ed57

搭建環境
將下載後的檔案解包,得到JXL.JAR,放入classpath,安裝就完成了。如果包不能正常的載入,可以把你下載好的JXL.JAR包放入D:/JAVA/jre/lib/ext中

如果想在

Eclipse的一個專案中匯入JXL.JAR,在該專案上右鍵,點選“屬性”, 類別那裡選擇”庫“,點選"新增外部jar”在彈出的檔案選擇對話方塊選擇你的jxl.jar


/******************************************************************************************************/

jxl.jar完美體現了面向物件的思想.簡單列舉幾個常用類和介面

Workbook--對應一個excel檔案

Sheet--對應一個sheet工作簿

Cell--對應一個cell單元格

/************************************建立一個檔案***************************************************/

擬生成一個名為 “測試資料.xls”的Excel檔案,其中第一個工作表被命名為“第一頁”,大致效果如下

 

package test;

import java.io.*;
import jxl.*;
import jxl.write.*;
public class ExcelOperater
{
public static void main(String args[]){
    try{
//開啟檔案
        WritableWorkbook book= Workbook.createWorkbook(new File("測試.xls"));
//生成名為“第一頁”的工作表,引數0表示這是第一頁
        WritableSheet sheet=book.createSheet("第一頁",0);
//在Label物件的構造子中指名單元格位置是第一列第一行(0,0)
//以及單元格內容為test
        Label label=new Label(0,0,"test");
//將定義好的單元格新增到工作表中
        sheet.addCell(label);
/*生成一個儲存數字的單元格
必須使用Number的完整包路徑,否則有語法歧義
單元格位置是第二列,第一行,值為789.123*/
        jxl.write.Number number = new jxl.write.Number(1,0,789.123);
        sheet.addCell(number);
//寫入資料並關閉檔案
        book.write();
        book.close();
        }catch(Exception e)
    {
            System.out.println(e);
    }
    }
}

 

結果如圖:

/*******************************************************讀取檔案*************************************************************/

package test;

import java.io.*;
import jxl.*;
public class ReadXls{
    public static void main(String args[]){
        try{
            Workbook book=Workbook.getWorkbook(new File("測試.xls"));
//獲得第一個工作表物件
            Sheet sheet=book.getSheet(0);
//得到第一列第一行的單元格
            Cell cell1=sheet.getCell(0,0);
            String result=cell1.getContents();
            System.out.println(result);
            book.close();
        }catch(Exception e)
        {
            System.out.println(e);
        }
    }
}

結果如圖:

 

/*****************************************************在已經生成的Excel檔案中新增一個工作表***********************************************/

package test;

import java.io.*;
import jxl.*;
import jxl.write.*;

public class ModifyXls{
    public static void main(String args[]){
        try{
//Excel獲得檔案
            Workbook wb=Workbook.getWorkbook(new File("測試.xls"));
//開啟一個檔案的副本,並且指定資料寫回到原檔案
            WritableWorkbook book=Workbook.createWorkbook(new File("測試.xls"),wb);
//新增一個工作表
            WritableSheet sheet=book.createSheet("第二頁",1);
            sheet.addCell(new Label(0,5,"第二頁的測試資料"));
            book.write();
            book.close();
        }catch(Exception e)
        {
            System.out.println(e);
        }
    }
}

結果如圖:

 

/********************************************************************修改檔案內容**********************************************/

 

 

package Shopping;

import java.io.File;
import java.io.FileInputStream;

import jxl.Cell;
import jxl.CellType;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class test{

    public static void main(String args[]){{
        try{
            //找到要修改的表
             FileInputStream is = new FileInputStream("購物籃資料.xls");
             Workbook wb=Workbook.getWorkbook(is);
             
             Sheet st =wb.getSheet(0);//獲取第一張sheet表
             int stColumns = st.getColumns();//獲取sheet表中所包含的的總列數
             int stRows = st.getRows();//獲取sheet表總所包含的總行數
             
             //新建要寫入資料的表,並指定路徑
            // jxl.Workbook 物件是隻讀的,所以如果要修改Excel,需要建立一個可寫的副本,副本指向原Excel檔案
             WritableWorkbook wbook  = Workbook.createWorkbook(new File("副本.xls"),wb);
             WritableSheet wSheet = wbook.getSheet(0);
             WritableCell wCell = null;
            
        //處理birth——year
             for(int i=1; i<stRows; i++){
                 wCell = wSheet.getWritableCell(8,i);
                 int cell8 = (int)((NumberCell)wSheet.getCell(8,i)).getValue();
                 Label replace = null;
                 
                 if(cell8<1980){
                      replace = new Label(8,i,"老人家");//輸入內容【列,行,值】
                 }
                 else if(cell8<1985){
                      replace = new Label(8,i,"80後"); 
                 }
                 else if(cell8<1990){
                     replace = new Label(8,i,"85後");
                 }
                 else if(cell8<1995){
                     replace = new Label(8,i,"90後");
                 }
                 else if(cell8<2000){
                     replace = new Label(8,i,"95後");
                 }
                 else{
                     replace = new Label(8,i,"00後");
                     
                 }
                
                wSheet.addCell(replace);
                 wCell = wSheet.getWritableCell(8, i);
             }
             
            
                 wbook.write();
                wbook.close();
                        
                    }catch(Exception e)
                    {
                        System.out.println(e);
                    }    
    }
    }
}

 

上面的內容前三個是從別人的程式碼裡摘過來的。初學比較容易理解,第三個就是我自己的作業了。

我的資料可以下載:連結:https://pan.baidu.com/s/1iX3Sr0Vppqn4bvhKBsbG0w 提取碼:jdog

有些內容我寫的不是很詳細,推薦一下我當時看的內容和poi的講解

1:https://www.aliyun.com/jiaocheng/251324.html

2:https://blog.csdn.net/hjiacheng/article/details/53573679

3:https://blog.csdn.net/qq_30401659/article/details/50974575

4:https://www.cnblogs.com/mingforyou/p/3282922.html

如果有什麼錯的地方,請提醒我改正,謝謝!