jxl.jar包中createSheet()方法中String类型的参数代表新建工作表的名称,int参数表示新建工作表的编号。
例1
当新建的2个sheet编号相同时会发生什么情况?新的工作表会覆盖旧的工作表吗?实践出真知:
public static void main(String args[]) throws BiffException, IOException, WriteException{
System.out.println("zhangyujian");
//创建文件
File xlsFile= new File("vita.xls");
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(xlsFile);
//创建工作表
//WritableSheet sheet = workbook.createSheet("sheet00", 0);
workbook.createSheet("sheet00", 0);
workbook.createSheet("sheet01", 0);
workbook.createSheet("sheet02", 0);
//关闭工作簿
workbook.close();
}
运行结果:
由结果可以看出,新创建的工作表会变成第一页,而之前创建的工作表并未被覆盖,而是向后移变成了第二页。
例2
当是用不连续的编号创建工作表时,会发生什么情况?
public static void main(String args[]) throws BiffException, IOException, WriteException{
System.out.println("zhangyujian");
//创建文件
File xlsFile= new File("vita.xls");
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(xlsFile);
//创建工作表
//WritableSheet sheet = workbook.createSheet("sheet00", 0);
workbook.createSheet("sheet00", 0);
workbook.createSheet("sheet01", 1);
workbook.createSheet("sheet02", 3);
//关闭工作簿
workbook.close();
}
运行结果:
由结果看出,编号为3的工作表,并不是第4页,而是第3页。且此时如果调用方法getSheet(3)时将会报数组越界的错误。Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
例3
综合的例子来判断一下排序的逻辑:
public static void main(String args[]) throws BiffException, IOException, WriteException{
System.out.println("zhangyujian");
//创建文件
File xlsFile= new File("vita.xls");
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(xlsFile);
//创建工作表
//WritableSheet sheet = workbook.createSheet("sheet00", 0);
workbook.createSheet("sheet04", 4);
workbook.createSheet("sheet03", 3);
workbook.createSheet("sheet02", 2);
workbook.createSheet("sheet01", 1);
workbook.createSheet("sheet00", 0);
//关闭工作簿
workbook.close();
}
运行结果:
由结果可得,首次创建的sheet04虽然编号为4,但是工作簿中不存在其他页,所以它是第一页,此时编号实际为0;创建sheet03时,虽然标号为3,但是此时工作簿中仅有一张表,根据例2,所以它顺延后实践编号为1,在工作簿的第二页;创建sheet02时,编号为2,此时的工作簿中已经有0、1编号,所以编号为2的sheet02恰好放置在工作簿的第3页,也就是此时的最后一页;创建sheet01时,编号为1,根据例1,它会插入的标号为1的位置,此时顺序为sheet04 sheet01 sheet03 sheet02;创建最后一张表sheet0,编号为0,即将其插入到编号为0的位置,第一页。所以最后的排序是sheet00 sheet04 sheet01 sheet03 sheet02。
综上,createSheet()方法的int参数与实际编号的关系,不妨可以这样概括:
- 当目标编号≥当前工作簿sheet的最大编号,则在其后追加新的sheet表。
- 当目标编号<当前工作簿sheet的最大编号,则在对应位置插入新的sheet表。
- 当目标编号=0时,表示始终将新的sheet表插入工作簿的开头。
个人认为,第三种为常用、简单的用法。