programing

Excel 파일에서 Apache POI XSSF 읽기

muds 2023. 6. 15. 22:07
반응형

Excel 파일에서 Apache POI XSSF 읽기

Apache의 XSSF 형식을 사용하여 xlsx 파일을 읽는 방법에 대해 간단한 질문이 있습니다.

현재 제 코드는 다음과 같습니다.

InputStream fs = new FileInputStream(filename);   // (1)
XSSFWorkbook wb = new XSSFWorkbook(fs);           // (2)
XSSFSheet sheet = wb.getSheetAt(0);               // (3)

...관련된 모든 것들이 수입되었습니다.제 문제는 제가 런을 칠 때 거의 무한 루프에서 라인 (2)에 걸린다는 것입니다. filename그냥 문자열입니다.

만약 누군가가 이것을 고치는 방법에 대한 샘플 코드를 나에게 줄 수 있다면 나에게 있다면 정말 감사합니다.지금 제가 원하는 것은 xlsx 파일에서 단일 셀로 읽는 것입니다. xls 파일에 대해 HSSF를 사용하고 있었고 문제가 없었습니다.

도와줘서 고마워, 앤드류

이것이 당신의 질문에 답할 것이라고 믿습니다: http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook . http://poi.apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook

간단히 말해, 코드는 다음과 같아야 합니다.

InputStream inp = new FileInputStream("workbook.xlsx");
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt(0);
Row row = sheet.getRow(2);
Cell cell = row.getCell(3);
InputStream inp = null;
        try {
            inp = new FileInputStream("E:/sample_poi.xls");

            Workbook wb = WorkbookFactory.create(inp);
            Sheet sheet = wb.getSheetAt(0);
            Header header = sheet.getHeader();

            int rowsCount = sheet.getLastRowNum();
            System.out.println("Total Number of Rows: " + (rowsCount + 1));
            for (int i = 0; i <= rowsCount; i++) {
                Row row = sheet.getRow(i);
                int colCounts = row.getLastCellNum();
                System.out.println("Total Number of Cols: " + colCounts);
                for (int j = 0; j < colCounts; j++) {
                    Cell cell = row.getCell(j);
                    System.out.println("[" + i + "," + j + "]=" + cell.getStringCellValue());
                }
            }

        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(FieldController.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                inp.close();
            } catch (IOException ex) {
                java.util.logging.Logger.getLogger(FieldController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

파일을 InputStream으로 분할하는 이유는 무엇입니까?XSSF Workbook에는 단순히 String 경로를 사용하는 생성자가 있습니다.문자열의 경로를 하드 코드화하면 됩니다.워크북을 만든 후에는 이 워크북에서 XSSF 시트를 만들 수 있습니다.그런 다음 XSSCells. 마지막으로 단일 셀의 내용을 읽을 수 있습니다(셀은 기본적으로 x,y 위치를 기반으로 함).

다음을 시도할 수 있습니다.

private static void readXLSX(String path) throws IOException {
    File myFile = new File(path);
    FileInputStream fis = new FileInputStream(myFile);

    // Finds the workbook instance for XLSX file
    XSSFWorkbook myWorkBook = new XSSFWorkbook (fis);

    // Return first sheet from the XLSX workbook
    XSSFSheet mySheet = myWorkBook.getSheetAt(0);

    // Get iterator to all the rows in current sheet
    Iterator<Row> rowIterator = mySheet.iterator();

    // Traversing over each row of XLSX file
    while (rowIterator.hasNext()) {
        Row row = rowIterator.next();

        // For each row, iterate through each columns
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {

            Cell cell = cellIterator.next();

            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                System.out.print(cell.getStringCellValue() + "\t");
                break;
            case Cell.CELL_TYPE_NUMERIC:
                System.out.print(cell.getNumericCellValue() + "\t");
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                System.out.print(cell.getBooleanCellValue() + "\t");
                break;
            default :

            }
        }
        System.out.println("");
    }
}

이것은 잘 작동합니다: 시도해 보세요.

File filename = new File("E:/Test.xlsx");
FileInputStream isr= new FileInputStream(filename);

Workbook book1 = new XSSFWorkbook(isr);
Sheet sheet = book1.getSheetAt(0);  
Iterator<Row> rowItr = sheet.rowIterator();
public class ExcelReader{
   public String path;
   public static FileInputStream fis;

   public ExcelReader(){
      System.out.println("hello");
   }

   public ExcelReader(String path){
      this.path=path;
      fis=new FileInputStream(path);
      XSSFWorkbook workbook=new XSSFWorkbook(fis);
      XSSFSheet sheet=workbook.getSheet("Sheet1");//name of the sheet
      System.out.println(sheet.getSheetName());
      System.out.println(sheet.getLastRowNum());
      System.out.println(sheet.getRow(2).getCell(3));
  }
  public static void main(String[] args) throws IOException {
      ExcelReader excel=new ExcelReader("path of xlsx");
  }
}

저도 같은 오류가 있습니다, 방금 같은 버전으로 폼 종속성을 업데이트했습니다.효과가 있었습니다.

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>
// Load sheet- Here we are loading first sheet only
XSSFSheet xlSheet = wb.getSheetAt(0);

첫 번째 시트만 인식하는 코드 - 내 Excel에는 여러 시트가 있으므로 변경해야 하는 문제가 있습니다.sheet2로.sheet1(getSheetAt(0))...

언급URL : https://stackoverflow.com/questions/5985318/apache-poi-xssf-reading-in-excel-files

반응형