如何使合并后的单元格与另一列的相应单元格进行分组?

有2个列,关键列和句子列。现在,在Key列中,一些单元格被合并,而在Sentence列中,它们都是独立的单元格。

在下面的例子中,k1和k5是合并的单元格。

    | Key  | Sentence |
    | ---- | -------- |
    |  k1  |    s1    |
    |      |    s2    |
    |      |    s3    |
    |  k2  |    s4    |
    |  k3  |    s5    |
    |  k4  |    s6    |
    |  k5  |    s7    |
    |      |    s8    |
    |  k6  |    s9    |

我需要将Key和Sentence变成我的xml文件的Key-Pair值,我已经对xml部分有了一个想法。

我知道我们可以使用HashMap或LinkedHashMap来处理键值对。但是,我发现很难将Sentence列的单元格与key值组合成一个单元格(value)。

如何将Sentence列中的单元格与Key列中的对应单元格进行分组?

我可以通过POI读取excel文件。我就是被这部分卡住了。我也搜索过和我的问题类似的答案,但只能找到不相关的答案,但不知怎么给我出主意。

excel问题的示例图片

解决方案:

对于合并后的单元格,单元格内容被放置在合并区域的第一个(左上角)单元格中。所有其他合并单元格都是空的。所以这里的主要逻辑是。

如果从键列中得到的键不是空的,那么一个新的键就发生了。否则,从句子列得到的句子属于最后得到的键。

如果键列和句子列以及第一行和最后一行是已知的,那么下面的工作就可以了。

工作表给定

enter image description here

代码:

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]}

给TA打赏
共{{data.count}}人
人已打赏
未分类

谷歌播放商店中的Apk文件更新

2022-10-14 15:35:36

未分类

删除商品时,重新计算翩翩上的总价。

2022-10-14 15:35:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索