java - 如何在 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 列表包含奇数个数据时,它不起作用。那么做我需要的最好的方法是什么?任何人都可以帮助我实现这一目标?提前致谢。
解决方案
如果表应该有两列,那么它需要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();
}
}
推荐阅读
- android - 在非常简单的 if 语句中获取错误运算符“!=”不能应用于“布尔”和“整数”
- android-studio - 在 Android Studio 中,如何查看函数调用链的中间值的类型是什么?
- json - 在 Cloudformation 中传递标签的 json 文件
- sql-server - 如何在 Azure DevOps 管道中将变量注入 SQL 脚本?
- azure-devops - 使用另一个项目的分支在 TFS 中创建一个全新的项目
- java - 如何在 Maven 构建过程中添加 Javac 选项?
- c# - 有没有办法找出谁在运行时试图加载给定的程序集?
- c++ - LNK1104:无法打开 libpjproject-i386-Win32-vc14-Debug-Static.lib
- python - 如何重新组织熊猫数据框,以便将一列中的所有重复值压缩成一行,其中包含另一列中的所有信息?
- php - Asana/php-asana getTasks() 无效请求错误