Apache poi как да получа координати на клетки

Опитвам се да получа координатите на клетка, точно сега пиша следващия код:

for (Row row : sheet) {
   for(Cell cell : row){
      // how to get a cell coordinates?
   }
}

Как мога да получа координатите на клетка (dx1, dx2, dy1, dy2)?


person Vladimir    schedule 20.02.2014    source източник


Отговори (3)


най-краткият начин за получаване на клетъчен адрес е:

cell.getAddress().formatAsString()

за да получите име на лист, направете следното

cell.getSheet().getSheetName()

person Gian Marco Artioli    schedule 13.06.2017

Очевидното решение беше предложено от user2310289, но това няма да работи като итераторите пропускане на празни редове и клетки.

Така че, една опция е да итерирате ръчно, като се грижите за празните клетки, и тогава винаги ще знаете къде е клетката ви с код като:

// Decide which rows to process
int rowStart = Math.min(15, sheet.getFirstRowNum());
int rowEnd = Math.max(1400, sheet.getLastRowNum());

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
   Row r = sheet.getRow(rowNum);

   int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT);

   for (int cn = 0; cn < lastColumn; cn++) {
      Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
      if (c == null) {
         // The spreadsheet is empty in this cell
      } else {
         // Do something useful with the cell's contents
         CellReference cr = new CellReference(c);
         System.out.println("Cell at " + rowNum + "," + cn + " found, that's " + cr.formatAsString());
      }
   }
}

Или, ако искате да използвате лесните итератори, трябва да потърсите индекса на ред и клетка от клетка, напр.

for (Row r : sheet) {
   for (Cell c : r) {
       int columnNumber = c.getColumnIndex();
       int rowNumber = c.getRow().getRowNum();
       CellReference cr = new CellReference(c);
       System.out.println("Cell at " + rowNum + "," + columnNumber + " found, that's " + cr.formatAsString());
   }
}
person Gagravarr    schedule 20.02.2014
comment
Мислех, че ще има по-добър начин. Въпреки това изглежда, че ОП наистина иска нещо друго въз основа на другите му въпроси. Ще изтрия отговора си. - person Scary Wombat; 21.02.2014
comment
Защо поставяте максимум на rowEnd, т.е. 1400? това необходимо ли е по някаква причина? Ако има повече от 1400 реда, целият файл няма да бъде обработен. - person RTF; 18.05.2014
comment
Задайте го според нуждите си за вашия случай на употреба или го премахнете, зависи изцяло от вас! Това просто дава пример за това как ограничавате редовете - person Gagravarr; 19.05.2014

Направих следния код за получаване на координати на клетката на Excel. Надявам се това да ви помогне.

public static void searchSheet(String searchText, XSSFSheet sheet)
{

    int flag=0;
    for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++)
    {
        XSSFRow row = sheet.getRow(i);
        for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++)
        {
            XSSFCell cell = row.getCell(j);
            String CellData=cell.toString();
            if(searchText.equals(CellData))
            {
                flag=1;
                CellData=row.getCell(j+1).toString();
                System.out.println(CellData);
                System.out.println("String Found At Row="+ i +" and At Column="+j);


            }

         }
        break;
    }

    if(flag==0)
    {
        System.out.println("String Not Found");
    }

}
person Rahul Karankal    schedule 11.02.2016
comment
Не разбирам защо добавихте този ред CellData=row.getCell(j+1).toString(); докато имахте това, String CellData=cell.toString(); Както и да е, оцених начина, по който отговорихте, като решение за търсене. Беше ми полезно - person Ishimwe Aubain Consolateur; 07.03.2018