用jxl读取多sheet的excel文件时出现错误,如果只读取第一个sheet可以读取,但读取第二个sheet便出现错误。
如果将excel文件找开重新保存或者复制出去,则可以正常读取,请高人解答。
代码如下:
import jxl.Sheet;
import java.io.InputStream;
import java.util.Vector;
import java.io.FileInputStream;
import jxl.Workbook;public class test2 {
public static void main(String [] args){
ReadExcel("e:\\test\\test3.xls");
}
public test2() {
}
/*
* 方法名:ReadExcel
* 参数:filePath为Execl文件的绝对路径
* 用途:读取Execl数据,放在数组中返回
*返回类型:Vector
*
* */
public static Vector ReadExcel(String filePath)
{
Vector v = new Vector();
Workbook rwb = null;
try
{
InputStream is = new FileInputStream(filePath);
rwb = Workbook.getWorkbook(is);
// 获取第一张Sheet表
Sheet rs = rwb.getSheet(1);
for (int k = 0; k < rs.getRows(); k++)
{
for (int j = 0; j < rs.getColumns(); j++)
{
System.out.println(rs.getCell(j, k).getContents());
v.add(rs.getCell(j, k).getContents());
}
}
rwb.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return v;
}
}出现的错误如下:
java.lang.IndexOutOfBoundsException: Index: 23, Size: 23
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at jxl.biff.FormattingRecords.getNumberFormat(FormattingRecords.java:244)
at jxl.read.biff.NumberRecord.<init>(NumberRecord.java:73)
at jxl.read.biff.SheetReader.read(SheetReader.java:496)
at jxl.read.biff.SheetImpl.readSheet(SheetImpl.java:716)
at jxl.read.biff.WorkbookParser.getSheet(WorkbookParser.java:257)
at test2.ReadExcel(test2.java:29)
at test2.main(test2.java:9)
如果将excel文件找开重新保存或者复制出去,则可以正常读取,请高人解答。
代码如下:
import jxl.Sheet;
import java.io.InputStream;
import java.util.Vector;
import java.io.FileInputStream;
import jxl.Workbook;public class test2 {
public static void main(String [] args){
ReadExcel("e:\\test\\test3.xls");
}
public test2() {
}
/*
* 方法名:ReadExcel
* 参数:filePath为Execl文件的绝对路径
* 用途:读取Execl数据,放在数组中返回
*返回类型:Vector
*
* */
public static Vector ReadExcel(String filePath)
{
Vector v = new Vector();
Workbook rwb = null;
try
{
InputStream is = new FileInputStream(filePath);
rwb = Workbook.getWorkbook(is);
// 获取第一张Sheet表
Sheet rs = rwb.getSheet(1);
for (int k = 0; k < rs.getRows(); k++)
{
for (int j = 0; j < rs.getColumns(); j++)
{
System.out.println(rs.getCell(j, k).getContents());
v.add(rs.getCell(j, k).getContents());
}
}
rwb.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return v;
}
}出现的错误如下:
java.lang.IndexOutOfBoundsException: Index: 23, Size: 23
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at jxl.biff.FormattingRecords.getNumberFormat(FormattingRecords.java:244)
at jxl.read.biff.NumberRecord.<init>(NumberRecord.java:73)
at jxl.read.biff.SheetReader.read(SheetReader.java:496)
at jxl.read.biff.SheetImpl.readSheet(SheetImpl.java:716)
at jxl.read.biff.WorkbookParser.getSheet(WorkbookParser.java:257)
at test2.ReadExcel(test2.java:29)
at test2.main(test2.java:9)
只要把文件打开,,什么也不做,只要点击保存,再读取就没有问题了,现在问题是不做任何操作,怎么能够顺利读取呢?
只要把文件打开,,什么也不做,只要点击保存,再读取就没有问题了,现在问题是不做任何操作,怎么能够顺利读取呢?
只要把文件打开,,什么也不做,只要点击保存,再读取就没有问题了,现在问题是不做任何操作,怎么能够顺利读取呢?
Workbook book = Workbook.getWorkbook(new File("c:\\aaaaaa.xls"));
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
Demo1 d1 = new Demo1();
for(int i=1;i<131;i++){
Cell cell1 = sheet.getCell(3,i);
Cell cell2 = sheet.getCell(5,i);
Cell cell3 = sheet.getCell(7,i);
Cell cell4 = sheet.getCell(0,i);
Cell cell5 = sheet.getCell(1,i);
String cell1_1 = cell1.getContents().trim();
String cell2_1 = cell2.getContents().trim();
String cell5_1 = cell5.getContents().trim();
String cell3_1 = null;
cell3_1 = cell3.getContents().trim();
String cell4_1 = cell4.getContents().trim();
d1.gets(cell4_1,cell5_1,cell1_1,cell2_1,cell3_1);
System.out.println(cell1_1.length());
// System.out.println(cell4_1 + "::" +cell1_1 + "::" + cell2_1 + "::" + cell3_1);
}
book.close();
} catch (Exception e) {
System.out.println(e);
}
}
for (int k = 0; k < rs.getRows(); k++)
{
for (int j = 0; j < rs.getColumns(); j++)
{
System.out.println(rs.getCell(j, k).getContents());
v.add(rs.getCell(j, k).getContents());
}
}
我感觉你的错误应该出现在这个地方,Excel中的行和列如果存在空列,你使用rs.getColumns(),这样会吧空列一并计算到里面去,而Excel中其实并没有这么多的列数,所以,才会报数组越界的错误,很简单的处理方法就是,将Excel中的sheet中的数据区域复制到新的Excel中就可以了