[java 2019-04-09] 代码生成word文档中的表格嵌套问题

       public static void createContent3(Date adtStart, Date adtEnd,
               Map<String, Object> aMap,Map<String, DataTable> mapTables) { 

           DataTable content3_t1 = new DataTable("content3_t1"); // 
        DataColumnCollection dcc = content3_t1.getColumns();

        dcc.add("dw");  
        dcc.add("id");  
        
        DataTable content3_t2 =  new DataTable("content3_t2"); //row.getTable();
        DataColumnCollection dcc2 = content3_t2.getColumns();
        dcc2.add("pid");  
        dcc2.add("wtdw");  
        dcc2.add("wzmjs"); 
        dcc2.add("wzsdlds");   
        dcc2.add("wzfs");   
        for(int i=0;i<3;i++){
            DataRow row = content3_t1.newRow(); //新增一行 
            row.set(0, "dw"+i);
 
            for(int j=0;j<3;j++){
                DataRow row2 = content3_t2.newRow(); //新增一行 
                row2.set(0, "id"+i);
                row2.set(1, "wtdw"+i+"-"+j);
                row2.set(2, "wzmjs"+i+"-"+j);
                row2.set(3, "wzsdlds"+i+"-"+j);
                row2.set(4, "wzsdlds"+i+"-"+j);
                content3_t2.getRows().add( row2 );   //加入此行数据
            }
            mapTables.put("content3_t2", content3_t2);
            row.set(1, "id"+i);
            content3_t1.getRows().add( row );   //加入此行数据
        }
        mapTables.put("content3_t1", content3_t1);
           

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

        String[] list =  new String[1];
        list[0]="320402000000";
        
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        String adtSta="2019-03-01 00:00:00";
        String adEnd ="2019-04-01 00:00:00";
        Date adtStart = sdf.parse(adtSta);
        Date adtEnd = sdf.parse(adEnd);
        
        Map<String, Object> mapContents = new HashMap<String, Object>();
        Map<String, DataTable> mapTables = new HashMap<String, DataTable>();
        
        createContent3(adtStart, adtEnd,  mapContents,mapTables);
                
        String path = "D:\PEES2015\hop-web\src\main\webapp\report\dkt\dkt-tjfx-zgqk.docx";
        String webPath = "\documents\rptXCDC_"+HsFileUtil.getUUID()+".doc";
        String tPath = "D:\PEES2015\hop-web\src\main\webapp" + webPath;

        System.out.println("Start create Image...");
         
        try {
            com.aspose.words.License license = new com.aspose.words.License();
            String s = "D:\PEES2015\hop-web\src\main\webapp\report\";
            license.setLicense( s + "lic.xml" );
            System.out.println("授权成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //模板文件和将要创建的新文件
        String template = path;  //可以是doc或docx
        String destdoc = tPath; //可以是doc或docx
        Document doc; 
        try{
            //第二步 读取word模板文件,可以是.doc或者.docx
            doc = new Document( template );
            System.out.println("读取word模板文件,可以是.doc或者.docx");
            //合并模版,相当于页面的渲染 
            MailMerge mm = doc.getMailMerge();
            
         // 将 t1 和 t2 关联起来
            DataSet ds = new DataSet();
            DataTable content3_t1 = mapTables.get("content3_t1");
            DataTable content3_t2 = mapTables.get("content3_t2");
            ds.getTables().add( content3_t1 );
            ds.getTables().add( content3_t2 );
            String[] contCols = {"id"};
            String[] lstCols = {"pid"};
            ds.getRelations().add( new DataRelation("content3_t1t2", content3_t1, content3_t2, contCols, lstCols) );
            mm.executeWithRegions(ds); //调用接口
            
            //提供数据源
            String[] ks = mapContents.keySet().toArray(new String[0]);//.toArray();//
            Object[] vs = mapContents.values().toArray();//.toArray();//
            mm.execute(ks, vs);
            doc.save( destdoc );
            System.out.println("End create Word...");
        }catch (Exception e) {
            e.printStackTrace();
        }
        
        Map<String, Object> rlts = Maps.newHashMap();
        rlts.put("data", webPath);
        System.out.println(rlts);
    }

原文地址:https://www.cnblogs.com/shijt/p/10675344.html