jxl读取Excel奇怪报错

jarvis_java 2009-11-19 04:45:00

/**
*
*/
package com.vteam.mul;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import jxl.Cell;
import jxl.CellType;
import jxl.LabelCell;
import jxl.Sheet;
import jxl.Workbook;

/**
* @作者 Jarvis
* @创建日期 Nov 19, 2009
* @版本 V 1.0
*/

public class ReadExcel {

/**
* @param args
*/
private String ExcelPath ;
private HashMap ExcelMap ;
private int column1 ;//指定读取列1 从0 开始
private int column2 ;//指定读取列2 从0 开始
private int rowStart;//读取起始行下标 从0 开始

public ReadExcel(){

}
public ReadExcel(String ExcelPath){
this.ExcelPath = ExcelPath ;
}
/**
* 读取Excel 按照sheet名称顺序读取
* 需要设置Excel路径ExcelPath,读取起始行rowStart,读取的2列column1和column2
* @return
*/
public HashMap ReadExcel(){
try
{
ExcelMap = new HashMap();//存储 中文key-英文value
File file = new File(this.ExcelPath);
Workbook rwb = Workbook.getWorkbook(file);
String[] sheets = rwb.getSheetNames();
// rwb.close();
// Sheet st = rwb.getSheet(this.getSheetNo()) ;//下标获取表名,从0开始
for(int i = 0 ; i< sheets.length ; i++){
// Workbook temrwb = Workbook.getWorkbook(file);
Sheet st = rwb.getSheet(sheets[i]);//sheet名称获取方式
int row = st.getRows(); // /得到该sheet的行数
// int column = st.getColumns(); // 得到该sheet的列数
int starrow = this.rowStart ;
Cell key = null ;
Cell value = null ;
while(starrow < 10){
key = st.getCell(this.getColumn1(),starrow);//第一个参数代表列 第二个参数代表行
value = st.getCell(this.getColumn2(),starrow);
//通用的获取cell值的方式,返回字符串
String keyStr = key.getContents();
String valueStr = key.getContents();
//获得cell具体类型值的方式
if(key.getType() == CellType.LABEL)
{
LabelCell labelkey = (LabelCell)key;
keyStr = labelkey.getString();
}
if(value.getType() == CellType.LABEL)
{
LabelCell labelvalue = (LabelCell)value;
valueStr = labelvalue.getString();
}
ExcelMap.put(keyStr,valueStr );//存储中文-英文
starrow ++ ;//递增
}
System.out.println("从Excel文件:< "+this.ExcelPath+" >的sheet:["+sheets[i]+"]读取多语言共<"+starrow+">行");
//关闭
rwb.close();
}

}catch(Exception e){
e.printStackTrace();
}

return ExcelMap ;
}


public static void main(String[] args) {
// TODO Auto-generated method stub
ReadExcel re = new ReadExcel();
re.setExcelPath("E:/1.xls");
re.setColumn1(0);//读取列1
re.setColumn2(1);//读取列 2
re.setRowStart(1);//读取起始行
HashMap map = re.ReadExcel();
Set set = map.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key = (String)it.next();
System.out.println(">> "+map.get(key));
}
}
// setter && getter-------------------start
public String getExcelPath() {
return ExcelPath;
}
public void setExcelPath(String excelPath) {
ExcelPath = excelPath;
}
public HashMap getExcelMap() {
return ExcelMap;
}

public void setExcelMap(HashMap excelMap) {
ExcelMap = excelMap;
}

public int getColumn1() {
return column1;
}
public void setColumn1(int column1) {
this.column1 = column1;
}
public int getColumn2() {
return column2;
}
public void setColumn2(int column2) {
this.column2 = column2;
}

public int getRowStart() {
return rowStart;
}
public void setRowStart(int rowStart) {
this.rowStart = rowStart;
}

//setter && getter-------------------end
}



JXL读取Excel报奇怪空指针错误。是在是没查出原因
测试Excel满足:至少2列,10行。多个sheet,即一个Excel里有2个以上表格页面 才会出现这个问题
请问下这个应该怎么解决?

获取sheet名称后,我遍历sheet居然不成功,高手指教下

在线等待 满意即给分
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjjxqld 2009-11-20
  • 打赏
  • 举报
回复
这个应该算是jxl的一个bug吧,我也曾遇到过这种问题!比如一个表格实际只有10行,但是会读到10行以后的数据,然后报一个NullPointException,通常遇到这种情况,我都直接吧表格10行后的空行选中,再删除,保存,在读取就可以了
lzh_me 2009-11-19
  • 打赏
  • 举报
回复
mark一下明天来了看...
dinghun8leech 2009-11-19
  • 打赏
  • 举报
回复
楼主贴那么多代码,还不如把异常贴出来更好。我觉得楼主还是顺着异常找下去,肯定是楼主在哪向一个为null的对象发送消息(调用方法)了,楼主试试找到报空指针异常的那行,要么单步debug一下,要么把那行所用到的所有对象的引用println一下,就能知道哪个对象在该存在的时候为null了。并且我猜最后问题与xls无关。
jarvis_java 2009-11-19
  • 打赏
  • 举报
回复
会jxl.jar操作Excel的大侠都在干吗?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧