java poi 读取excel数据 存入hashMap中

读一个excel表,表中有两纵(两个竖行)一纵为key一纵为value因为我要用这个map向另一个excel中写这些value但是要通过key获取含有key的话才写入,怎... 读一个excel表 ,表中有两纵 (两个竖行)一纵为key 一纵为value 因为我要用这个map向另一个excel中写这些value 但是要通过key获取 含有key的话才写入,怎么才能把这表里全部数据(后期维护可能会增加)都读出来 ,存入map中 第一纵为key 第二纵为value

hm1(1,a);
hm2(2,b);
hm3(3,c);
.......
我在网上找到一种 但是 返回的hm.size()=0;循环可能有问题 但我想不出其他的方法了还希望大侠们 帮帮忙..分不多 谢谢了..
代码如下
public static HashMap<String, String> getEnglishName (String path){
HashMap<String, String> hm = new HashMap<String, String>();
ArrayList<String> chinese = new ArrayList<String>();
ArrayList<String> english = new ArrayList<String>();
try {

InputStream is = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
for(int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++){
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt( numSheet);
if(hssfSheet == null){
continue;
}
for(int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++){
HSSFRow hssfRow = hssfSheet.getRow( rowNum);
if(hssfRow == null){
continue;
}
// 循环列Cell 获取key
for(int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum+=2){
HSSFCell hssfCell = hssfRow.getCell((short)cellNum);
chinese.add(getValue(hssfCell));
if(hssfCell == null){
continue;
}

}

//获取 value
for(int cellNum = 1; cellNum <= hssfRow.getLastCellNum(); cellNum+=2){
HSSFCell hssfCell = hssfRow.getCell((short)cellNum);
english.add(getValue(hssfCell));
if(hssfCell == null){
continue;
}
}
}
}

for(int i = 0;i<chinese.size();i++){
hm.put(chinese.get(i), english.get(i));
}
} catch (Exception e) {
// TODO: handle exception
}
return hm;
}

@SuppressWarnings({ "static-access", "deprecation" })
private static String getValue(HSSFCell hssfCell)throws WriteException{
if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){
return String.valueOf( hssfCell.getBooleanCellValue());
}else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){
return String.valueOf( hssfCell.getNumericCellValue());
}else{
return String.valueOf( hssfCell.getStringCellValue());
}
}
我写的代码不好使, 就是请大家 给我一段好使的代码 能读取excel 数据 的 像上面说的那样 装入 map中 能实现吗? 不能实现的话也请大家告诉我下....
展开
 我来答
enolong
2012-10-15 · TA获得超过1174个赞
知道小有建树答主
回答量:590
采纳率:100%
帮助的人:373万
展开全部
大致看了一下代码,你这个可是把所有的sheet都遍历完把数据放入map里哦。
你的代码是弄了两个for循环,第一次是循环第一列,第二次循环第二列。
既然你是要放入map,干嘛去弄两个list一个放key,一个放value,然后在遍历这两个list把数据分别置为map的key和value呢?这样是不是有点多余呀?

建议你改成双重for循环,一次就可以将数据放入map了。
如果没明白,我再给你写代码。
追问
其实我写的是对的,只是刚刚没弄明白 循环单元格是没用的...我改了代码 好像也不是你说的那种.
不过还是很感谢...
追答
按照你的代码意思,我只改了你的try...catch...里的代码:
InputStream is = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// 循环列Cell 获取key
for (int hang = 0; hang <= hssfSheet.getLastRowNum(); hang ++) {
// 获取 value
HSSFRow hssfRow = hssfSheet.getRow(hang);
for (int lie = 0; lie < hssfRow.getLastCellNum(); lie+=2) {
String key = String.valueOf(hssfRow.getCell(lie));
String value = getValue(hssfRow.getCell(lie+1));
hm.put(key, value);
}
}
}

然后把那个chineselist和englishlist删掉就OK了。。
百度网友dfb61d1b0
2012-10-15 · TA获得超过404个赞
知道小有建树答主
回答量:385
采纳率:66%
帮助的人:151万
展开全部
没看明白是什么问题
追问
读一个excel 把数据装入map中 ,这个excel 中就两纵 就像那个图,,第一纵为map中的key 第二纵为value 没一行就是一个map 
能实现吗 我看没人回答啊..
追答
...
try {

InputStream is = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
for(int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++){
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt( numSheet);
if(hssfSheet == null){
continue;
}

// 循环列Cell 获取key ,只有两列 简单 直接使用 0 和1
for(int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++){

HSSFRow hssfRow = hssfSheet.getRow( rowNum);
if(hssfRow == null){
continue;
}

hm.put(getValue(hssfRow.getCell((short)0)),hssfRow.getCell((short)1)));
}

}...
return hm;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友845f74e61
2012-10-15 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1607万
展开全部
// 循环列Cell 获取key
for(int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum+=2){
HSSFCell hssfCell = hssfRow.getCell((short)cellNum);
chinese.add(getValue(hssfCell));
if(hssfCell == null){
continue;
}

}

//获取 value
for(int cellNum = 1; cellNum <= hssfRow.getLastCellNum(); cellNum+=2){
HSSFCell hssfCell = hssfRow.getCell((short)cellNum);
english.add(getValue(hssfCell));
if(hssfCell == null){
continue;
}
}

这一部分写得有问题。按你的逻辑,判断是不是为null应该在
chinese.add(getValue(hssfCell));

或是
english.add(getValue(hssfCell));

之前进行判断,你为0的原因就是出现了null没有判断出来,出现了导常。

--------------------------------------------------------------------------------------------------------------------------------
你的那两个list有些多余,下边是我给你简化以后的代码。

--------------------------------------------------------------------------------------------------------------------------------

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class Excel {
public static void main(String[] args) {
HashMap<String, String> map = getEnglishName("D:\\test.xls");
System.out.println(map.size());
}
public static HashMap<String, String> getEnglishName(String path) {
HashMap<String, String> hm = new HashMap<String, String>();
try {
InputStream is = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow == null) {
continue;
}
HSSFCell keyCell = hssfRow.getCell(0);
HSSFCell valCell = hssfRow.getCell(1);
hm.put(getValue(keyCell), getValue(valCell));
}
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
return hm;
}
@SuppressWarnings( { "static-access", "deprecation" })
private static String getValue(HSSFCell hssfCell) throws Exception {
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
return String.valueOf(hssfCell.getNumericCellValue());
} else {
return String.valueOf(hssfCell.getStringCellValue());
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式