3 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
行和列均以“i”鍵關(guān)閉,因此您將沿對角線遍歷紙張。
但當然也要去做其他人推薦的事情,他們都是很好的建議。
通常,在處理二維信息塊時,我發(fā)現(xiàn)先對行進行一個循環(huán),然后在該循環(huán)中嵌套一個對列的循環(huán)(反之亦然),這很有用。
例如
for (y = startRow; y <= maxRow; y++) {
....
for (x = startCol; x <= maxCol; x++) {
.... // do something to each column in the current row
cell = sheet1.getRow(y).getCell(x);
.....

TA貢獻1802條經(jīng)驗 獲得超10個贊
好的,有幾件事。
HSSFSheet sheet1 = workSheet.getSheetAt(0);
在循環(huán)之外聲明。for 循環(huán)的每次迭代都使用同一張工作表,因此只需調(diào)用一次。您獲取單元格數(shù)據(jù) (
String data = sheet1.getRow(i+1).getCell(i).toString();
) 的邏輯不會返回相同的列。在第一次迭代中,您將得到 (R)ow 1 : (C)olumn 0。下一次迭代將返回 R2 : C1,然后是 R2:C2,然后是 R3:C3,等等。注意您對角線的模式沿著列向下,而不是垂直。行從 0 開始。
您只需
workSheet.write(output_file);
在完成所有處理后即可。如果該行不存在,您將得到一個
NullPointerException
當您每次迭代都使用一個唯一的Cell時,您只需在循環(huán)中聲明它(因此不需要在
Cell cell = null;
循環(huán)之外)。
這是一個例子:
try {
FileInputStream fis = new FileInputStream(excelPath);
Workbook workbook = new HSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);
for (int i = 0; i < 5; i++) {
Row row = sheet.getRow(i);
if (row != null) {
Cell cell = row.getCell(0);
cell.setCellValue("Updated cell.");
}
}
FileOutputStream output_file = new FileOutputStream(excelPath);
workbook.write(output_file);
output_file.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}

TA貢獻1815條經(jīng)驗 獲得超13個贊
我認為在 for 循環(huán)內(nèi)移動 Cell 引用應(yīng)該可以解決這個問題。
細胞細胞=空;
此外,如果您在 else 塊中遇到 NullPointerException,您可能還需要移到 if 塊之外
單元格=sheet1.getRow(i+1).getCell(i+2)
像這樣的東西...
HSSFSheet sheet1 = workSheet.getSheetAt(0);
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);
}
workSheet.write(output_file)
}
添加回答
舉報