MasteringVFP/13/7
出自VFP Wiki
MasteringVFP/13/7
的原始碼
跳轉到:
導航
,
搜尋
根據以下的原因,您並無權限去做編輯這個頁面:
你所請求執行的操作被禁止。
你可以檢視並複製本頁面的原始碼。
====進階實例應用1-在VFP中操作Excel進行列印==== =====出處與作者===== 出處:[http://fox.hanyu.com.tw/View.aspx?fbId=1&Id=39893&Page=1 我要把DBF的資料印出,搞不定??],本篇已經作者:盧明貴同意,將程式轉貼於此。 =====在螢幕上預覽,再列印===== <pre> lo_excel = createobject('Excel.Application') lo_excel.workbooks.add with lo_excel.application && 此為指向 lo_Excel.Application 這一層,如此可使下一列 lo_Excel.Application.Visible = .T. 變成比較簡短 .displayalerts=.f. && 關閉警告,如存檔詢問是否覆蓋舊檔 .screenupdating=.f. && 關閉即是運算,加快處裡速度 *.Run("Macro1") && 執行巨集 .cells.select && 選取整個Excel工作表 .activewindow.zoom=75 && 顯示比例 75% .selection.font.name = '細明體' && 設定字型 .selection.font.size = 12 && 設定字體大小 .selection.columns.autofit && 最適欄寬 .Rows("2:2").Select .Selection.RowHeight = 20 &&設定列高 .Columns("A:A").Select .Selection.ColumnWidth = 100 &&設定欄寬 .cells(2,1).value='這是測試程式的第一列資料,妳可以把欄寬設定跟印表機一樣寬,也許是80行吧,' &&儲存格填入值 .cells(3,1).value='這是測試程式的第二列資料,資料就隨便妳放啦,高興怎麼印就怎麼印' &&儲存格填入值 .cells(4,1).value="'12345678901234567890123456789012345678901234567890123456789012345678901234567890" &&儲存格填入值 .cells(5,1).value="商品編號 品名 數量 單價 小計 備註" &&儲存格填入值 .cells(6,1).value="10001 Foxpro 9.0 英文版 1 25000 25000 金額亂打的" &&儲存格填入值 .cells(7,1).value="10002 Excel 2003 中文版 1 4000 4000 也是亂打的" &&儲存格填入值 .cells(8,1).value=" 合計: 29000" &&儲存格填入值 .cells(1,1).select && 選定A1儲存格 .selection.end(-4161).select && 選定第一列最後一行儲存格 .range(.selection, .cells(.activecell.row, 1)).select && 從目前選定的儲存格往左連續選取至第一個儲存格 with .selection *.Interior.Pattern = 2 .horizontalalignment = -4108 && 儲存格置中顯示 .borders(1).linestyle = 1 && 每個(各個)儲存格 Left 框線為實線 .borders(2).linestyle = 1 && 每個(各個)儲存格 Top 框線為實線 .borders(3).linestyle = 1 && 每個(各個)儲存格 Bottom 框線為實線 .borders(4).linestyle = 1 && 每個(各個)儲存格 Right 框線為實線 .borders(7).weight = -4138 && 選取區塊的最 Left 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 .borders(8).weight = -4138 && 選取區塊的最 Top 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 .borders(9).weight = -4138 && 選取區塊的最 Bottom 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 .borders(10).weight = -4138 && 選取區塊的最 Right 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 *.Borders(11).Weight = 2 && 選取區塊的內部垂直線的寬度為 xlThin 或 2 *.Borders(12).Weight = 2 && 選取區塊的內部水平線的寬度為 xlThin 或 2 *.Interior.ColorIndex = 35 && 填滿儲存格顏色為淺綠色 .interior.colorindex = 5 && 填滿儲存格顏色為寶藍色 .font.colorindex = 2 && 變更儲存格字體顏色為白色 endwith .range("A2").select && 點選 A2 儲存格 .activewindow.freezepanes=.t. && 凍結窗格 *lo_Excel.ActiveSheet.HPageBreaks.Add(.Cells(5, 1)) && 插入分頁 *.Columns("F:F").Select && 選取整個欄 F:F *With .Selection * .HorizontalAlignment = -4108 && 儲存格置中 *EndWith *.ActiveCell.SpecialCells(11).Select && 直接選取最後一欄最後一列儲存格 ,在Excel內操作為 Ctrl+End with .activesheet.pagesetup .printtitlerows = "$1:$1" && 版面設定之工作表列印標題列 .centerfooter = "第 &P 頁,共 &N 頁" && 版面設定之頁尾 .printgridlines = .t. && 版面設定之列印選取列印格線 endwith .screenupdating=.t. && 打開即時運算,將最後結果運算出來 .visible = .t. && 檢視Excel *.activeworkbook.save && 儲存檔案 *if ll_quit=.t. *&& 呼叫程式傳值確定要關閉Excel檔案 * .activeworkbook.close() * .quit() *endif endwith </pre> =====不預覽,直接列印===== <pre> lo_excel = createobject('Excel.Application') lo_excel.workbooks.add with lo_excel.application && 此為指向 lo_Excel.Application 這一層,如此可使下一列 lo_Excel.Application.Visible = .T. 變成比較簡短 .displayalerts=.f. && 關閉警告,如存檔詢問是否覆蓋舊檔 .screenupdating=.f. && 關閉即是運算,加快處裡速度 *.Run("Macro1") && 執行巨集 .cells.select && 選取整個Excel工作表 .activewindow.zoom=75 && 顯示比例 75% .selection.font.name = '細明體' && 設定字型 .selection.font.size = 12 && 設定字體大小 .selection.columns.autofit && 最適欄寬 .Rows("2:2").Select .Selection.RowHeight = 20 &&設定列高 .Columns("A:A").Select .Selection.ColumnWidth = 100 &&設定欄寬 .cells(2,1).value='這是測試程式的第一列資料,妳可以把欄寬設定跟印表機一樣寬,也許是80行吧,' &&儲存格填入值 .cells(3,1).value='這是測試程式的第二列資料,資料就隨便妳放啦,高興怎麼印就怎麼印' &&儲存格填入值 .cells(4,1).value="'12345678901234567890123456789012345678901234567890123456789012345678901234567890" &&儲存格填入值 .cells(5,1).value="商品編號 品名 數量 單價 小計 備註" &&儲存格填入值 .cells(6,1).value="10001 Foxpro 9.0 英文版 1 25000 25000 金額亂打的" &&儲存格填入值 .cells(7,1).value="10002 Excel 2003 中文版 1 4000 4000 也是亂打的" &&儲存格填入值 .cells(8,1).value=" 合計: 29000" &&儲存格填入值 .cells(1,1).select && 選定A1儲存格 .selection.end(-4161).select && 選定第一列最後一行儲存格 .range(.selection, .cells(.activecell.row, 1)).select && 從目前選定的儲存格往左連續選取至第一個儲存格 with .selection *.Interior.Pattern = 2 .horizontalalignment = -4108 && 儲存格置中顯示 .borders(1).linestyle = 1 && 每個(各個)儲存格 Left 框線為實線 .borders(2).linestyle = 1 && 每個(各個)儲存格 Top 框線為實線 .borders(3).linestyle = 1 && 每個(各個)儲存格 Bottom 框線為實線 .borders(4).linestyle = 1 && 每個(各個)儲存格 Right 框線為實線 .borders(7).weight = -4138 && 選取區塊的最 Left 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 .borders(8).weight = -4138 && 選取區塊的最 Top 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 .borders(9).weight = -4138 && 選取區塊的最 Bottom 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 .borders(10).weight = -4138 && 選取區塊的最 Right 框線的寬度為 xlMedium 或 -4138,預設值為 xlThin 或 2 *.Borders(11).Weight = 2 && 選取區塊的內部垂直線的寬度為 xlThin 或 2 *.Borders(12).Weight = 2 && 選取區塊的內部水平線的寬度為 xlThin 或 2 *.Interior.ColorIndex = 35 && 填滿儲存格顏色為淺綠色 .interior.colorindex = 5 && 填滿儲存格顏色為寶藍色 .font.colorindex = 2 && 變更儲存格字體顏色為白色 endwith .range("A2").select && 點選 A2 儲存格 .activewindow.freezepanes=.t. && 凍結窗格 *lo_Excel.ActiveSheet.HPageBreaks.Add(.Cells(5, 1)) && 插入分頁 *.Columns("F:F").Select && 選取整個欄 F:F *With .Selection * .HorizontalAlignment = -4108 && 儲存格置中 *EndWith *.ActiveCell.SpecialCells(11).Select && 直接選取最後一欄最後一列儲存格 ,在Excel內操作為 Ctrl+End with .activesheet.pagesetup .printtitlerows = "$1:$1" && 版面設定之工作表列印標題列 .centerfooter = "第 &P 頁,共 &N 頁" && 版面設定之頁尾 .printgridlines = .t. && 版面設定之列印選取列印格線 endwith .screenupdating=.t. && 打開即時運算,將最後結果運算出來 *.visible = .t. && 檢視Excel .ActiveWindow.SelectedSheets.PrintOut(1,.t.) &&直接印到印表機 *.activeworkbook.save && 儲存檔案 *if ll_quit=.t. *&& 呼叫程式傳值確定要關閉Excel檔案 .activeworkbook.close() .quit() *endif endwith </pre> =====加上保護,不讓使用者修改===== <pre> .ActiveSheet.Protect(.t.,.t.,.t.) &&保護工作表 </pre> =====寫入欄位名稱===== 關鍵是使用 fields() 函數 <pre> for jj=1 to fcount() .cells(1,jj).value=fields(jj) &&寫入欄位名稱 endfor </pre> =====選取欄位與格式化===== <pre> .Columns("I:I").Select .Selection.NumberFormatLocal = "0.00_ " &&設定儲存格格式,數值,小數點2位 </pre> =====改變欄寬===== <pre> .Columns("A:A").Select .Selection.ColumnWidth = 100 </pre> <pre> .range("A1").select && 點選 A1 儲存格 .Selection.ColumnWidth = 100 </pre> <pre> .cells(2,2).select && 點選 B2 儲存格 .Selection.ColumnWidth = 100 </pre> =====改變列高===== <pre> .Rows("2:2").Select .Selection.RowHeight = 20 </pre> =====小秘訣===== 有任何Excel的VBA語法不知道的,用下列步驟取得: #Excel錄製巨集 #編輯巨集 #將語法copy過來用 注意事項:以上面的保護來說,錄製出來的程式碼是: <pre> .ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True </pre> 使用時,要將他改成: <pre> .ActiveSheet.Protect(.t.,.t.,.t.) </pre> 有三個值都是True,把他包在括弧內用逗點分開。 再舉一個例子,以靠左對齊為例:Excel上方不是有一個"靠左對齊"按鈕? 前面貼出的程式有一下內容: <pre> .Columns("F:F").Select && 選取整個欄 F:F With .Selection .HorizontalAlignment = -4108 && 儲存格置中 EndWith </pre> 首先去錄製巨集,得到結果如下: <pre> .HorizontalAlignment = xlLeft &&靠左對齊 .HorizontalAlignment = xlCenter &&置中 .HorizontalAlignment = xlRight &&靠右對齊 </pre> 用Excel VBA編輯,打開即時運算視窗,輸入 ?xlLeft,取得變數值如下: *xlLeft=-4131 *xlCenter=-4108 *xlRight=-4152 在VFP中使用時,就必須將它改成以下: <pre> .HorizontalAlignment = -4131 && xlLeft 靠左對齊 .HorizontalAlignment = -4108 && xlCenter 置中 .HorizontalAlignment = -4152 && xlRight 靠右對齊 </pre> =====作者的話===== 更彈性:變顏色,字型,加外框,加底色,隱藏.......更重要的是,可以讓使用者改變報表的外觀,使用者也可以改變公式,也可以和Word合併列印,也可以自行合併多個工作表或多個Excel檔案,也可以貼上連結到PowerPoint做簡報,Excel內容改變,PowerPoint內容也跟著改變。使用者可以改變報表,就不需要凡事都要找程式師,字體加個底線也要找程式師改程式,加總公式改變也要找程式師,報表標題改變也要找程式師..... 唬爛了一堆,希望你能聽懂,也要舉一反三。
返回到
MasteringVFP/13/7
。
檢視
頁面
討論
原始碼
歷史
個人工具
登入/建立新帳號 選單
導航
首頁
社群入口
現時事件
近期變動
隨機頁面
使用說明
搜尋
工具箱
鏈入頁面
相關頁面修訂記錄
所有特殊頁面