很多時候在PowerBuilder中的數據需要傳送到Excel中進行處理或打印,那么如何把PowerBuilder中的數據傳動到Excel中呢,本文就介紹了相關的方法及要使用到的函數。
PowerBuilder是面向對象的數據庫開發工具之一,它可以操縱很多大型數據庫和桌面數據庫,但它對中國式報表打印不太方便,而 Excel對此卻非常容易,若把兩者結合起來使用則可取長補短。
建立一個Excel工作表如圖1,以mxz.xls為文件名保存。
然后編寫腳本如下并執行:
long handle_1
handle_1=openchannel(″excel″,″mxz.xls″) //建立與Excel的通道
setremote(″r2c1″,″序號″,″excel″,″mxz.xls″)
setremote(″r2c2″,″摘要″,″excel″,″mxz.xls″)
setremote(″r2c3″,″收入″,″excel″,″mxz.xls″)
setremote(″r2c4″,″支出″,″excel″,″mxz.xls″)
setremote(″r2c5″,″余額″,″excel″,″mxz.xls″)
setremote(″r2c6″,″日期″,″excel″,″mxz.xls″)
execremote(″[Save()]″,″excel″,″xmk.xls″)
上述腳本執行后,再打開mxz.xls,它變成了如圖2的模樣:
其實,這段腳本用到了三個DDE客戶函數:OpenChannel()、SetRemote()和ExecRemote(),其實,掌握了這三個DDE函數,就可以隨心所欲地寫出打印功能十分強大的PowerBuilder數據庫程序來。
1、OpenChannel() 它的功能是打開連接DDE服務器的通道。
語法 OpenChannel ( applname, topicname {, windowhandle } )
參數 applname:string類型,指定DDE服務器應用的DDE名稱。
topicname:string類型,指定ming令中要使用的DDE應用的數據或實例。
windowhandle:long類型,可選項,指明用作DDE客戶的PowerBuilder窗口的窗口句柄。省略該參數時,當前應用中的活動窗口用作DDE客戶。
返回值 long類型。
函數執行成功時返回一個正數作為已打開通道的句柄,發生錯誤時返回下述值之一:
-1打開失敗。
-9句柄為NULL。
示例:下面的代碼建立到Excel的DDE通道,之后請求三個單元格的數據,并把這些數據保存在數組s_regiondata中。DDE會話的客戶端窗口為w_ddewin:
long handle
string s_regiondata[3]
handle = OpenChannel(″Excel″, ″REGION.XLS″, Handle(w_ddewin))
GetRemote(″R1C2″, s_regiondata[1], handle, Handle(w_ddewin))
GetRemote(″R1C3″, s_regiondata[2], handle, Handle(w_ddewin))
GetRemote(″R1C4″, s_regiondata[3], handle, Handle(w_ddewin))
CloseChannel(handle, Handle(w_ddewin))
2、SetRemote() 功能是請求服務器應用把指定項設置為指定值。該函數有兩種語法格式,下面分別予以介紹:
(1)語法一,請求DDE服務器應用接收保存在指定位置的數據,該格式不要求事先打開通道,適用于僅發出少數幾個請求的情況。
SetRemote ( location, value, applname, topicname )
參數
location:string類型,指明要DDE服務器的哪一部分接收數據,位置的表達方式由具體的DDE服務器決定。
value:string類型變量,指定發送給DDE服務器的數據。
applname:string類型,指定DDE服務器應用的DDE名稱。
topicname:string類型,指定要接收數據的DDE應用的數據或實例。
返回值 integer類型。函數執行成功時返回1,發生錯誤時返回下述值之一:
-1未啟動連接。
-2請求被拒絕,如果任何參數的值為NULL,SetRemote()函數返回NULL。
示例:下面的代碼請求Excel把工作表SALES.XLS的第5行第8列單元的值設置為5500:
SetRemote(″R5C8″, ″5500″, ″Excel″, ″SALES.XLS″)
(2)語法二,請求DDE服務器應用接收保存在指定位置的數據,該格式適用于熱連接的情況,即應用程序已經與服務器建立通道。
SetRemote ( location, value, handle {, windowhandle } )
參數 location:string類型,指明要DDE服務器的哪一部分接收數據。位置的表達方式由具體的DDE服務器決定。
value:string類型變量,指定發送給DDE服務器的數據。
handle:long類型,指定使用的DDE通道句柄。
windowhandle:long類型,可選項,指明用做DDE客戶的PowerBuilder窗口的窗口句柄。省略該參數時,當前應用中的活動窗口用做DDE客戶。
返回值 integer類型。函數執行成功時返回1,發生錯誤時返回下述值之一:
-1未啟動連接。
-2請求被拒絕。
-9 Handle參數的值為NULL。
示例:下面的代碼先打開一個通道,然后請求Excel將第5行第8列單元的值設置為5500:
long hand
lehandle = OpenChannel(″Excel″, ″REGION.XLS″)
SetRemote(″R5C8″, ″5500″, handle)
3、ExecRemote()
它的功能是請求DDE服務器應用程序執行ming令。該函數也有兩種語法格式,下面分別予以介紹。
(1)語法一,直接向DDE服務器應用發送一條ming令(冷連接方式);
ExecRemote ( command, applname, topicname )
參數 command:string類型,其值為希望DDE服務器應用執行的ming令,ming令格式和語法需要參看DDE服務器應用的文檔
applname:string類型,指定服務器應用的DDE名稱。
topicname:string類型,指定ming令中要使用的DDE應用的數據或實例返回值Integer。函數執行成功時返回1,發生錯誤時返回下述值之一:
-1未啟動連接。
-2請求被拒絕。
-3不能終止服務器。
如果任何參數的值為NULL,ExecRemote()函數返回NULL。
示例:下面的語句請求Excel將活動工作表的內容保存到文件REGION.XLS中:
ExecRemote(″[Save()]″, ″Excel″, ″REGION.XLS″)
(2)語法二,應用程序打開某個通道后向DDE服務器應用發送ming令(熱連接方式)
ExecRemote ( command, handle {, windowhandle } )
參數
command:string類型,其值為希望DDE服務器應用執行的ming令,ming令格式和語法需要參看DDE服務器應用的文檔
handle:long類型,指定使用的DDE通道句柄
windowhandle:long類型,可選項,指明用做DDE客戶的PowerBuilder窗口的窗口句柄。省略該參數時,當前應用中的活動窗口用做DDE客戶,返回值integer。函數執行成功時返回1,發生錯誤時返回下述值之一:
-1未啟動連接。
-2請求被拒絕
-9handle參數的值為NULL。
|
新聞熱點
疑難解答