簡體   English   中英

Java Apache Poi(第1部分)

[英]java apache poi (part 1)

  • Excel文件(staff.xls)
    身份證名
    1阿里
    2阿布
    3艾哈邁德

  • Java代碼

     FileInputStream inputFile = new FileInputStream("staff.xls"); XSSFWorkbook workbook = new XSSFWorkbook(inputFile); XSSFSheet spreadsheet = workbook.getSheetAt(0); XSSFRow row; Cell cell; Iterator<Row> rowIterator = spreadsheet.iterator(); while(rowIterator.hasNext()){ row = (XSSFRow)rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()){ cell = cellIterator.next(); cell.setCellType(Cell.CELL_TYPE_STRING); switch(cell.getCellType()){ case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue()+"|"); break; case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue()+"|"); break; } } System.out.println(); } 
  • 我的問題是:
    (1)如何將記錄放入數組或數組列表中?
    (2)創建后,如何分割“ |”?

只需在第一個while之前創建List of List變量,在每次迭代的開始處創建一個新的List,將元素放入此列表,然后在迭代結束時將此列表添加到Lists的主列表中。 您應該得到類似的內容:

...

List<List<String>> records = new ArrayList<List<String>>();

while(rowIterator.hasNext()){
    List<String> record = new ArrayList<String>();

    row = (XSSFRow)rowIterator.next();

    Iterator<Cell> cellIterator = row.cellIterator();

    while(cellIterator.hasNext()){
        cell = cellIterator.next();
        cell.setCellType(Cell.CELL_TYPE_STRING);

        switch(cell.getCellType()){
            case Cell.CELL_TYPE_STRING:
                record.add(cell.getStringCellValue());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                record.add(Double.toString(cell.getNumericCellValue()));
                break;
        }
    }

    records.add(record);
}

for (List<String> record : records) {
    for (String s : record) {
        System.out.print(" " + s);
    }

    System.out.println();
}

...

另請注意,您不需要添加|。 符號,因此最終無需拆分。 但是一般來說,要拆分字符串,可以使用String#split()方法來接受正則表達式。 您需要像這樣用它來分割“ |” (您需要在\\之前加上\\,因為它是一個特殊的正則表達式字符):

for (String record : records) {
    System.out.println(record);

    String[] elements = record.split("\\|");
    for (String element : elements) {
        System.out.println(" -> " + element);
    }
}

在這里,我所做的是刪除管道符號並將其添加到“數組列表”中。 希望這對你有幫助。

FileInputStream inputFile = new FileInputStream("staff.xls");
XSSFWorkbook workbook = new XSSFWorkbook(inputFile);
XSSFSheet spreadsheet = workbook.getSheetAt(0);
XSSFRow row;
Cell cell;

List<String> l2 = new LinkedList<String>();
Iterator<Row> rowIterator = spreadsheet.iterator();

while(rowIterator.hasNext()){
    row = (XSSFRow)rowIterator.next();

    Iterator<Cell> cellIterator = row.cellIterator();

    while(cellIterator.hasNext()){
            cell = cellIterator.next();
            cell.setCellType(Cell.CELL_TYPE_STRING); 

            switch(cell.getCellType()){
            case Cell.CELL_TYPE_STRING:

            l2.add(cell.getStringCellValue());

                break;
            case Cell.CELL_TYPE_NUMERIC:

                l1.add((int) cell.getNumericCellValue());
                System.out.println(l1);
                break;
            }
        }
    }

    System.out.println(l2);
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM