Szukam komórki w arkuszu kalkulacyjnym, który ma ciąg "Razem", a następnie użyj wiersza, w którym komórka ma znaleźć całkowitą wartość w innej komórce, która jest zawsze tą samą komórką/kolumną (10. komórka w indeksie 0).Jawne POI: Jak znaleźć komórkę Excel z wartością ciągu i uzyskać jej pozycję (wiersz), aby użyć tej pozycji do znalezienia innej komórki
Mam następujący kod, który nie ma błędów (składni), ale metoda findCell nie zwraca wartość 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);
}
}
Bardzo dziękuję @ msi. Sugerowany kod naprawił problem, działał idealnie. Jestem względnie nowy w programowaniu, mogę zapytać: 1. dlaczego zmieniono instrukcję while i 2. Dlaczego zwrot pętli for = 0. ponownie dzięki! – lv10
Kiedy używasz pętli 'while' zakładasz, że wszystkie Komórki po lewej od" total-cell "są wypełnione łańcuchem. Na przykład komórki takie jak to: | | 1 | Razem | Znalezienie FAIL zostanie znalezione, ponieważ 'while' złamie się na wartości 1. Powracanie 0 na wypadek, gdyby nie znaleziono" total-cell ". – msi
Aby porównać dwa łańcuchy, należy użyć metody równości. '==' służy do porównywania typów pierwotnych, a nie obiektów. I getString() zwraca obiekt. Jeśli chcesz dowiedzieć się więcej o łańcuchach, przeczytaj o pule łańcuchów i metody stażu. Tutaj można znaleźć przypadki, w których porównanie z użyciem '==' jest poprawne. Użyłem również metody przycinania tylko dlatego, że dane wejściowe użytkownika zawierają dodatkowe spacje na końcu łańcucha. – msi