jxl 操作Excel表格之Workbook

        本篇文章主要讲jxl 中非常重要的一个抽象类Workbook,该类是一切操作Excel表格的开始。可以通过该类得到工作簿,也可以创建一个新的可写工作簿。下面就让我们一起来看看怎样使用该类。

       

       得到已存在Excel表格的工作簿  Workbook.getWorkbook:

import java.io.*;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;

public class Tgetworkbook {
    public static void main(String args[])  {
        try {
            //文件已经存在,得到工作簿
            File file = new File("D://JEtest/测试.xls");
            Workbook book1 = Workbook.getWorkbook(file);
            System.out.println("sheet's number: " + book1.getNumberOfSheets());
            book1.close();
            
            //WorkbookSettings 是使应用程序可以使用各种高级工作簿属性设置,若不使用则相关属性会是默认值
            WorkbookSettings ws = new WorkbookSettings();
            Workbook book2 = Workbook.getWorkbook(file,ws);
            System.out.println("sheet's number: " + book2.getNumberOfSheets());
            book2.close();
            
            //以输入流的方式得到工作簿
            InputStream is = new FileInputStream(file);
            Workbook book3 = Workbook.getWorkbook(is);
            System.out.println("sheet's number: " + book3.getNumberOfSheets());
            book3.close();
            is.close();
            
            //输入流和WorkbookSettings 相结合
            InputStream is2 = new FileInputStream(file);
            Workbook book4 = Workbook.getWorkbook(is2, ws);
            System.out.println("sheet's number: " + book4.getNumberOfSheets());
            book4.close();
            is2.close();
            
            
        }catch (IOException | BiffException e) {
            System.out.println("Exception: " + e);
        }
    }
    
}

        以这种方式得到的工作簿的前题是Excel表格已存在。其中有一个WorkbookSettings 类,该类是设置工作簿相关的高级属性,包括工作簿的字符集、字符编码等属性,有一个方法   public void setGCDisabled (boolean disabled)   在Web相关工作时,可能回影响效率,需要把垃圾回收属性设置为禁止,true 为禁止垃圾回收。有兴趣可以看看API 了解更多设置。


       创建可写工作簿 Workbook.createWorkbook :

import java.io.*;
import jxl.*;
import jxl.read.biff.BiffException;
import jxl.write.*;

public class TCreateWorkbook2 {
    public static void main(String args[]) throws IOException, WriteException, BiffException {
        try {
            File file = new File("D://JEtest/测试1.xls");
            //创建一个可写的工作簿
            //若文件 测试1.xls 存在,则以这种方式创建,原文件的数据将会失去。
            WritableWorkbook wb1 = Workbook.createWorkbook(file);           
            System.out.println("sheet numbers: " + wb1.getNumberOfSheets());
            WritableSheet wsheet1 = wb1.createSheet("sheet1", 0);
       
            System.out.println("sheet numbers: " + wb1.getNumberOfSheets());
            //注意一定要用write()函数写回去
            wb1.write();
            wb1.close();
            
                      
            //文件存在,更新源文件,或者复制源文件到另一个文件中,在进行修改。
            //测试2.xls 文件是存在的。
            //得到的wb2 是对book 的复制
            File file2 = new File("D://JEtest/测试2.xls");
            //更新 测试2.xls
            Workbook book = Workbook.getWorkbook(file2);
            WritableWorkbook wb2 = Workbook.createWorkbook(file2, book);
            
            //这种方式是把file2 的数据复制到file3里
            //File file3 = new File("D://JEtest/测试3.xls");
            //WritableWorkbook wb3 = Workbook.createWorkbook(file3, book);
            
            System.out.println("sheet numbers: " + wb2.getNumberOfSheets());
            //注意一定要用write()函数写回去
            wb2.write();      
            wb2.close();
               
            
            
            //创建带有WorkbookSettings 高级设置的可写工作簿
            File file4 = new File("D://JEtest/测试4.xls");
            
            WorkbookSettings ws = new WorkbookSettings();     
            WritableWorkbook wb4 = Workbook.createWorkbook(file4, ws);
            WritableSheet wsheet4 = wb4.createSheet("sheet2", 0);
            System.out.println("sheet2 numbers: " + wb4.getNumberOfSheets());
            wb4.write();
            wb4.close();
            
            
            //public static WritableWorkbook createWorkbook(java.io.File file,Workbook in,WorkbookSettings ws)
            WritableWorkbook wb5 = Workbook.createWorkbook(file2, book, ws);
            wb5.write();
            wb5.close();        
            
        }catch (IOException | WriteException | BiffException e) {
            System.out.println("Exception: " + e);
            throw e;
        }
    }
    
}

也可以以输出流的方式创建:

public static WritableWorkbook createWorkbook(java.io.OutputStream os)
public static WritableWorkbook createWorkbook(java.io.OutputStream os, WorkbookSettings ws)
public static WritableWorkbook createWorkbook(java.io.OutputStream os, Workbook in)
public static WritableWorkbook createWorkbook(java.io.OutputStream os, Workbook in, WorkbookSettings ws)

这里需要注意的是以  public static WritableWorkbook createWorkbook(java.io.OutputStream os, Workbook in)   方式创建可写工作簿,在写入时一直报错,目前没有搞明白是什么原因。希望大神能留言告诉我。

   

      Workbook其他的方法:

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

public class Tworkbook {
    public static void main(String args[]) throws IOException, BiffException {
        try {
            //文件 测试.xls 存在
            File file = new File("D://JEtest/测试.xls");
            Workbook wb = Workbook.getWorkbook(file);

            //判断表是否受到保护
            System.out.println("Is the sheet protect?   result: " + wb.isProtected());
            
            //在Excel表中可以选定多个单元格,给他们起一个名字,这里的range就代表的是一个你选定命名的那些单元格。
            //!!!!!!!!!!!!!!!!
            //注意不要用wps 操作选定一部分单元格给其命名,这样jxl用该函数会出现错误,返回的结果不正确。
            //!!!!!!!!!!!!!!!!
            //该方法返回所有你命名range的名字的字符串数组
            String [] rangeNameList = wb.getRangeNames();
            System.out.println("the range[]: " + Arrays.toString(rangeNameList));
            
            
            //有参数名,得到range[] 数组。    ????range的名字是唯一的,为什么返回是数组呢????
            Range[]  ranges;
            ranges = wb.findByName("name");
            System.out.println("the ranges[] length: " + ranges.length);   
            
            
            //该方法返回名为"name" 的cell或range 的左上单元格。
            Cell cell = wb.findCellByName("name");
            System.out.println("cell 或 range的左上单元格的内容: " + cell.getContents());
                       
            
            //获取指定单元格, 参数格式为"sheet1!A1"
            Cell cellA1 = wb.getCell("第一页!A3");
            System.out.println("第一页里A1的内容: " + cellA1.getContents());
            
            
            //返回工作簿中工作表个数
            int sheetnumber = wb.getNumberOfSheets();
            System.out.println("工作表个数为: " + sheetnumber);
            
            //得到指定的表,根据索引值,从零开始。  不要做不必要的调用,因为每次调用都要重读工作表, 
            //此外客户端也不要持有不必要的表的引用,这回阻止垃圾回收器释放内存。
            Sheet sheet0 = wb.getSheet(0);
            System.out.println("第一个表的名字是: " + sheet0.getName());
            
            //这种方式是根据工作表的名称来得到工作表的。
            Sheet sheet1 = wb.getSheet("第一页");
            
            
            //得到工作表数组
            Sheet [] sheetlist;
            sheetlist = wb.getSheets();
            System.out.println("工作表个数为: " + sheetlist.length);
            
            
            //得到工作簿中所有的工作表名称,以字符串数组存储。
            String [] sheetnamelist = wb.getSheetNames();
            System.out.println("工作表个数:" + sheetnamelist.length + " 工作表名称: " + Arrays.toString(sheetnamelist));
            
            
            //得到jxl版本号
            String version = wb.getVersion();
            System.out.println(version);
            
            wb.close();
            
        }catch (IOException | BiffException | IndexOutOfBoundsException e) {
            System.out.println("Exception: " + e);
            throw e;
        }
    }
    
}

       以上就是类Workbook 的所有方法,下一篇将会一起来学Sheet 的相关方法。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值