繁体   English   中英

如何使用Java以列方式在excel中编写数据列表?

[英]How to write a list of data in excel in column wise using Java?

我在ArrayList有一个数据列表,其中包含标题以及与之关联的值。 像下面,

Fruits 
Apple 
Orange 
******
Vegetables 
Beans
Carrot 
Brinjal
Cucumber 
******
Colors
Orange 
Blue
Red
Green
Yellow

Now, I want to write the values in `excel` with each heading and the associated values in column-wise. Like below,

Fruits   Vegetable   Colors
Apple    Beans       Orange 
Orange   Carrot      Blue
         Brinjal     Red
         Cucumber    Green
                     Yellow

我正在用 java 编写代码并使用apache.poi.xssf.usermodel库来处理excel操作。 我在这里面临的问题是,当我编写第二个标题和相关值时,第一个标题及其值由于Row创建代码而被清除

XSSFRow row = outputSheet.createRow(rowNumValue);

谁能帮我完成这件事?

您需要做的是第一次使用createRow()来...创建行,并使用getRow()进行所有后续访问。 这样,您将获得工作表对象中已有的行,而不是创建一个新行。 如果该行不存在,则getRow()返回 null,因此您可以执行以下等效操作:

XSSFRow row = outputSheet.getRow(rowNumValue) ? outputSheet.getRow(rowNumValue) : outputSheet.createRow(rowNumValue);

可以立即对单个列表进行操作,但使用合理的数据结构更容易。 由于每一列可以有不同的行数,所以制作一个列列表,每列一个行列表

List<List<String>> makeColumns(List<String> linearList) {
    List<List<String>> columns = new ArrayList<>();
    int column = 0;
    for (String s : linearList) {
        if (s.startsWith("***")) {
            ++column;
        } else {
            while (column >= columns.size()) {
                columns.add(new ArrayList<>());
            }
            columns.get(column).add(s);
        }
    }
}

现在可以遍历行以填充工作表。

List<List<String>> columns = makeColumns(...);
int rows = columns.stream().mapToInt(List::size).max().orElse(0);

for (int rowi = 0; rowi < rows; ++rowi) {
    XSSFRow row = outputSheet.createRow(rowi + 1);
    for (int coli = 0; coli < columns.size(); ++coli) {
        if (rowi < columns.get(coli).size()) {
            String value = columns.get(coli).get(rowi);
            row.createCell(coli);
            ...
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM