java1349033501 2017-09-02 09:55 采纳率: 0%
浏览 12159

poi给word的表格添加新的一行并添加数据,怎么所有的数据都挤在一行啊

public void newRow(XWPFDocument document,int number,List list) throws Exception{
//获取所有表格

List tables = document.getTables();

//这里简单取第一个表格

XWPFTable table = tables.get(number);

    //获取表头
    XWPFTableRow header = table.getRow(1); 

    for (int h = 1 ; h <= list.size() ; h++) {
        //添加新的一行  
        //第一个参数是新增行的样式,在原表中取XWPFTableRow header = table.getRow(1);  
        //第二个参数是表示插入到第几行
        table.addRow(header,h);
        }

    List<XWPFTableRow> rows = table.getRows();
    System.out.println("list数量"+rows.size());


    for(int i = 0; i < list.size();i++){

// XWPFTableRow row = table.getRow(i+1);
String[] string = list.get(i);
for(int j = 0 ;j < string.length;j++){
System.out.println("行"+rows.get(i+2).getCell(j).getText());
// rows.get(i+2).getCell(j).setText(string[j]);

                rows.get(i+2).getTableCells().get(j).setText(string[j]);
            }
    }
}
  • 写回答

5条回答 默认 最新

  • Athealy3 2019-08-27 16:15
    关注

    你的问题的原因是:XWPFTableRow header = table.getRow(1); 这句取到的是一个指针地址,当你用table.addRow(header,h);的时候创建了XWPFTableRow的实例,这个被创建的实例里的cell的指针都是直接引用的header里cell的地址值,意思就是你用这个方法创建的行里的每个cell实际地址都是指向了header里的cell的地址,所以你所有的操作都会被填充到了header这行里的cell中去。
    二楼其实给出了部分解决方法,但高人说话很简约,所以你没看懂,我这里给出一个方案就是先用XWPFTable.insertNewTableRow(int pos)在指定行创建XWPFTableRow实例,然后将header的TrPr值set到新创建的XWPFTableRow实例中,如果这个新的行实例里有cell的话,也要把header里的cell的TrPr值对应的set到新行的cell里去。

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站