StringBuffer content = new StringBuffer();
String value = null; // 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(fileName);
                   // 循环工作表Sheet
for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {
          
XSSFSheet xSheet = xwb.getSheetAt(numSheet);
if (xSheet == null) {
continue;
} // 循环行Row
for (int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++) {
                                      String tempvalue = "";
         List templist = new ArrayList();
                                     int num = 0;
XSSFRow xRow = xSheet.getRow(rowNum);
if (xRow == null) {
continue;
} // 循环列Cell
for (int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++) {
XSSFCell xCell = xRow.getCell(cellNum);
 
if (xCell == null) {
continue;
}
//System.out.println(xCell);
          value = "";
 value = cell ;
          templist.add(value);
    
}
                                        temprowlist.add(tempvalue);
    datamaps.put(num + "", templist);
             num++;
}
}
}
return content.toString();
我现在通过以上代码读取到了整个Excel中的数据
这个Excel中只有一列有数据StyleNo      BOmId
12542E       这个ID是要在StyleNo的基础上加上0001,即变成12542E0001
12542E       这个ID是要在StyleNo的基础上加上0002, 即变成12542E0002
12542E      。
12542E
12542E
12542E
22064E
25373E
26395E         这个ID是要在StyleNo的基础上加上0001,即变成26395E0001
26395E         这个ID是要在StyleNo的基础上加上0002,即变成26395E0002
26395E         这个ID是要在StyleNo的基础上加上0002,即变成26395E0003
26395E
26396E不知道大家看清楚了没?我的意思的判断一下值中如果有连续相同的值,那么就从第一个开始加0001,第二个就是0002,以此类推,当碰到不是相同的时候就又是0001了,这个逻辑在上面代码的什么位置写,怎么写?
大家帮忙解决哈啊   本人对这个不是很熟,加上不知道,怎么把这个值串联起来后生成一个新的单元格与前面的值对应
,望热心的朋友帮帮忙

解决方案 »

  1.   

    这个列是固定的吗?
    如果是,就把它读出来,放到集合里面,然后循环,在循环中设置临时变量用来存要对比的值如果发生变化重新赋值,否则累计加1拼字符串POI用的少,不太熟,但这思路基本上用java基本语法就可以了看看有没有更好的方法
      

  2.   

    //你反正已经取到数据放进list了。这样处理一下就行了。
    List<String> list=new ArrayList<String>();
    list.add("222");
    list.add("111");
    list.add("111");
    list.add("111");
    list.add("222");
    list.add("333");
    list.add("111");
    list.add("111");
    list.add("111");
    String temp=null;
    int time=1;
    for(String i:list){
    if(temp==null){
    i+="001";
    temp=i;
    }else{
    if (i.equals(temp)) {
    time++;
    temp = i;
    i = i + "00" + time;
    } else {
    temp=i;
    i+="001";
                        time=1;
    }
    }
    System.out.println(i);
    }
      

  3.   

    你是要问这个逻辑实现的算法呢还是对POI的操作不熟悉?
    如果是要问实现的算法,那么你描述的还是不够清楚: 
    1、如果有重复值则进行累加,这个值是可能分布在多个sheet内呢,还是只会在一个里出现。如果分布在多个sheet里,是针对每个sheet进行累加,还是所有出现的sheet进行累加。
    2、每个sheet里,这个值是一定保证连续出现呢,还是有可能随机在整个sheet里出现。
    类似的这些细节你都该说清楚。
    当然实现的越多,功能相应更强些,当然逻辑就更复杂
      

  4.   

    private void extractTextFromXLS2007(String fileName) throws Exception {
    StringBuffer content = new StringBuffer();
    String value = null; // 构造 XSSFWorkbook 对象,strPath 传入文件路径
    XSSFWorkbook xwb = new XSSFWorkbook(fileName);
    Map datamaps = new HashMap(); // 用于保存全部数据
    List temprowlist = new ArrayList();
    String ss = "000"; // 循环工作表Sheet
    for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {
    int num = 0;
    int number = 2;
    XSSFSheet xSheet = xwb.getSheetAt(numSheet);
    if (xSheet == null) {
    continue;
    } // 循环行Row
    for (int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++) {
    XSSFRow xRow = xSheet.getRow(rowNum);
    String tempvalue = "";
    List<String> templist = new ArrayList<String>(); if (xRow == null) {
    continue;
    }
    // 循环列Cell
    for (int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++) {
    XSSFCell xCell = xRow.getCell(cellNum); if (xCell == null) {
    continue;
    }
    // System.out.println(xCell);
    String tmp = null;
    int time = 1;
    value = "";
    value = xCell.getStringCellValue();
    for (String i : templist) {
    System.out.println("sdfsdfsdf");
    if (tmp == null) {
    i += "0001";
    tmp = i;
    value = i;
    tempvalue += value;
    templist.add(value);
    } else {
    if (i.equals(tmp)) {
    time++;
    tmp = i;
    i = i + "000" + time;
    value = i;
    tempvalue += value;
    templist.add(value);
    } else {
    tmp = i;
    i += "0001";
    time = 1;
    value = i;
    tempvalue += value;
    templist.add(value);
    }
    }
    }
    temprowlist.add(tempvalue);
    datamaps.put(num + "", templist);
    num++;
    }
    }
    }
    File file = new File("D:/2.xlsx");// 注意,一定要先创建一个
    FileInputStream iStream = new FileInputStream(file);
    XSSFWorkbook bookn = new XSSFWorkbook(iStream);
    XSSFSheet sheetn = bookn.getSheetAt(0);
    for (int g = 0; g < datamaps.size(); g++) {
    XSSFRow datarow = sheetn.createRow(g);
    List datalist = (List) datamaps.get(g + "");
    for (int i = 0; i < datalist.size(); i++) {
    XSSFCell hCell = datarow.createCell((short) i);
    if (i < ((List) datamaps.get(g + "")).size())
    hCell.setCellValue(datalist.get(i) + "");
    }
    }
    iStream.close();
    FileOutputStream fOut = new FileOutputStream(file);
    bookn.write(fOut);
    fOut.flush();
    fOut.close();
    }    代码for (String i : templist)里面不执行
      

  5.   


    Tmp声明在for循环外面可以?  好像每次都是进到tmp==null中去了    \\\\\
      

  6.   

    跟poi没啥关系,是添加尾数的一个算法问题判断那个No循环添加尾数就可以了从第一个开始,遇到相同的就累计遇到不同的就从001开始思路是这个,写成代码试试看