首页 > 解决方案 > 如何在 Java 中动态地将数据打印到 ms 字表

问题描述

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

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

所以我需要将这些数据放入一个有很多行的表中,具体取决于 CSV 列表的大小,但只有 2 列。Zig-Zag所以我需要按如下顺序将这些数据打印到word文档中。

_______________________________
|   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);
}

table.getRow(i)但是使用这种方法,如果 CSV 文件中有奇数个数据并且也无法正常工作,我会收到错误消息。我也尝试了数组合并,但当 CSV 列表包含奇数个数据时,它不起作用。那么做我需要的最好的方法是什么?任何人都可以帮助我实现这一目标?提前致谢。

标签: javaarrayslistms-wordapache-poi

解决方案


如果表应该有两列,那么它需要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();

 }
}

推荐阅读