  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		perry
 
 
  註冊時間: 2014-07-20 文章: 203
 
  第 1 樓
  | 
		
			
				 發表於: 星期二 三月 01, 2016 5:01 am    文章主題: 一個簡單用 Excel 輸出表列式印表公用小程式 | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 代碼: | 	 		  
 
*PriExcel.prg
 
*Do PriExcel With 'AA' or =PriExcel('AA')
 
*別名請用字串,所有欄位須全部是字串型態
 
Lpar cPrin_alia
 
Priv Prin_alia,XLApp,XLSheet,Col_cnt,Col_str,rang_str,i,j,j1
 
Prin_alia=cPrin_alia
 
IF !USED(Prin_alia)
 
    retu
 
ENDI
 
*
 
XLApp=CreateObject('Excel.Application')
 
*新增活頁簿
 
XLApp.WorkBooks.Add
 
*第1個試算表
 
XLSheet=XLApp.WorkBooks(1).Sheets(1)
 
Sele (Prin_Alia)
 
Go Top
 
*讀取欄位資訊 1.欄位名 3.長度
 
Col_cnt=Afield(Fd_Info)
 
For I=1 to Col_cnt
 
    Col_str=IIF(i>26,CHR(64+INT((i-1)/26)),'')+;
 
            CHR(65+(i-1)%26)
 
    *�]直欄寬度  以細明體10為基準@@
 
    XLSheet.Columns(Col_str).ColumnWidth=0.91*IIF(LEN(ALLT(Fd_Info(I,1)))>Fd_Info(I,3),LEN(ALLT(Fd_Info(I,1))),Fd_Info(I,3))+0.06
 
    With XLSheet.Cells(1,I)
 
        .Value="'"+Fd_Info(I,1)
 
        .Font.Name='細明體'
 
        .Font.Size=10
 
        .Borders.LineStyle=1
 
    EndWith
 
Next
 
I=1
 
Scan
 
    I=I+1
 
    For J=1 to Col_cnt
 
        J1=Fd_Info(J,1)
 
        With XLSheet.Cells(I,J)
 
            .Value="'"+&J1
 
            .Font.Name='細明體'
 
            .Font.Size=10
 
            .Borders.LineStyle=1  &&單線十字框
 
        EndWith
 
    Next
 
EndScan
 
************************
 
*公司抬頭
 
i=Col_cnt
 
rang_str='A1:'+IIF(i>26,CHR(64+INT((i-1)/26)),'')+;
 
            CHR(65+(i-1)%26)
 
XLSheet.Rows(1).Insert
 
With XLSheet.Cells(1,1)
 
    .Value="'"+'OOOO股份有限公司'
 
    .Font.Name='標楷體'
 
    .Font.Size=16
 
    .Font.Bold=.T.
 
EndWith
 
*合併儲存格
 
XLSheet.Range(rang_str+'1').MergeCells=.T.
 
XLSheet.Range(rang_str+'1').HORIZONTALALIGNMENT=7
 
**************
 
*頁尾標題
 
XLSheet.PageSetup.CenterFooter="頁次: &P / &N"
 
**************
 
*列印範圍
 
XLSheet.PageSetup.PrintTitleRows="$1:$2"
 
XLSheet.PageSetup.PrintTitleColumns="$A:$"+Subs(rang_str,4)
 
**************
 
*邊界�]定
 
XLSheet.PageSetup.CenterHorizontally=.T. &&&&水平置中
 
XLSheet.PageSetup.TopMargin=28.8*1       &&&&上留白
 
XLSheet.PageSetup.BottomMargin=28.8*2    &&&&下留白
 
XLSheet.PageSetup.LeftMargin=28.8*0      &&&&左留白
 
XLSheet.PageSetup.RightMargin=28.8*0     &&&&右留白
 
XLSheet.PageSetup.HeaderMargin=28.8*0    &&&&上標題
 
XLSheet.PageSetup.FooterMargin=28.8*1    &&&&下標題
 
***************
 
XLSheet.PageSetup.Orientation=1  &&1.直印 2.橫印
 
XLSheet.PageSetup.Zoom=100  &&放大比例
 
XLSheet.PageSetup.PaperSize=9  &&A4
 
*_Screen.Visible=.F.  &&隱藏VFP
 
XLApp.VISIBLE=.T.            &&&&顯示 Excel 視窗
 
XLSheet.PrintPreview         &&&&啟動預覽列印
 
**********************************************
 
**將活頁簿已異動而未存檔的標註改成(值真 .T.)
 
**關閉 Excel 時則不會詢問是否存檔
 
**********************************************
 
XLApp.WorkBooks(1).SAVED=.T.
 
XLApp.WorkBooks(1).Close
 
**********************************************
 
**關閉預覽列印隨即關閉 Excel
 
**********************************************
 
XLApp.QUIT
 
_Screen.Visible=.T.  &&顯示VFP
 
 | 	  
 
用 Copy to xxx type xl? 可能會受 Excel 版本限制... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ezpos
 
 
  註冊時間: 2011-04-20 文章: 323
 
  第 2 樓
  | 
		 | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		perry
 
 
  註冊時間: 2014-07-20 文章: 203
 
  第 3 樓
  | 
		
			
				 發表於: 星期五 五月 20, 2016 10:12 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				...
 
 
_screen.visible=.f.    
 
*隱藏 VFP 將控制權交給 Excel 預覽列印
 
XLApp.Visible=.t.  &&顯示 Excel
 
XLSheet.PrintPreview         &&&&啟動預覽列印
 
**********************************************
 
 
*當印表結束或關閉預覽列印才會往下執行指令
 
 
**將活頁簿已異動而未存檔的標註改成(值真 .T.)
 
**關閉 Excel 時則不會詢問是否存檔
 
**********************************************
 
XLApp.WorkBooks(1).SAVED=.T.
 
XLApp.WorkBooks(1).Close
 
**********************************************
 
**關閉預覽列印隨即關閉 Excel
 
**********************************************
 
XLApp.QUIT
 
*將控制權交還 VFP
 
_Screen.Visible=.T.  &&顯示VFP
 
 
個人只是不喜歚 VFP 的報表檔,從未設計使用過 VFP 的預覽列印= ='''
 
所有報表都用 Excel 的預覽列印,簡單輕鬆無負擔!!
 
 
想轉 PDF 只要客戶購買並安裝 轉 PDF for Excel 就可以,
 
沒必要去寫轉 PDF 的程式!!
 
 
想印圖檔直接一個指令插入 Excel Sheet 就解決.
 
 
不主動關閉 Excel 回到 VFP 是要讓使用者抱怨嗎?? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		ckp6250
 
 
  註冊時間: 2004-07-30 文章: 1645
 
  第 4 樓
  | 
		
			
				 發表於: 星期六 五月 21, 2016 5:13 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				設定 _screen.visible=.f.  隱藏 VFP 將控制權交給 Excel 預覽列印 
 
 
若使用者想要一邊參考報表,一邊察看vfp的原始資料時,
 
怎麼辦? | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		perry
 
 
  註冊時間: 2014-07-20 文章: 203
 
  第 5 樓
  | 
		
			
				 發表於: 星期六 五月 21, 2016 7:37 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | ckp6250 寫到: | 	 		  設定 _screen.visible=.f.  隱藏 VFP 將控制權交給 Excel 預覽列印 
 
若使用者想要一邊參考報表,一邊察看vfp的原始資料時,
 
怎麼辦? | 	  
 
真有需求,只能設計者自己變通了...  = ='''
 
 
例如:原PO的小程式 *_screen.visible=.f.
 
設公用變數記錄 Excel 是否已關,
 
程式最前面判斷
 
 	  | 代碼: | 	 		  
 
**這個是個人用來限制使用者只能執行1次 exe 的方式
 
priv err_tf
 
err_tf=.f.
 
on erron do excel_use
 
sele 0
 
crea dbf d:\test\testexcl (fmark c(1))
 
on error
 
if err_tf
 
    messagebox('上一次 Excel 預覽列印尚在使用中!!',16)
 
    retu
 
endi
 
.
 
.
 
.
 
proc excel_use
 
err_tf=.t.
 
endproc
 
 | 	  
 
按下預覽鍵(commandbutton) 將enabled 設成.f.
 
返回時再enabled 設成.t.
 
調整 Excel 視窗 height,width,top,left ...
 
 
個人客戶從未有此需求@@
 
 
每個人習慣不同,實難回答!!
 
有人 showWindow=2 就不適用 _screen.visible=.t.
 
 
這個小程式只要按自已實際需求稍加修改亦可通用,
 
Excel 設計報表用的到的指令大概都有.
 
 
把 row 當成 vfp @prow()方式來看,透過預覽,
 
可測得每頁是多少 rows ,要寫出 Group 功能不是難事.
 
 
增加參數作為報表識別,列印功能,要統計,分組的欄位...
 
 
其便利性不是 VFP 報表檔可比的!! | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		perry
 
 
  註冊時間: 2014-07-20 文章: 203
 
  第 6 樓
  | 
		
			
				 發表於: 星期二 一月 24, 2017 4:14 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | ckp6250 寫到: | 	 		  設定 _screen.visible=.f.  隱藏 VFP 將控制權交給 Excel 預覽列印 
 
若使用者想要一邊參考報表,一邊察看vfp的原始資料時,
 
怎麼辦? | 	  
 
不妨開發一只專職預覽列印的EXE,
 
不管是用 Excel 或 VFP 的報表檔
 
 
這樣就可同時存在,只要在該EXE中增加一個 timer 
 
判讀是否自動關閉的檔案,應能達到您的要求. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |