スプレッドシート内で文字列 'Total'を含むセルを探していますそのセルが常に同じセル/列(0ベースのインデックスの10番目のセル)である別のセルの合計値を見つける行を使用します。Java POI:文字列値を持つExcelセルを見つけて、その位置を使用して別のセルを見つける位置(行)を取得する方法
私はエラー(構文)を持っていない、次のコード、が、findCellメソッドが返すされていないていたrowNum値:
public static void main(String[] args) throws IOException{
String fileName = "C:\\file-path\\report.xls";
String cellContent = "Total";
int rownr=0, colnr = 10;
InputStream input = new FileInputStream(fileName);
HSSFWorkbook wb = new HSSFWorkbook(input);
HSSFSheet sheet = wb.getSheetAt(0);
rownr = findRow(sheet, cellContent);
output(sheet, rownr, colnr);
finish();
}
private static void output(HSSFSheet sheet, int rownr, int colnr) {
/*
* This method displays the total value of the month
*/
HSSFRow row = sheet.getRow(rownr);
HSSFCell cell = row.getCell(colnr);
System.out.println("Your total is: " + cell);
}
private static int findRow(HSSFSheet sheet, String cellContent){
/*
* This is the method to find the row number
*/
int rowNum = 0;
for(Row row : sheet) {
for(Cell cell : row) {
while(cell.getCellType() == Cell.CELL_TYPE_STRING){
if(cell.getRichStringCellValue().getString() == cellContent);{
rowNum = row.getRowNum();
return rowNum;
}
}
}
}
return rowNum;
}
private static void finish() {
System.exit(0);
}
}
ありがとう@msi。提案されたコードは問題を修正し、完全に機能しました。私はプログラミングに比較的新しいです、あなたに尋ねることができます:1.なぜあなたはwhileステートメントを変更し、2. forループの戻り値= 0.なぜなら、もう一度ありがとう! – lv10
'while'ループを使うと、 'total-cell'の左のすべてのセルがstringで埋められていると仮定しています。たとえば、次のようなセルの場合:| | 1 |合計| 'while'は1の値で中断するため、whileと一緒に見つけることはできません。 'total-cell'が見つからない場合に備えて0を返します。 – msi
2つの文字列を比較するには、equalsメソッドを使用する必要があります。 '=='はオブジェクトではなくプリミティブ型を比較するために使われます。 getString()はObjectを返します。 Stringsについての詳細は、String poolとinternメソッドを参照してください。これは、 '=='を使って比較したときに、正しいものが見つかる場所です。 私はまた、ユーザー入力が文字列の最後に余分なスペースを入れるのが好きなので、トリムメソッドを使用しました。 – msi