web-dev-qa-db-fra.com

Comment obtenir de la valeur d'une cellule spécifique d'un fichier xlsx à l'aide d'un poi Java Apache

j'écris un programme Java pour lire une feuille Excel (xlsx) en utilisant Apache Poi Je peux pouvoir parcourir toutes les cellules et obtenir toutes les valeurs. Mais je ne suis pas en mesure d'obtenir une valeur de cellule spécifique, disons E10. Est-il possible de trouver cela? 

S'il vous plaît voir le code que j'ai utilisé pour itérer sur toutes les cellules.

package application;

import Java.io.FileInputStream;
import Java.io.FileOutputStream;
import Java.io.IOException;
import Java.io.InputStream;
import Java.util.Iterator;

import org.Apache.poi.hssf.usermodel.HSSFCell;
import org.Apache.poi.hssf.usermodel.HSSFRow;
import org.Apache.poi.hssf.usermodel.HSSFSheet;
import org.Apache.poi.hssf.usermodel.HSSFWorkbook;

import org.Apache.poi.xssf.usermodel.XSSFCell;
import org.Apache.poi.xssf.usermodel.XSSFRow;
import org.Apache.poi.xssf.usermodel.XSSFSheet;
import org.Apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadFromXLSX {
    public static void readXLSXFile() throws IOException
    {
        InputStream ExcelFileToRead = new FileInputStream("C:\\Test.xlsx");
        XSSFWorkbook  wb = new XSSFWorkbook(ExcelFileToRead);
        XSSFWorkbook test = new XSSFWorkbook(); 
        XSSFSheet sheet = wb.getSheetAt(0);
        XSSFRow row; 
        XSSFCell cell;
        Iterator rows = sheet.rowIterator();
        while (rows.hasNext())
        {
            row=(XSSFRow) rows.next();
            Iterator cells = row.cellIterator();
            while (cells.hasNext())
            {
                cell=(XSSFCell) cells.next();   
                if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING)
                {
                    System.out.print(cell.getStringCellValue()+" ");
                }
                else if(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC)
                {
                    System.out.print(cell.getNumericCellValue()+" ");
                }
                else
                {
                }
            }
            System.out.println();
        }
    }   
}
7
Maruthi Srinivas

Par exemple, pour obtenir E10 de la première feuille de calcul:

wb.getSheetAt(0).getRow(9).getCell(4); 

Remarque: soustrayez-en un, car les index sont basés sur des valeurs nuls.

Vous pouvez également utiliser cette méthode pratique pour mapper E à 4.

wb.getSheetAt(0).getRow(9).getCell(CellReference.convertColStringToIndex("E"));
19
wvdz

Pour obtenir une valeur d'une cellule spécifique dans Excel, vous pouvez utiliser la ligne de code ci-dessous.

wb.getSheetAt(0).getRow(1).getCell(1);
2
Maruthi Srinivas

XSSFSheet a la méthode getRow (int rownum) Elle retourne la ligne logique (base 0). Si vous demandez une ligne non définie, vous obtenez une valeur nulle. C'est-à-dire que la rangée 4 représente la cinquième rangée d'une feuille.

Une fois que vous avez obtenu la ligne, vous pouvez appeler la méthode getCell (int cellnum) de l'objet XSSFRow. Il retourne la cellule à l'index donné (basé sur 0).

2
Devanshu Dwivedi
public class XmlFileRead {

public static void main(String[] args) throws IOException {
    FileInputStream fi = new FileInputStream("abc.xls");
    ArrayList<EmployeeVo> al = new ArrayList<>();
    EmployeeVo evo = null;
    Scanner scanner = null;

    Workbook wb = new XSSFWorkbook(fi);
    Sheet sh = wb.getSheet("Sheet0");
    int starRow = sh.getFirstRowNum();
    int endRow = sh.getLastRowNum();

    for (int i = starRow + 1; i < endRow; i++) {
        scanner = new Scanner(System.in);
        evo = new EmployeeVo();
        Cell c = wb.getSheetAt(0).getRow(i).getCell(1);
        evo.setEmployeeId((int) c.getNumericCellValue());

        Cell c2 = wb.getSheetAt(0).getRow(i).getCell(2);
        evo.setEmployeeName(c2.toString());
        // add to collection
        al.add(evo);
    } // for

    al.forEach(i -> {
        System.out.println(i.getEmployeeId() + " " + i.getEmployeeName());
    });

}
}
1

Juste version-up de la méthode getCell

public XSSFCell getCell(string cellName){
    Pattern r = Pattern.compile("^([A-Z]+)([0-9]+)$");
    Matcher m = r.matcher(cellName);
    if(m.matches()) {
        columnName = m.group(1);
        rowNumber = Integer.parseInt(m.group(2));
        if(rowNumber > 0) {
            return wb.getSheetAt(0).getRow(rowNumber-1).getCell(CellReference.convertColStringToIndex(columnName))
        }
    }
    // throw an exception or return a null
}

Maintenant, vous pouvez facilement obtenir la cellule par cette ligne

getCell("E10")
0
midishero