数组—如何在java中将数据动态打印到ms word表

vwoqyblh  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(301)

我有一个 List<String[]> 我从一个csv文件中填充它。

List<String[]> csvData = ReadCSV.readAll();

因此,我需要将这些数据放入一个表中,该表根据csv列表的大小有许多行,但只有2列。所以我需要把这些数据打印到 Zig-Zag 顺序如下。

_______________________________
|   Data One   |   Data Two   |
_______________________________
|   Data Three |   Data Four  |
_______________________________
|   Data Five  |   Data Six   |
_______________________________

所以我有点搞不懂怎么做才能得到两个 String[] 一次收集数据。因为 List<String[]> 如下所示,

[1st, Data One]
[2nd, Data Two]
[3rd, Data Three]
[4th, Data Four]

所以我试着打印数据如下,

for (int i = 0; i < csvData.size(); i = i + 2) {
    String[] arrayOne = csvData.get(i);
    String[] arrayTwo = csvData.get(i + 1);

    // Print in word
    table.getRow(i).getCell(0).setParagraph(paragraph that contains arrayOne data);
    table.getRow(i).getCell(1).setParagraph(paragraph that contains arrayTwo data);
}

但是使用这种方法,如果csv文件和 table.getRow(i) 也不能正常工作。我也尝试过数组合并,但当csv列表中有奇数个数据时就不起作用了。那么,做我需要的事情的最佳方法是什么呢?有人能帮我做到这一点吗?提前谢谢。

n3ipq98p

n3ipq98p1#

如果表有两列,那么它需要 int rows = (int)Math.ceil(csvData.size()/2d); .
要填充表,需要迭代器 r 对于行和迭代器 c 对于列和迭代器 i 用于迭代列表。只有一个单元格值可以设置,如果 i < csvData.size() .
完整的工作示例:

import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;
import java.util.*;

public class CreateWordTableFromList {

 public static void main(String[] args) throws Exception {

  List<String[]> csvData = new ArrayList<String[]>();
  csvData.add(new String[]{"1st", "Data One"});
  csvData.add(new String[]{"2nd", "Data Two"});
  csvData.add(new String[]{"3rd", "Data Three"});
  csvData.add(new String[]{"4th", "Data Four"});
  csvData.add(new String[]{"5th", "Data Five"});
  csvData.add(new String[]{"6th", "Data Six"});
  csvData.add(new String[]{"7th", "Data Seven"});
  //csvData.add(new String[]{"8th", "Data Eight"});

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run = paragraph.createRun();  
  run.setText("The table");

  int cols = 2;
  int rows = (int)Math.ceil(csvData.size()/2d);
  XWPFTable table = document.createTable(rows, cols);
  XWPFTableRow row;
  XWPFTableCell cell;
  int i = 0;
  for (int r = 0; r < rows; r++) {
   row = table.getRow(r);
   for (int c = 0; c < cols; c++) {
    cell = row.getCell(c);
    if (i < csvData.size()) cell.setText(csvData.get(i)[1]);
    i++;
   }
  }

  FileOutputStream out = new FileOutputStream("CreateWordTableFromList.docx");
  document.write(out);
  out.close();
  document.close();

 }
}
ergxz8rk

ergxz8rk2#

为了扩展我的评论,您可以使用 if 声明:

for (int i = 0; i < csvData.size(); i = i + 2) {
    String[] arrayOne = csvData.get(i);
    // Print in word
    table.getRow(i).getCell(0).setParagraph(paragraph that contains arrayOne data);

    //Check if the second bit of data in a row exists, otherwise ignore it
    if (csvData.size() > i){
        String[] arrayTwo = csvData.get(i + 1);
        table.getRow(i).getCell(1).setParagraph(paragraph that contains arrayTwo data);
    }
}

相关问题