[原創]Java調用PageOffice給Word中的Table賦值


Word中的table操作需要借助數據區域(DataRegion)實現的,要求數據區域完整的包含了整個Table的內容,這樣才可以通過數據區域控制和操作table。因此,要想使用table,則必須在word文件中插入書簽。而table的插入,既可以在Word模版中書簽處手動插入:工具欄“插入”→“表格”,亦可以在程序中通過數據區域動態添加。

一、給Word模板中的Table手動插入書簽。

1. 把Table包含在數據區域中。
例如:有這樣一個人員信息表,想要在這個人員信息表中填充數據,則必須先將整個成績表的table包含到一個“書簽”中。

  人員信息表  
公司名稱 部門名稱 員工姓名
     

 

 

 

 

選擇表格,然后插入書簽,比如書簽名為:PO_regTable,操作步驟如下圖所示:
:-: 

注:插入書簽的時候一定要先選中整個table,然后再點擊插入書簽按鈕進行插入。

2. 編寫代碼給Table賦值。

    PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
    poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); 

    WordDocument doc = new WordDocument();

    DataRegion dataRegion = doc.openDataRegion("PO_regTable");
    
    Table table = dataRegion.openTable(1); //index代表當前書簽中table位置的索引,從1開始
    
    table.openCellRC(3, 1).setValue("A公司");//openCellRC(行, 列),索引從1開始
    table.openCellRC(3, 2).setValue("開發部");
    table.openCellRC(3, 3).setValue("李清");

    //插入一行,insertRowAfter方法中的參數代表在哪個單元格下面插入一個空行
    table.insertRowAfter(table.openCellRC(3, 3));
    
    table.openCellRC(4, 1).setValue("B公司");
    table.openCellRC(4, 2).setValue("銷售部");
    table.openCellRC(4, 3).setValue("張三豐");
    
    poCtrl1.setWriter(doc);
    poCtrl1.webOpen("doc/test.doc", OpenModeType.docNormalEdit, "張三");

 

填充數據后的表格如下圖所示:
      

請參考PageOffice產品開發包中Samples4示例:
一、17、給Word文檔中Table賦值的簡單示例

二、程序動態地給word中創建table。

同樣地,程序動態地給word添加table時需要在制作模板的時候先插入一個數據區域,命名為:PO_table1,這樣就可以通過獲取到數據區域PO_table1之后,用數據區域對象DataRegion的CreateTable方法在此數據區域所在位置新建一個表格。CreateTable方法有三個參數,分別是:行、列和表格類型。表格類型目前分三種,如下表所示。

成員名稱 說明
wdAutoFitFixed 0 將表格設置為固定大小而與內容無關,因此不會自動調整表格大小。
wdAutoFitContent 1 根據表格中包含的內容自動調整表格的大小
wdAutoFitWindow 2 根據活動窗口的寬度自動調整表格大小。

 

 

 

 

 

代碼實現:

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);

WordDocument doc = new WordDocument();
//在word中指定的"PO_table1"的數據區域內動態創建一個3行5列的表格
Table table1 = doc.openDataRegion("PO_table1").createTable(3,5,WdAutoFitBehavior.wdAutoFitWindow);
//合並(1,1)到(3,1)的單元格並賦值
table1.openCellRC(1,1).mergeTo(3,1);
table1.openCellRC(1,1).setValue("合並后的單元格");
//給表格table1中剩余的單元格賦值
for(int i=1;i<4;i++){
        table1.openCellRC(i, 2).setValue("AA" + String.valueOf(i));
        table1.openCellRC(i, 3).setValue("BB" + String.valueOf(i));
        table1.openCellRC(i, 4).setValue("CC" + String.valueOf(i));
        table1.openCellRC(i, 5).setValue("DD" + String.valueOf(i));
}
//在"PO_table1"后面動態創建一個新的數據區域"PO_table2",用於創建新的一個5行5列的表格table2
DataRegion drTable2= doc.createDataRegion("PO_table2", DataRegionInsertType.After, "PO_table1");
Table table2=drTable2.createTable(5,5,WdAutoFitBehavior.wdAutoFitWindow);
//給新表格table2賦值
for(int i=1;i<6;i++){
        table2.openCellRC(i, 1).setValue("AA" + String.valueOf(i));
        table2.openCellRC(i, 2).setValue("BB" + String.valueOf(i));
        table2.openCellRC(i, 3).setValue("CC" + String.valueOf(i));
        table2.openCellRC(i, 4).setValue("DD" + String.valueOf(i));
        table2.openCellRC(i, 5).setValue("EE" + String.valueOf(i));
}
    
poCtrl.setWriter(doc);//不要忘記此行代碼
poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");
poCtrl.webOpen("doc/test.doc", OpenModeType.docNormalEdit,"張佚名");

 

生成效果:
        154.

請參考PageOffice產品開發包中Samples4示例的“高級功能”演示:
二、43、在Word文檔中動態創建表格並賦值(專業版、企業版)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM