在powerbuilder中向Excel傳遞數(shù)據(jù)
發(fā)表時間:2023-08-19 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]PowerBuilder是面向?qū)ο蟮臄?shù)據(jù)庫開發(fā)工具之一,它可以操縱很多大型數(shù)據(jù)庫和桌面數(shù)據(jù)庫,但它對中國式報表打印不太方便,而 Excel對此卻非常容易,若把兩者結(jié)合起來使用則可取長補短。 建立...
PowerBuilder是面向?qū)ο蟮臄?shù)據(jù)庫開發(fā)工具之一,它可以操縱很多大型數(shù)據(jù)庫和桌面數(shù)據(jù)庫,但它對中國式報表打印不太方便,而 Excel對此卻非常容易,若把兩者結(jié)合起來使用則可取長補短。
建立一個Excel工作表如圖1,以mxz.xls為文件名保存。
然后編寫腳本如下并執(zhí)行:
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″)
上述腳本執(zhí)行后,再打開mxz.xls,它變成了如圖2的模樣:
其實,這段腳本用到了三個DDE客戶函數(shù):OpenChannel()、SetRemote()和ExecRemote(),其實,掌握了這三個DDE函數(shù),就可以隨心所欲地寫出打印功能十分強大的PowerBuilder數(shù)據(jù)庫程序來。
一、OpenChannel() 它的功能是打開連接DDE服務(wù)器的通道。
語法 OpenChannel ( applname, topicname {, windowhandle } )
參數(shù) applname:string類型,指定DDE服務(wù)器應(yīng)用的DDE名稱。
topicname:string類型,指定命令中要使用的DDE應(yīng)用的數(shù)據(jù)或?qū)嵗?br>
windowhandle:long類型,可選項,指明用作DDE客戶的PowerBuilder窗口的窗口句柄。省略該參數(shù)時,當前應(yīng)用中的活動窗口用作DDE客戶。
返回值 long類型。函數(shù)執(zhí)行成功時返回一個正數(shù)作為已打開通道的句柄,發(fā)生錯誤時返回下述值之一: -1打開失敗。
-9句柄為NULL。
示例: 下面的代碼建立到Excel的DDE通道,之后請求三個單元格的數(shù)據(jù),并把這些數(shù)據(jù)保存在數(shù)組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))
二、SetRemote() 功能是請求服務(wù)器應(yīng)用把指定項設(shè)置為指定值。該函數(shù)有兩種語法格式,下面分別予以介紹:
語法一,請求DDE服務(wù)器應(yīng)用接收保存在指定位置的數(shù)據(jù),該格式不要求事先打開通道,適用于僅發(fā)出少數(shù)幾個請求的情況。
SetRemote ( location, value, applname, topicname )
參數(shù)
location:string類型,指明要DDE服務(wù)器的哪一部分接收數(shù)據(jù),位置的表達方式由具體的DDE服務(wù)器決定。
value:string類型變量,指定發(fā)送給DDE服務(wù)器的數(shù)據(jù)。
applname:string類型,指定DDE服務(wù)器應(yīng)用的DDE名稱。
topicname:string類型,指定要接收數(shù)據(jù)的DDE應(yīng)用的數(shù)據(jù)或?qū)嵗?
返回值 integer類型。函數(shù)執(zhí)行成功時返回1,發(fā)生錯誤時返回下述值之一:
-1未啟動連接。
。2請求被拒絕,
如果任何參數(shù)的值為NULL,SetRemote()函數(shù)返回NULL。
示例:下面的代碼請求Excel把工作表SALES.XLS的第5行第8列單元的值設(shè)置為5500:
SetRemote(″R5C8″, ″5500″, ″Excel″, ″SALES.XLS″)
語法二,請求DDE服務(wù)器應(yīng)用接收保存在指定位置的數(shù)據(jù),該格式適用于熱連接的情況,即應(yīng)用程序已經(jīng)與服務(wù)器建立通道。
SetRemote ( location, value, handle {, windowhandle } ) 參數(shù)
location:string類型,指明要DDE服務(wù)器的哪一部分接收數(shù)據(jù)。位置的表達方式由具體的DDE服務(wù)器決定。 value:string類型變量,指定發(fā)送給DDE服務(wù)器的數(shù)據(jù)。
handle:long類型,指定使用的DDE通道句柄。
windowhandle:long類型,可選項,指明用做DDE客戶的PowerBuilder窗口的窗口句柄。省略該參數(shù)時,當前應(yīng)用中的活動窗口用做DDE客戶。
返回值 integer類型。函數(shù)執(zhí)行成功時返回1,發(fā)生錯誤時返回下述值之一:
。1未啟動連接。
-2請求被拒絕。
-9 Handle參數(shù)的值為NULL。
示例:下面的代碼先打開一個通道,然后請求Excel將第5行第8列單元的值設(shè)置為5500:
long hand
lehandle = OpenChannel(″Excel″, ″REGION.XLS″)
SetRemote(″R5C8″, ″5500″, handle)
三、ExecRemote()
它的功能是請求DDE服務(wù)器應(yīng)用程序執(zhí)行命令。該函數(shù)也有兩種語法格式,下面分別予以介紹。
語法一,直接向DDE服務(wù)器應(yīng)用發(fā)送一條命令(冷連接方式);
ExecRemote ( command, applname, topicname )
參數(shù)
command:string類型,其值為希望DDE服務(wù)器應(yīng)用執(zhí)行的命令,命令格式和語法需要參看DDE服務(wù)器應(yīng)用的文檔applname:string類型,指定服務(wù)器應(yīng)用的DDE名稱。
topicname:string類型,指定命令中要使用的DDE應(yīng)用的數(shù)據(jù)或?qū)嵗祷刂礗nteger。函數(shù)執(zhí)行成功時返回1,發(fā)生錯誤時返回下述值之一:
-1未啟動連接。
-2請求被拒絕。
-3不能終止服務(wù)器。
如果任何參數(shù)的值為NULL,ExecRemote()函數(shù)返回NULL。
示例:下面的語句請求Excel將活動工作表的內(nèi)容保存到文件REGION.XLS中:
ExecRemote(″[Save()]″, ″Excel″, ″REGION.XLS″)
語法二,應(yīng)用程序打開某個通道后向DDE服務(wù)器應(yīng)用發(fā)送命令(熱連接方式)
ExecRemote ( command, handle {, windowhandle } )
參數(shù)
command:string類型,其值為希望DDE服務(wù)器應(yīng)用執(zhí)行的命令,命令格式和語法需要參看DDE服務(wù)器應(yīng)用的文檔 handle:long類型,指定使用的DDE通道句柄
windowhandle:long類型,可選項,指明用做DDE客戶的PowerBuilder窗口的窗口句柄。省略該參數(shù)時,當前應(yīng)用中的活動窗口用做DDE客戶,返回值integer。函數(shù)執(zhí)行成功時返回1,發(fā)生錯誤時返回下述值之一:
-1未啟動連接。
-2請求被拒絕
-9handle參數(shù)的值為NULL。
(新疆 尚建軍)