回 帖 发 新 帖 刷新版面

主题:该程序为什么会出现java.lang.ArrayIndexOutOfBoundsException:

该程序为什么会出现java.lang.ArrayIndexOutOfBoundsException: 0异常,希望高手帮助


我想利用JAVA将EXCEL中的数据取出,然后将其整理后重新保存入新的EXCEL文件,但是出现了错误,望指教,谢谢!附件是连接JXL的JAR包,和一个简单的用于调试程序的excel表格
原始数据格式为
zhang san,li si,zhou wu                101
zheng wang,xiao li                     102
希望将数据整理如下形式:
zhang san                               101
li si                                   101
zhou wu                                 101
zheng wang                              102
xiao li                                 102
代码如下:
import java.io.File;
import java.io.IOException;
import jxl.*;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class ExcelWrite {
static WritableWorkbook wwb;

public ExcelWrite()
{
try {
wwb=Workbook.createWorkbook(new File("C:/newbook1.xls"));
} catch (IOException e) { e.printStackTrace();
  }
}
//从一个excel表格中读取数据,并转换形式后存入新的excel表格 
public void readExcel(String filename){    
     Workbook wb = null;    
     try {    
         //构造Workbook(工作薄)对象    
         wb=Workbook.getWorkbook(new File(filename));    
     } catch (BiffException e) {    
         e.printStackTrace();    
     } catch (IOException e) {    
         e.printStackTrace();    
     }       
     if(wb==null)    
         return;        
  //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了    
     Sheet[] sheet = wb.getSheets();    
     if(sheet!=null&&sheet.length>0)
     {    
         for(int i=0;i<sheet.length;i++)
         {
          int totalnum=0;//新表中的总行数
          WritableSheet ws=wwb.createSheet("zhj"+i, 0);//在新的EXCEL文件中创建一页新的空白excel页
          Sheet sh=sheet[ i ];//从读取的EXCEL文件中获取一页
          int rownum=sh.getRows();//获取该页的行数
          for(int j=0;j<rownum;j++)
          {
           
          Cell[]cell=sh.getRow(j);//获得当前行的所有单元格
                String content=cell[0].getContents();//获得第1个单元格的内容
           System.out.println(content);//输出当前行的内容,输出正常
      String[]newstr=stringSplit(content);//调用方法stringSplit()将内容以,拆分开
           /*for(String s:newstr)
           {
         System.out.println(s);
           }*/
          String recordnum=cell[1].getContents();//获得第2个单元格的内容
          System.out.println(recordnum);
           System.out.println(newstr.length);
           for(int k=0;k<newstr.length;k++)//在新的EXCEL表格中将拆分后的内容存入
           {
          Label labelcontent=new Label(0,totalnum,newstr[k]);
          Label labelrecord=new Label(1,totalnum,recordnum);
            totalnum++;
          try {    
                             //将生成的单元格添加到工作表中    
                             ws.addCell(labelcontent);
                             ws.addCell(labelrecord);
                             wwb.write();   //从内存中写入文件中 
                         } catch (RowsExceededException e) {    
                             e.printStackTrace();    
                         } catch (WriteException e) {    
                             e.printStackTrace();    
                         } catch (IOException e) {                                e.printStackTrace();                              }    
          }

               
          }
         }
        
     }
     try {  
            //关闭资源,释放内存    
            wwb.close();    
        } catch (IOException e) {    
            e.printStackTrace();    
        } catch (WriteException e) {    
            e.printStackTrace();    
        }    
      //最后关闭资源,释放内存    
       wb.close(); 
}   
    public String[] stringSplit(String str)
    {
     String[]newstr=str.split(",");
     return newstr;
    }

}

public class Indoor {
public static void main(String[] args) {
  String filename="C:/book1.xls";
  ExcelWrite ew=new ExcelWrite();
  ew.readExcel(filename);

}

}

回复列表 (共4个回复)

沙发

你的这个是数组越界的错误

板凳

你的错误实在是太多了,不会是照这书上搞的吧!随便说两个吧,你在一个文件中有两个公有类,你在导入那写方法的时候也有问题,下次有时间帮你找吧

3 楼


我调试了,是String recordnum=cell[1].getContents();//获得第2个单元格的内容
越界了,但是我实在搞不懂为什么越界呢,我的逻辑上好像没有什么错误啊,我用打印的方法调试也能把EXCEL表中的两行完成功能,可是就是写不到新的EXCEL表中(只能建立一个空的EXCEL表),我把程序的注释给加得详细点,麻烦各位帮我看一下,谢谢!!

4 楼

写个判断语句,检查是否为尾数据

我来回复

您尚未登录,请登录后再回复。点此登录或注册