Visual Foxpro生成任意打印字段報(bào)表的完成
發(fā)表時(shí)間:2024-06-18 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]---- 存在的問(wèn)題 ---- 用VFP生面的執(zhí)行程序后,對(duì)于用戶所需的某一數(shù)據(jù)庫(kù)的任意字段組合報(bào)表,就顯得不是那樣運(yùn)用自如。因?yàn),一方面軟件開(kāi)發(fā)時(shí),無(wú)法考慮到日后用戶所需報(bào)表的所有格式。另一方面,由于所設(shè)計(jì)好的報(bào)表格式文件已編譯成可執(zhí)行文件,即使修改了.FRX和.FRT文件結(jié)構(gòu)內(nèi)容,也需在開(kāi)發(fā)環(huán)...
---- 存在的問(wèn)題
---- 用VFP生面的執(zhí)行程序后,對(duì)于用戶所需的某一數(shù)據(jù)庫(kù)的任意字段組合報(bào)表,就顯得不是那樣運(yùn)用自如。因?yàn),一方面軟件開(kāi)發(fā)時(shí),無(wú)法考慮到日后用戶所需報(bào)表的所有格式。另一方面,由于所設(shè)計(jì)好的報(bào)表格式文件已編譯成可執(zhí)行文件,即使修改了.FRX和.FRT文件結(jié)構(gòu)內(nèi)容,也需在開(kāi)發(fā)環(huán)境下重新編譯,對(duì)用戶來(lái)講是不實(shí)現(xiàn)的。例如需一份員工名單及一個(gè)空欄位,進(jìn)行簽名或登記某一證件號(hào)碼的問(wèn)題就比較難解決。
---- 解決方案
---- 運(yùn)用VFP與Excel 的交換數(shù)據(jù)及在VFP中全面控制Excel的操作(即自動(dòng)服務(wù)器),就可以很好的解決這一問(wèn)題。關(guān)于如何控制Excel,一方面可以通過(guò)Excel的幫助文件的VBA語(yǔ)法,另一方面也有相當(dāng)多的文章關(guān)于控制Excel的語(yǔ)法。值得注意的是:1、為提高效率,所有有關(guān)計(jì)算、小計(jì)、合計(jì)最好在VFP中進(jìn)行,并寫在相應(yīng)的記錄內(nèi);2、由于是兩個(gè)軟件,如果在有大量數(shù)據(jù)逐一插入Excel單元格時(shí),顯得速度較慢,所以如果數(shù)據(jù)量較大,應(yīng)直接用VFP的數(shù)據(jù)表導(dǎo)出為Excel格式,再由VFP在后臺(tái)控制Excel打開(kāi),并指定的Excel格式文件進(jìn)行修改文檔標(biāo)題、列的名稱、網(wǎng)格線型,以及根據(jù)紙張大小計(jì)算各列寬和調(diào)整字體大小。
---- 實(shí)現(xiàn)辦法
---- 利用SQL結(jié)構(gòu)化語(yǔ)言的Select生成一個(gè)數(shù)據(jù)表
---- 在Select字段時(shí),可以利用一個(gè)表單Form1加入兩個(gè)列表框,一個(gè)列表框列出所有數(shù)據(jù)表的字段,另一個(gè)為空,利用鼠標(biāo)雙擊或拖拉至空的列表框里,為選定一字段(此時(shí)第一個(gè)含有所有字段的列表框中,將不再顯示被拖拉走的字段,而在另一列表中顯示),并生成相應(yīng)的Select查詢程序段。
---- 在本實(shí)例中為:form1中含有一個(gè)list1和edit1和兩個(gè)按鈕
Form1.ini
public a,b,c,d,f,g
a="SELECT "
b=""
c=" FROM bn INTO CURSOR myquery"
d=""
f=0
g=0
list1.dblclick
if len(alltrim(b))=0
b=b+thisform.list1.value
else
b=b+","+thisform.list1.value
endif
d=a+b+c
thisform.edit1.refresh
for mm=1 to thisform.list1.listcount
if thisform.list1.selected(mm)
thisform.list1.removeitem(mm)
endif
endfor
command1.click ** 執(zhí)行所生成的select語(yǔ)句
SELECT &B FROM BN INTO CURSOR MYQUERY
sele myquery
command2.click** 調(diào)用excel
my=createobject("excel.application")
my.visible=.t. **如果在交付用戶時(shí)可以將其設(shè)置成 .F.
my.workbooks.add
select myquery
f=fcount()
g=reccount()
goto top
for l=1 to g
for i=1 to f
fieldname=field(i)
** 對(duì)于要生成中文的列位標(biāo)題可以用
一英文字段名稱與中文名稱對(duì)應(yīng)的參數(shù)庫(kù)來(lái)解決
my.activeworkbook.sheets(1).cells(l,i).value=myquery.&fieldname
endfor
skip
endfor
** 如果要增加一空列可以用
my.activesheet.columns(f+1).insert語(yǔ)法
** 設(shè)置頁(yè)眉 my.activesheet.pagesetup.
centerheader (centerfooter)=” xxx”
---- 其它方面的控制可以按上述提到的方法參考