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了,这个逻辑在上面代码的什么位置写,怎么写?
大家帮忙解决哈啊 本人对这个不是很熟,加上不知道,怎么把这个值串联起来后生成一个新的单元格与前面的值对应
,望热心的朋友帮帮忙
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了,这个逻辑在上面代码的什么位置写,怎么写?
大家帮忙解决哈啊 本人对这个不是很熟,加上不知道,怎么把这个值串联起来后生成一个新的单元格与前面的值对应
,望热心的朋友帮帮忙
解决方案 »
- getHibernateTemplate()与getSession()区别?
- el表达式中获取cookie的问题
- Cannot instantiate the type Interceptor
- spring业务方法出错
- Tomcat5.5 内存问题
- 程序业务逻辑执行时间长之后,下载提示不能出来了
- webwork+Hibernate
- 如何在JAVA中使用ACTIVEX?我用的是VA JAVA,该怎么用?100不够再加。
- 有没有详细教SOAP JAVA编程的书,或是例子
- 在java中如何求得某个月的最后一天
- Spring 怎样给一个类的静态方法注入?
- showmodaldialog 进入action 转到框架页面 问题
如果是,就把它读出来,放到集合里面,然后循环,在循环中设置临时变量用来存要对比的值如果发生变化重新赋值,否则累计加1拼字符串POI用的少,不太熟,但这思路基本上用java基本语法就可以了看看有没有更好的方法
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);
}
如果是要问实现的算法,那么你描述的还是不够清楚:
1、如果有重复值则进行累加,这个值是可能分布在多个sheet内呢,还是只会在一个里出现。如果分布在多个sheet里,是针对每个sheet进行累加,还是所有出现的sheet进行累加。
2、每个sheet里,这个值是一定保证连续出现呢,还是有可能随机在整个sheet里出现。
类似的这些细节你都该说清楚。
当然实现的越多,功能相应更强些,当然逻辑就更复杂
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)里面不执行
Tmp声明在for循环外面可以? 好像每次都是进到tmp==null中去了 \\\\\