  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		Ruey
 
 
  註冊時間: 2003-03-12 文章: 1698 來自: tunglo
  第 1 樓
  | 
		
			
				 發表於: 星期五 四月 30, 2004 2:39 am    文章主題: 任意打印字段報表的實現 (轉貼) | 
				     | 
			 
			
				
  | 
			 
			
				來源:編成園地 
 
http://www.vfptop.com/bcxjylist.asp?id=153
 
任意打印字段報表的實現 
 
 
---- 存在的問題 
 
 
---- 用VFP生面的執行程序後,對於用戶所需的某一數據庫的任意字段組合報表,就顯得不是那樣運用自如。因為,一方面軟件開發時,無法考慮到日後用戶所需報表的所有格式。另一方面,由於所設計好的報表格式文件已編譯成可執行文件,即使修改了.FRX和.FRT文件結構內容,也需在開發環境下重新編譯,對用戶來講是不實現的。例如需一份員工名單及一個空欄位,進行簽名或登記某一證件號碼的問題就比較難解決。 
 
 
---- 解決方案 
 
 
---- 運用VFP與Excel 的交換數據及在VFP中全面控制Excel的操作(即自動服務器),就可以很好的解決這一問題。關於如何控制Excel,一方面可以通過Excel的幫助文件的VBA語法,另一方面也有相當多的文章關於控制Excel的語法。值得注意的是:1、為提高效率,所有有關計算、小計、合計最好在VFP中進行,並寫在相應的記錄內;2、由於是兩個軟件,如果在有大量數據逐一插入Excel單元格時,顯得速度較慢,所以如果數據量較大,應直接用VFP的數據表導出為Excel格式,再由VFP在後台控制Excel打開,並指定的Excel格式文件進行修改文檔標題、列的名稱、網格線型,以及根據紙張大小計算各列寬和調整字體大小。 
 
 
---- 實現辦法 
 
 
---- 利用SQL結構化語言的Select生成一個數據表 
 
 
---- 在Select字段時,可以利用一個表單Form1加入兩個列表框,一個列表框列出所有數據表的字段,另一個為空,利用鼠標雙擊或拖拉至空的列表框裡,為選定一字段(此時第一個含有所有字段的列表框中,將不再顯示被拖拉走的字段,而在另一列表中顯示),並生成相應的Select查詢程序段。 
 
 
---- 在本實例中為:form1中含有一個list1和edit1和兩個按鈕 
 
 
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 ** 執行所生成的select語句
 
SELECT &B FROM BN INTO CURSOR MYQUERY
 
sele myquery
 
 
command2.click** 調用excel
 
my=createobject("excel.application")
 
my.visible=.t. **如果在交付用戶時可以將其設置成 .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)
 
** 對於要生成中文的列位標題可以用
 
一英文字段名稱與中文名稱對應的參數庫來解決
 
my.activeworkbook.sheets(1).cells(l,I).value=myquery.&fieldname
 
endfor
 
skip
 
endfor
 
** 如果要增加一空列可以用 
 
my.activesheet.columns(f+1).insert語法
 
** 設置頁眉 my.activesheet.pagesetup.
 
centerheader (centerfooter)="xxx" _________________ #############################
 
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
 
 
學會VFP使用者社區的搜尋,Code才會更有趣~
 
############################# | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |