如何使用 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()
returns 如果该行不存在则为 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);
}
}
}
现在可以遍历行来填充 sheet。
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);
...
}
}
}
我在 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()
returns 如果该行不存在则为 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);
}
}
}
现在可以遍历行来填充 sheet。
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);
...
}
}
}