source

Java Apache POI 라이브러리를 사용하여 XLSX 파일에서 특정 셀의 값을 가져오는 방법

manycodes 2023. 9. 18. 22:34
반응형

Java Apache POI 라이브러리를 사용하여 XLSX 파일에서 특정 셀의 값을 가져오는 방법

저는 Apache POI 라이브러리를 이용하여 엑셀시트(XLSX 확장자 있음)에서 데이터를 읽기 위한 자바 프로그램을 작성하고 있습니다.나는 모든 세포를 반복할 수 있고 모든 값을 얻을 수 있습니다.그러나 나는 특정 셀 값을 얻을 수 없다고 E10은 말합니다.이것을 할 수 있는 방법이 없을까요?

제가 셀을 통해 반복하는데 사용한 아래 코드를 참조해주세요.

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();
        }
    }   
}

예를 들어, 첫 번째 워크시트의 E10을 구하려면:

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

참고: 인덱스가 null 기반이므로 1을 풉니다.

이 편의 방법을 사용하여 E를 4로 매핑할 수도 있습니다.

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

엑셀에서 특정 셀의 값을 얻으려면 아래 코드 라인을 사용하면 됩니다.

wb.getSheetAt(0).getRow(1).getCell(1);

XSSFSheet에 getRow 메서드(intrownum)가 있습니다.논리 행(0 기반)을 반환합니다.정의되지 않은 행을 요청하면 null이 됩니다.이것은 4행이 시트의 다섯 번째 행을 나타낸다는 것입니다.

행을 얻으면 XSSFRow 개체의 getCell(intcellnum) 메서드를 호출할 수 있습니다.주어진 (0 기준) 인덱스에서 셀을 반환합니다.

버전업만 하면 됩니다.getCell방법

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

이제 이 선으로 쉽게 셀을 얻을 수 있습니다.

getCell("E10")
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());
    });

}
}

언급URL : https://stackoverflow.com/questions/35991046/how-to-get-value-from-a-specific-cell-from-xlsx-file-using-java-apache-poi-libra

반응형