【发布时间】:2019-10-28 06:22:37
【问题描述】:
我正在尝试更新 Excel 工作表中的一列,但只有第一行正在更新。第二次迭代不起作用。有人可以帮我吗?下面是我正在尝试的代码。
String excelPath = "path";
String YES = "Updated YES";
String NO = "Updated NO";
try {
FileInputStream fis= new FileInputStream(excelPath);
HSSFWorkbook workSheet = new HSSFWorkbook(fis);
Cell cell = null;
FileOutputStream output_file =new FileOutputStream(excelPath);
for (int i = 0; i < TCID.size(); i++) {
HSSFSheet sheet1 = workSheet.getSheetAt(0);
String data = sheet1.getRow(i+1).getCell(i).toString();
if(data.equals(TCID.get(i))){
cell = sheet1.getRow(i+1).getCell(i+2);
cell.setCellValue(YES);
workSheet.write(output_file);
}else {
cell.setCellValue(NO);
workSheet.write(output_file);
}
}
fis.close();
output_file.close();
workSheet.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我的最新代码如下。现在它正在更新列,但最后一行没有更新。我错过了什么。
FileInputStream fis= new FileInputStream(excelPath);
HSSFWorkbook workSheet = new HSSFWorkbook(fis);
HSSFSheet sheet1 = workSheet.getSheetAt(0);
//FileOutputStream output_file =new FileOutputStream(excelPath);
for (int i = 0; i < TCID.size(); i++) {
String data = sheet1.getRow(i+1).getCell(0).toString();
Cell cell = sheet1.getRow(i+1).getCell(2);
if(data.equals(TCID.get(i))){
cell.setCellValue(YES);
}else {
cell.setCellValue(NO);
}
}
fis.close();
//output_file.close();
//workSheet.close();
FileOutputStream output_file =new FileOutputStream(excelPath);
workSheet.write(output_file);
output_file.close();
【问题讨论】:
-
在您的
else块中,您没有填充cell变量 -
我试过了,还是一样。
-
还将
HSSFSheet sheet1 = workSheet.getSheetAt(0);移动到您的 for 循环之前 - 添加一些调试以确保您循环不止一次,如果这不能解决您的问题,请使用您的最新代码编辑您的问题, -
我已经更新了代码,它正在更新列,但不是完整的列。我的方法签名有列表。我正在传递这个列表,我正在比较 Excel 的第一列。预期结果应该是,如果两个值都匹配,它应该将第三列更新为是,其余值应该更新为否。我不确定,如果我正确地迭代循环。现在我正在迭代列表,我想我应该迭代整个第一列。让我知道这是否有意义。还有如何迭代整个列?
标签: java