/**
*
*/
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居然不成功,高手指教下在线等待 满意即给分
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货