Jxl 操作Excel之 WritableWorkbook

        这篇文章主要是讲WritableWorkbook 类的方法操作。WritableWorkbook 是用与操作可写工作簿的,其中的方法有创建可写工作表、复制工作表、设置工作簿背景RGB、移除工作表等操作。但是有些方法使用时还是有问题,不知道怎么使用。下面就让我们看看具体是怎么实现的。



/**
 *
 * @author yrs
 */

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import jxl.Range;
import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class TWritableWorkbook {
    public static void main(String [] args) throws IOException, BiffException, IndexOutOfBoundsException, WriteException  {
        try {
            Workbook book;
            WritableWorkbook wb;
            
            File file = new File("D://JEtest/测试.xls");
            
            if(file.exists()) {
                //如果文件存在; 
                
                book = Workbook.getWorkbook(file);
                wb = Workbook.createWorkbook(file, book);
                
                
                //得到工作簿中的所有表,以数组形式返回。使用这种方法对于大型工作表可能会导致性能问题。
                WritableSheet wSheetarray[] = wb.getSheets();
                System.out.println("工作簿的工作表数:  " + wSheetarray.length);
                
                //返回工作表数
                int wSheetNumbers = wb.getNumberOfSheets();
                System.out.println("工作簿的工作表数:  " + wSheetNumbers);
                
                
                //返回工作表名,字符串数组
                String [] sheetNamesArray = wb.getSheetNames();
                System.out.println("工作表名:  " + Arrays.toString(sheetNamesArray));
                
                
                //根据索引返回表,以0开始。
                WritableSheet wSheet = wb.getSheet(0);
                System.out.println("第0个工作表名为:  " + wSheet.getName());
                //根据表名返回工作表
                WritableSheet wSheet2 = wb.getSheet("Sheet1");
                
                
                //返回指定的单元格,例如Sheet1!A4.    //注意表名不要写错。    
                //使用该方法会影响性能,谨慎使用。
                WritableCell wCell = wb.getWritableCell("Sheet1!A4");
                System.out.println("sheet1!A4单元格内容为:  " + wCell.getContents());
                
                
                //创建可写工作表
                WritableSheet wCreatSheet = wb.createSheet("name2", 4);
                System.out.println("工作簿的工作表数:  " + wb.getNumberOfSheets());
                
                
                //##############有问题################################
                //从不同的工作簿中复制一个工作表
                //WritableSheet importWSheet = wb.importSheet("yrs2", 5, sheetWrite);
                //System.out.println("导入工作表名字  :  " + importWSheet.getName());
                               
                //复制同一个工作簿中的表
                //wb.copySheet(1, "Sheet2", 3);
                //wb.copySheet("Sheet1", "Sheet2", 2);
                //####################################################
                
                //移除指定的工作表
                wb.removeSheet(2);
                
                //移动这个工作簿中的表,第一个参数为要移动表的索引,第二个参数是移动的目标位置索引。
                WritableSheet wSheet3 = wb.moveSheet(1, 2);
                
                
                //指示这个工作簿是否被保护 
                wb.setProtected(false);
                
                
                //public abstract void setColourRGB(Colour c,int r,int g,int b)
                //设置工作簿的RGB值(红,绿,蓝)  范围在0-255
                wb.setColourRGB(Colour.RED, 255, 0, 255);
                //wb.setColourRGB(Colour.LIGHT_BLUE, 0x76, 0xEE, 0x00);
                jxl.write.WritableFont wfc = new jxl.write.WritableFont( 
                    WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLUE); 
                WritableCellFormat wcf2 = new WritableCellFormat(wfc);// 单元格样式
                wcf2.setBackground(Colour.RED);
                WritableSheet wSheet3 = wb.getSheet("Sheet2");
                wSheet3.addCell(new Label(1, 3, "测试颜色---自定义#76EE00", wcf2)); 
                                  
                  
                
                //根据 cell或range 的名字返回单元格,如果是range ,则返回左上角的单元格
                WritableCell wCell2 = wb.findCellByName("name");
                System.out.println("单元格内容:  "+ wCell2.getContents());
                
                
                //根据字符串参数查找range,返回名为“search"的range数组。
                //这个range对象包含从左上到右下所有的单元格。如果名为”search"的range由一个相邻的range组成,那么range[] 将返回一个对象。
                //对于不是相邻的range,则返回一个数组。
                Range [] rangeArr = wb.findByName("search");
                
                //返回这个工作簿中range 的名字。
                String [] rangeNames = wb.getRangeNames();
                
                //清除指定名称的range. 注意移除的这个名字,可能导致使用这个名字的公式计算不正确。
                wb.removeRangeName("sheet1");
                
                
                //向一个表中添加range.   参数add 是range名称,wSheet3是工作表
                //2,2,4,4 表示第二列到第四列,第二行到第四行的范围。
                wb.addNameArea("add", wSheet3, 2, 2, 4, 4);
                
                
                
                //设置一个新的输出文件,这允许同一工作簿被写入不同输出文件,而无需再次读到任何模板
                //???????????????????源文件里没有内容了。
                //File outputFile = new File("D://JEtest/output.xls");
                //wb.setOutputFile(outputFile); 
                
                book.close();
                wb.write();
                wb.close();
                
            }
            else {
                System.out.println("文件不存在  ");
            }
    
        }catch (IOException | BiffException | IndexOutOfBoundsException | WriteException e) {
            System.out.println("Exception:  " + e);
            throw e;
        }
    }
    
}

       上面的程序是把WritableWorkbook类中的方法都列出来了,您在测试时可以对相应的方法进行测试,单独测试看起来比较简洁。WritableWorkbook 中的方法有些是和Workbook中的用法一样。这里需要注意的是方法importSheet、copySheet和setOutputFile。从另一个工作簿中复制一个工作表的方法 importSheet和在同一个工作簿中复制工作表的方法 copySheet使用时都出现错误。查看源码时发现这两个方法中使用的方法有的方法没有实现,不知道怎么回事,也许是我没有找对地方,如果您知道怎么使用,谢谢分享! 微笑。另外,在最后的setOutputFile方法使用时会导致源文件中的内容消失,不清楚什么原因。。。。。。

      





  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值