0

3 つのシートを含む Excel ファイルを読み取る必要があり、データを次のように表す必要があります。たとえば、各行は 3 つのシートすべてにまたがっています。

row1 = sheet[0].getRow(1) +  sheet[1].getRow(1) + sheet[2].getRow(1)

以下はこれまでに行ったことですが、ご覧のとおり、行はシートごとに定義されていますが、これは間違っています。他のシートからもデータを取得するには、これが必要です。これはどのようにエレガントに行うことができますか?

LinkedHashMap<String, List<LinkedHashMap<String, Object>>> records = 
             new LinkedHashMap<String, List<LinkedHashMap<String, Object>>>();
for (int sIndex = 0; sIndex < wb.getNumberOfSheets(); sIndex++) {
                // System.out.println(sIndex);
                Sheet sheet = wb.getSheetAt(sIndex);
                String key;
                String value = null;
                List<LinkedHashMap<String, Object>> sheetRecords = new ArrayList<LinkedHashMap<String, Object>>();
                for (Row row : sheet) {

                    LinkedHashMap<String, Object> record = new LinkedHashMap<>();
                    for (Cell cell : row) {

                        switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_STRING:
                            key = sheet.getRow(sheet.getFirstRowNum())
                                    .getCell(cell.getColumnIndex()).toString();
                            value = cell.getStringCellValue();
                            record.put(key, value);
                            sheetRecords.add(record);
                            break;
                        case Cell.CELL_TYPE_NUMERIC:
                            key = sheet.getRow(sheet.getFirstRowNum())
                                    .getCell(cell.getColumnIndex()).toString();
                            double number = cell.getNumericCellValue();

                            record.put(key, number);
                            sheetRecords.add(record);
                        case Cell.CELL_TYPE_BLANK:
                            break;
                        default:
                            break;
                        }

                    }

                }

                records.put(sheet.getSheetName(), sheetRecords);

            }
4

1 に答える 1

1

外側の for ループを使用して、行をインデックスで反復処理する必要があります。擬似コード:

maxRows := firstSheetInWorkbook->getNumberOfRows();
for (row := 0..maxRows)
   rowResult := new RowResult
   for (sheet := 0..maxSheets)
      rowResult->add(processRowForSheet(row, sheet))
于 2012-12-19T14:12:15.690 に答える