1. 程式人生 > >jxl 讀寫Excel例項

jxl 讀寫Excel例項

        本篇文章主要講的是jxl 操作Excel的三個簡單的例項,一個是讀取Excel表格資料,一個是 寫一個新的Excel表格,最後是更新現有的Excel表格。在開始全面學習 jxl 之前,我們先看幾個例子,讓大家大概整體的瞭解一下jxl 是怎麼操作Excel表的,以使之後更有興趣,更好地學習jxl。

        讀Excel表格資料:

import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 *
 * @author yrs
 */
public class TRead {
    
    public static void read (Workbook book) {
        int rows;
        //得到Excel中工作表數
        int sheetNumber = book.getNumberOfSheets();
        //得到每個表的名稱
        String [] sheetNameList = book.getSheetNames();
        //得到每個工作表
        Sheet [] sheetList = book.getSheets();
        
        //遍歷每個單元格,得到單元格的內容,並輸出。注意得到單元格的內容是以字串形式返回的。
        for(int i = 0;i < sheetNumber;i++) {
            System.out.println("############## " + sheetNameList[i] + " ##############");
            //得到該工作表中資料的行數
            rows = sheetList[i].getRows();
            for(int j = 0;j < rows;j++) {
                //得到每一行的單元格
                Cell [] cellList = sheetList[i].getRow(j);
                for (Cell cell : cellList) {
                    System.out.print(cell.getContents() + "  ");
                }
                System.out.println();
            }          
        }      
    }
    public static void main(String [] args) throws IOException, BiffException  {
        try {
            //檔案D://JEtest//read.xls 要存在,並且含有資料。
            File file = new File("D://JEtest//read.xls");
            //得到工作簿
            Workbook book = Workbook.getWorkbook(file); 
            TRead.read(book);
            book.close();            
        }catch (IOException | BiffException e) {
            System.out.println("Exception:  " + e);
            throw e;
        }
    }  
}
      

        讀Excel表格的步奏是:工作簿--》工作表--》單元格。 當然有時候對資料經行處理要知道資料的格式,這個要在取得單元格的時候對它進行資料型別的判斷,然後再轉化成相應的型別,從而得到原資料型別的值。關於資料型別會在之後的文章中介紹。

        生成一個新的Excel表格,並向裡面寫資料:

import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.Boolean;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.NumberFormat;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;


/**
 *
 * @author yrs
 */
public class TWrite {
    
    public static void  write(WritableWorkbook wb) throws WriteException {
        WritableSheet wSheet = wb.createSheet("sheet1", 0);
        
        //新增Label物件 
        Label labelC = new Label(0, 0, "Label cell"); 
        wSheet.addCell(labelC);
        
        //新增Number物件 
        Number numberC = new Number(0, 1, 3.1415926); 
        wSheet.addCell(numberC); 
        
        // 3.新增Boolean物件 
        Boolean booleanC = new Boolean(0, 2, true); 
        wSheet.addCell(booleanC); 
        
        // 4.新增DateTime物件 
        DateTime dateTimeC = new DateTime(0, 3, new java.util.Date()); 
        wSheet.addCell(dateTimeC); 
        
        // 新增帶有字型Formatting的物件 
        WritableFont wFont = new WritableFont( 
            WritableFont.TIMES, 18, WritableFont.BOLD, true); 
        WritableCellFormat wCellFormatC = new WritableCellFormat(wFont); 
        Label labelCF = new Label(1, 0, "Label Cell", wCellFormatC); 
        wSheet.addCell(labelCF); 
        
         // 新增帶有formatting的Number物件 
        NumberFormat nFormat = new NumberFormat("#.##"); 
        WritableCellFormat wCellFormatN = new WritableCellFormat(nFormat);
        Number numberNF = new Number(1, 1, 3.1415926, wCellFormatN); 
        wSheet.addCell(numberNF); 
        
        // 新增帶有formatting的DateFormat物件 
        DateFormat dFormat = new DateFormat( 
          "yyyy MM dd hh:mm:ss"); 
        WritableCellFormat wCellFormatD = new WritableCellFormat(dFormat); 
        DateTime dateTimeDF = new DateTime(1, 3, new java.util.Date(), wCellFormatD); 
        wSheet.addCell(dateTimeDF);
        
    }
    public static void main(String [] args) throws IOException, BiffException, WriteException  {
        try {
            
            //檔案D://JEtest//read.xls 不存在,若存在資料將會丟失
            File file = new File("D://JEtest//write.xls");
            //建立一個新的可寫工作簿
            WritableWorkbook wb = Workbook.createWorkbook(file); 
            TWrite.write(wb);
            
            // 寫入Exel工作表 
            wb.write();
            // 關閉Excel工作薄物件 
            wb.close();            
        }catch (IOException | WriteException e) {
            System.out.println("Exception:  " + e);
            throw e;
        }
    }  
}

        生成一個新的Excel表格,並向裡面寫入資料的順序也是 工作簿 -- 工作表 -- 單元格。但是寫入資料的順序是反過來的,先向單元格中新增資料,然後新增到工作表上,最後寫入工作簿中。這裡需要注意的是,以 WritableWorkbook wb = Workbook.createWorkbook(file);  方式建立工作簿是建立了一個新的工作簿,如果file檔案原來存在,那麼它的資料將會失去,下一個例子將會講解怎樣更新一個Excel表格。 還有就是在工作簿關閉之前要把資料寫入工作簿中,也就是 wb.write();。

        更新Excel表格資料:

import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 *
 * @author yrs
 */
public class TUpdate {
    
    public static void update (WritableWorkbook wb) throws WriteException {
        WritableSheet sheet = wb.createSheet("第二頁", 1);
        sheet.addCell(new Label(0,0,"第二頁更新資料"));
        
    }
    
    public static void main(String [] args) throws IOException, BiffException, WriteException  {
        try {
            //檔案D://JEtest//read.xls 要存在,並且含有資料。
            File file = new File("D://JEtest//update.xls");
            //得到工作簿
            Workbook book = Workbook.getWorkbook(file); 
            //建立一個可寫工作簿
            WritableWorkbook wb = Workbook.createWorkbook(file, book);
            TUpdate.update(wb);
            wb.write();
            wb.close();
            book.close();            
        }catch (IOException | BiffException | WriteException e) {
            System.out.println("Exception:  " + e);
            throw e;
        }
    }  
}

       這裡需要注意的是,建立可寫工作簿的方式,你也可以把 file 檔案換成其他的,這樣會實現複製的效果。可以自己實現一下。

      好了,有了這些例子大家是不是更有興趣學習jxl了,那就讓我們一起來學吧。