主题:该程序为什么会出现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);
}
}
我想利用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);
}
}