Word动态输出多表格方案(以工资条为例)
1、功能介紹
???????? PageOffice能實現在Word文檔中動態循環輸出多個相同格式的表格并在表格的單元格中動態填充數據。
???????? 在Word文檔中使用表格時,有時可能會需要生成多個具有相同格式的表格,例如某大公司需要生成多名員工的工資單、體檢中心要生成多名體檢人員的體檢報告等。若是這些表格的數量不是太多并且表格中的單元格數據相同的話,那么只需多復制幾份就可??扇羰沁@些表格的數量很大需要幾百幾千甚至更多且需要從數據庫中讀取數據記錄寫入表格的單元格中的話可就不那么容易實現了。這些表格中的數據若是逐一地靠手動錄入,不僅效率非常低,而且手動輸入的錯誤率亦會很高。而若想既提高工作效率又降低錯誤率那最好的辦法當然就是通過程序實現了。
???????? 通過PageOffice的數據區域(即DataRegion類)就能高效地實現在Word中動態循環輸出多個相同格式和樣式的表格,且能將數據庫中的數據記錄全部正確的動態填寫到表格中。????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
什么是數據區域?數據區域是Word文檔中具有 "PO_" 前綴命名的書簽所定位的文檔區域。簡單來說,數據區域就是一種特殊的Word書簽對象,便于定位Word文檔中的內容。數據區域是PageOffice開發平臺中重要的技術概念。
這里舉個簡單的例子說明什么是數據區域:假設開發者需要在待打開的Word文檔指定位置處顯示產品名稱,就可以先手動打開此Word文檔,在指定位置處插入書簽"PO_ProductName",保存文檔。這樣數據區域"ProductName"就定義好了。編寫代碼 doc.OpenDataRegion("ProductName").Value ="PageOffice"; 即可在此數據區域處生成想要的內容。
數據區域的填充及數據區域格式的控制都是通過DataRegion類實現的,很多Word操作都需要調用DataRegion類完成。DataRegion類能通過調用 OpenDataRegion(String) 方法或CreateDataRegion(String, DataRegionInsertType, String) 方法獲得 DataRegion 對象。
???????? PageOffice要實現在Word文檔中動態輸出多個相同格式的表格很容易。下面以輸出多個工資條為例來描述具體的實現方法。首先在一個Word文檔中設置好所要輸出的工資條數據表格的樣式和格式,將其作為模版文檔,命名為“template.doc”;然后創建一個空白的Word文件,用來輸出多個工資條表格,命名為“test.doc”;再通過程序讀取數據庫中的相應數據,按讀取的記錄數據進行循環,在循環時創建數據區域,將模版“template.doc”賦值給每次創建的數據區域,并向表格中填充數據,最后在線打開“test.doc”文檔,即可在其上動態輸出多個工資條表格。
????????
2、Word動態輸出多表格(以工資條為例)具體實現方法
???????? PageOffice開發平臺下,Word動態輸出多個工資條表格的具體實現過程很簡單,只需要將PageOfficeCtrl控件類、WordDocument類、DataRegion類結合Table類使用即可實現這一功能。
???????? 在Word中動態生成多個工資條的具體實現步驟如下:
???????? ①先在一個Word文檔中設置好要輸出的工資條表格的樣式和格式做成Word模版,將其命名為“template.doc”。
???????? ②創建一個空白的Word文檔,用來在其中輸出多個工資條表格,將其命名為“test.doc”。
???????? ③根據查詢條件,通過程序獲取員工工資信息,再循環讀取員工的工資信息,并在每次循環時都調用DataRegion類的CreateDataRegion(string NewDataRegionName, DataRegionInsertTypeInsertType, string RelativeDataRegionName)方法創建一個數據區域,將模版“template.doc”文檔作為值賦值給該數據區域,然后再將員工的工資信息動態填入表格的單元格中。
???????? 數據區域值的類型可以是文本類型、Word文件類型、Excel文件類型、圖片類型等。一般將Word、Excel、圖片類型的值賦值給數據區域時,寫法為:“[word]word文件路徑[/word]”、“[excel]excel文件路徑[/excel]”、“[image]image圖片路徑[/image]”。此示例中為實現動態生成多個表格是將Word文件類型的值賦值給數據區域。
???????? PageOffice標準版只支持文本類型,專業版只支持文本、圖片和Word文件類型,企業版文本、Word文件、Excel文件、Image圖片類型都支持。使用時請一定要注意。
???? 數據區域的具體使用方法和調用請參見相應開發語言的開發幫助和開發示例包中的示例。
???????? ④調用PageOfficeCtrl類對象的WebOpen(Stringfilename,OpenModeType type, String userName)方法打開Word文件“test.doc”,在“test.doc”文檔中動態輸出和顯示多個工資條表格。
????????
???????? PageOffice開發平臺下,Word動態輸出多個工資條表格的具體實現代碼如下:
???????? //Java實現代碼
???????? //從數據庫中讀取工資條信息
??? ... ...
??? Connection conn = DriverManager.getConnection(strUrl);
??? Statement stmt = conn.createStatement();
??? ResultSet rs = stmt.executeQuery(strSql);
?
??? WordDocument doc = new WordDocument();
??? DataRegion data = null;
??? Table table = null;
??? int i = 0;
??? //循環
??? while (rs.next()) {
??????? //創建數據區域,createDataRegion()方法中的第三個參數一般是文檔中已存在的用戶已預先定義的數據區域,但是還可以使用PageOffice開發平臺預留的兩個特殊數據區域:[HOME]和[END]。它們分別代表文檔的開始光標位置和結束光標位置
??????? data = doc.createDataRegion("reg" + i,
??????????????? DataRegionInsertType.Before,"[End]");
??????? //將模版“template.doc”文檔賦值給數據區域
??????? data.setValue("[word]doc/template.doc[/word]");
?
??????? table = data.openTable(1);
??????? //給表格中單元格賦值
??????? table.openCellRC(2, 1).setValue(rs.getString("ID"));
??????? table.openCellRC(2, 2).setValue(rs.getString("UserName"));
??????? ... ...
??????? i++;
??? }
??? conn.close();
?
??? PageOfficeCtrl pCtrl = new PageOfficeCtrl(request);pCtrl.setWriter(doc); //不要忘記此行
??? pCtrl.setServerPage(request.getContextPath()+"/poserver.zz");??//設置服務器頁面
??? ......
??? pCtrl.webOpen("doc/test.doc", OpenModeType.docNormalEdit,"somebody");//在線打開Word文檔
??? pCtrl.setTagId("PageOfficeCtrl1");//此行必須
?
???????? //C#實現代碼
????????//從數據庫中讀取工資信息
??? ......
????????OleDbConnection conn =new OleDbConnection(strConn);
??? OleDbDataAdapter cmd =newOleDbDataAdapter(strSql, conn);
??? DataSet ds =new DataSet();
??? conn.Open();
??? cmd.Fill(ds,"ds");
?
??? WordDocument doc =newWordDocument();
??? ??? if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
??? {
??????? DataTable dt = ds.Tables[0];
??????? DataRegion[] data =newDataRegion[ds.Tables[0].Rows.Count];
??????? PageOffice.WordWriter.Table[] table =newPageOffice.WordWriter.Table[ds.Tables[0].Rows.Count];
??????? //循環
??????? for (int i = 0; i< dt.Rows.Count; i++)
??????? {
??????????? //創建數據區域,createDataRegion()方法中的第三個參數一般是文檔中已存在的用戶已預先定義的數據區域,但是還可以使用PageOffice開發平臺預留的兩個特殊數據區域:[HOME]和[END]。它們分別代表文檔的開始光標位置和結束光標位置
??????????? data[i]= doc.CreateDataRegion("reg" +i.ToString(),DataRegionInsertType.Before, "[End]");
??????????? //將模版“template.doc”文檔賦值給數據區域
??????????? data[i].Value="[word]doc/template.doc[/word]";
??????????? table[i]= data[i].OpenTable(1);
??????????? //給單元格賦值
??????????? table[i].OpenCellRC(2,1).Value = dt.Rows[i]["ID"].ToString();
??????????? table[i].OpenCellRC(2,2).Value = dt.Rows[i]["UserName"].ToString();
???????????? ... ...
??????? }
??? }
??? conn.Close();
??? PageOfficeCtrl1.SetWriter(doc); //不要忘記此行
???????PageOfficeCtrl1.ServerPage = Request.ApplicationPath +"/pageoffice/server.aspx";//設置PageOffice組件服務頁面
??? ... ...
??? PageOfficeCtrl1.WebOpen("doc/test.doc", PageOffice.OpenModeType.docAdmin,"somebody");//在線打開Word文檔
?
??? 上述示例的完整代碼可參考相應開發語言的Samples示例包綜合演示示例中的第10個示例:“ 插入 Word 表格模板動態生成工資條 (企業版)”。總結
以上是生活随笔為你收集整理的Word动态输出多表格方案(以工资条为例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: click是哪个键 wheel_Clic
- 下一篇: ssm毕设项目基于的少儿编程学习系统2l