2015年12月21日 星期一

使用Excel Buffer內的Function建立Excel文件

在Table 370可以看到 Excel Buffer 這張Table,主要是將欄位資料存放到這張Buffer Table,然後輸出成Excel檔

建立Excel比較常用的Function有這些:

CreateBook, CreateSheet, GiveUserControl, NewRow, AddColumn

這邊以Report 6 Trial Balance為例

執行這隻Report的時候,可以看到Option Tab有Print to Excel 這個功能,也就是將Report輸出為Excel格式


在Report - OnPreReport()的Trigger

IF PrintToExcel THEN  //如果Print to Excel有打勾的話,會呼叫MakeExcelInfo這個Function
  MakeExcelInfo;


AddInfoColumn主要是將報表的資訊放到Information Sheet,這邊可以看個人習慣,有些人喜歡將報表資訊跟資料放在同一頁,那就不需要用到AddInfoColumn


MakeExcelInfo Function在最尾巴的地方有呼叫到MakeExcelDataHeader Function

在這邊可以看到這個Function使用到AddColumn來加入表頭的欄位

結果如下:


以上圖第一個欄位為例
AddColumn("G/L Account".FIELDCAPTION("No."),FALSE,'',TRUE,FALSE,TRUE,'');
需要傳幾個參數給AddColumn這個Function,依序是
(欄位的Value, 是否為公式, 加入註解文字(滑鼠移到欄位上會顯示註解文字), 是否為粗體, 是否為斜體, 是否有底線, 儲存格的數值格式代碼)



加入註解文字這邊特別介紹一下,如果在第三個參數輸入test
AddColumn("G/L Account".FIELDCAPTION("No."),FALSE,'test',TRUE,FALSE,TRUE,'');
今天當我滑鼠移到欄位上會顯示註解文字,也就是我輸入的test



儲存格的數值格式代碼的話,主要是用在當你希望儲存格依照你的Data Type來顯示的話,可以修改儲存格格式,例如Customer No.為001,但是儲存格的數值格式代碼為空的話,輸出到Excel會顯示1而不是001

可以在AddColumn("G/L Account".FIELDCAPTION("No."),FALSE,'',TRUE,FALSE,TRUE,'@');使用@符號來更改儲存格的格式

Header表頭已經介紹完畢,那麼Body的部分跟Header差不多,只要將欄位使用AddColumn來加入欄位即可

要注意的是,因為Header的Function沒有使用到換行的Function,若是要換行的話,可以使用NewRow,透過NewRow來達到換行的動作

然後將Body的Function放在Body - OnPostSection()的Trigger裡面

最後在Report - OnPostReport()加入

IF PrintToExcel THEN
  CreateExcelbook;  //呼叫CreateExcelbook Function



這個Function主要是將擺放在Excel Buffer資料表內的資料輸出到Excel檔

CreateBook建立Excel
CreateSheet建立工作表
GiveUserControl主要是讓系統產生Progress Bar,直到進度條結束為止,才顯示Excel檔

這邊有個地方需要注意,就是在你的Report要將ExcelBuf變數設成Temporary暫存表,這樣才可以在多台電腦上面執行Create Excel的動作,如果沒有設定的話,會Lock Excel Buffer Tabl這張表,導致當你在Create Excel的時候,其他使用者無法Create Excel


先介紹到這邊,下次來介紹如何使用Excel的Automation來建立圖表

0 意見 :

張貼留言

Copyright © 2015. Brian的Dynamic Nav學習筆記 - All Rights Reserved | Powered by Blogger | Template Design by Cool Blogger Tutorials | Published by Templates Doctor