Для объединенных ячеек содержимое ячейки помещается в первую (верхнюю левую) ячейку объединенной области. Все остальные объединенные ячейки пусты. Итак, основной лог c здесь:
Если ключ, полученный из ключевого столбца, не пуст, значит, возник новый ключ. В противном случае предложения, полученные из столбца предложений, принадлежат последнему полученному ключу.
Если известны ключевой столбец и столбец предложения, а также первая и последняя строка, то будет работать следующее:
Указанный лист :
Код:
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.LinkedHashMap;
class ReadExcelKeySentence {
static Map<String, List<String>> getKeysAndSentences(Sheet sheet, DataFormatter formatter, FormulaEvaluator evaluator,
int keyColumn, int sentenceColumn, int firstRow, int lastRow) {
Map<String, List<String>> keysAndSentences = new LinkedHashMap<String, List<String>>();
List<String> sentences = new ArrayList<String>();
Row row;
Cell cell;
String key;
String sentence;
for (int r = firstRow; r <= lastRow; r++) {
row = sheet.getRow(r); if (row == null) row = sheet.createRow(r);
cell = row.getCell(keyColumn); if (cell == null) cell = row.createCell(keyColumn);
key = formatter.formatCellValue(cell, evaluator);
cell = row.getCell(sentenceColumn); if (cell == null) cell = row.createCell(sentenceColumn);
sentence = formatter.formatCellValue(cell, evaluator);
if (!"".equals(key)) {
sentences = new ArrayList<String>();
sentences.add(sentence);
keysAndSentences.put(key, sentences);
} else {
sentences.add(sentence);
}
}
return keysAndSentences;
}
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("./Excel.xlsx"));
//Workbook workbook = WorkbookFactory.create(new FileInputStream("./Excel.xls"));
DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Sheet sheet = workbook.getSheetAt(0);
Map<String, List<String>> keysAndSentences = getKeysAndSentences(sheet, formatter, evaluator, 1, 2, 1, 9);
System.out.println(keysAndSentences);
workbook.close();
}
}
Производит:
{k1=[s1, s2, s3], k2=[s4], k3=[s5], k4=[s6], k5=[s7, s8], k6=[s9]}