簡體   English   中英

使用Apache POI從Excel讀取由一系列合並單元格索引的多行

[英]Read multiple rows indexed by a series of merged cells from Excel using Apache POI

我正在嘗試使用Apache POI讀取Excel文件。 我的問題是嘗試將一系列行讀取為合並的單元格,同時考慮到此合並包含的行數是任意的。

這張照片

在此處輸入圖片說明

我希望這可能是一個充分的例子。 在這種情況下,我無法提出一個函數來遍歷所有作為屬性的行,並在到達外鍵行時停止。 合並單元格中的“屬性”字符串包含在合並單元格的第一行中。

謝謝您的幫助!

合並區域中的所有單元格都顯示在電子表格XML中。 並且可以讀取行和單元格。 但是XML中缺少其單元格類型。 在POI中,單元格類型返回為Cell.CELL_TYPE_BLANK 盡管這可能是由其他原因引起的,所以僅尋找Cell.CELL_TYPE_BLANK 您還需要檢查單元格是否落在工作表中的合並區域之一內。 您可以這樣做:

public static CellRangeAddress getMergedRegion(Cell cell) {
    Sheet sheet = cell.getSheet();
    for (CellRangeAddress range : sheet.getMergedRegions()) {
        if (range.isInRange(cell.getRowIndex(), cell.getColumnIndex())) {
            return range;
        }
    }
    return null;
}

這將返回包含單元格的CellRangeAddress對象,或者返回null。 那你可以用

Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
    for (Cell cell : row) {
        if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
            CellRangeAddress range = getMergedRegion(cell);
            if (range != null) {
                Cell mergeValue = sheet.getRow(range.getFirstRow()).getCell(range.getFirstColumn());
                System.out.println("Cell " + cell.getAddress() + ": " + "merged cell (" + 
                    range.formatAsString() + ") " + mergeValue.getStringCellValue());
            } else {
                System.out.println("Cell " + cell.getAddress() + ": " + "blank");
            }
        } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
            System.out.println("Cell " + cell.getAddress() + ": " + cell.getStringCellValue());                 
        }
    }
}

以獲取工作表中單元格中的值。 您可能需要處理數字或布爾單元,在我的示例中未顯示這些單元。

而您到底在掙扎什么呢? 如果您需要讀取合並單元格的內容,則可能需要檢查此線程 如果您的問題是“如何確定行中是否存在合並區域(例如,“檢查”-行),您將無法解決將某些“洞察”-邏輯放入解析器的過程,例如“ if col A =='檢查',然后讀取C列”

暫無
暫無

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

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