java导出word复杂表格

主要问题和要求:
1.以此为模板,实现java填写并导出。
2._____年 需要填写。
3.表头的月日需要填写。
4.检查内容不确定哪里是拆分单元格。动态变化的。
5.表格不一定是多少页。

原始表格
在这里插入图片描述
在这里插入图片描述
最终表格
在这里插入图片描述

在这里插入图片描述

   public static void main(String[] args) throws IOException, InvalidFormatException {

        /**
         * 加载文档/填写_____年
         */
        Document doc = new Document();
        doc.loadFromFile("D:/1.doc");
        for (int i = 0; i < doc.getSections().getCount(); i++) {
            int j = doc.getSections().get(i).getParagraphs().getCount();
            for (int k = 0; k < j; k++) {
                Paragraph paragraph = doc.getSections().get(i).getParagraphs().get(k);
                paragraph.getText().indexOf("年");
                doc.setReplaceFirst(true);
                paragraph.replace("     ", "     2020", false, true);
            }
        }

        /**
         * 删除表头的 月 日
         */

        Table table = null;
        for (int k = 0; k < doc.getSections().getCount(); k++) {
            for (int t=0;t<doc.getSections().get(k).getTables().getCount();t++){
                try {
                    table = doc.getSections().get(k).getTables().get(t);
                    //遍历表格每行
                    for (int j = 0; j < table.getRows().getCount(); j++) {
                        if (j == 0) {
                            for (int d = 3; d < table.getRows().get(0).getCells().getCount(); d++) {
                                TableCell cell = table.getRows().get(0).getCells().get(d);
                                cell.getChildObjects().clear();
                            }
                        }
                    }
                } catch (Exception e) {
                    System.out.println("这一页没表格");
                }
            }
        }

        /**
         * 插入数据
         */
        for (int k = 0; k < doc.getSections().getCount(); k++) {
            for (int t=0;t<doc.getSections().get(k).getTables().getCount();t++){
                try {
                    table = doc.getSections().get(k).getTables().get(t);
                    //遍历表格每行
                    for (int j = 0; j < table.getRows().getCount(); j++) {
                        if (j == 0) {
                            for (int d = 3; d < table.getRows().get(0).getCells().getCount(); d++) {
                                TableCell cell = table.getRows().get(0).getCells().get(d);
                                cell.addParagraph().appendText("2020-9-9");
                            }
                        }else if (IsNumber.isNumeric(table.getRows().get(j).getCells().get(0).getFirstParagraph().getText().trim())){//判断第一列是不是序号,数字(区分开执行人和备注)
                            if (table.getRows().get(j).getCells().getCount()==table.getRows().get(0).getCells().getCount()){//判断一行几列,第三列是否是第二项的子项,这是否的情况下,聪第四列开始填
                                for (int q=3;q<table.getRows().get(j).getCells().getCount();q++){
                                    table.getRows().get(j).getCells().get(q).getFirstParagraph().appendText("1212");
                                }
                            }else{//第三列是第二列的子项,所以列数多一位,应该从第五列开始
                                for (int q=4;q<table.getRows().get(j).getCells().getCount();q++){
                                    table.getRows().get(j).getCells().get(q).getFirstParagraph().appendText("1213");
                                }
                            }
                        }else if (table.getRows().get(j).getRowIndex()==table.getRows().getCount()-2){//如果行标等于总行数-1,说明是倒数第二行
                            for (int q = 1;q<table.getRows().get(j).getCells().getCount();q++){
                                table.getRows().get(j).getCells().get(q).getFirstParagraph().appendText("张三");
                            }
                        }else if (table.getRows().get(j).getRowIndex()==table.getRows().getCount()-1){//如果行标等于总行数-1,说明是倒数第二行
                            for (int q = 0;q<7;q++){
                                table.getRows().get(j).getCells().get(1).addParagraph().appendText("555");
                            }
                        }
                    }
                } catch (Exception e) {
                    System.out.println("这一页没表格");
                }
            }
        }

        //保存文档
        doc.saveToFile("D:/addrow.doc", FileFormat.Docx_2013);
        doc.dispose();
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值