程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Word做Delphi報表輸出工具

用Word做Delphi報表輸出工具

編輯:Delphi
筆者在實際應用中發現,報表的內容一般很少變動,但其字體格式及版式是經常變動的,而且有時用戶為了某種需要,不想修改數據庫的真實內容而又要改變報表內容。如果用ReportSmith可以解決前者問題,但對於後者則無能為力了,且其界面是英文的,不合用戶習慣。如果用3.0中的TQReport的報表部件,則兩者都不能實時解決,必須修改原代碼後重新編譯才能使用。而使用Word及Excel則完全可以克服以上不足。具體實現如下(以Word實現為例):

  首先用Word編輯報表格式,並排好版,把將要輸出的數據項用表單域代替,並取名。這裡我們暫時假設有表單域Item1及Item2(均為文本型),將這個文檔存為模板文件Example.dot,然後按如下步驟進行:

  1)運行Delphi3,在Form1裡加入一個System部件集裡的TDdeClIEntCov部件,取名為DdeExample,將其ConnectMode設為ddeManual(手動方式);將DdeService設為‘(WinWord)’;將ServiceApplication設為‘WinWord’。

  2)編寫一個自定義過程,以激活Word,如下:
  procedure Tform1.WordActive(Cmds: TStrings);
  var
       WordPath: String;
  begin
       if(not DdeExample.OpenLink) then {判斷是否巳動態鏈接}
       begin
         if(FindWindow('OpusApp', nil)=0) then
         begin
            WordPath := 'C:msOfficewinWord';
            if(WordPath=') then
               ShowMessage('中文Word未安裝或未設置路徑,請安裝設置Word中文 版。')
            else begin
               DdeExample.ServiceApplication := WordPath+'WinWord.exe';
               if(DdeExample.OpenLink) then {如果巳動態鏈接執行宏命令}            
                    DdeExample.ExecuteMacroLines(Cmds,False)
                else
                    ShowMessage('無法啟動Word中文版!');
                 DdeExample.ServiceApplication := 'WinWord.exe';
             end;
        end
      else begin{如果巳動態鏈接執行宏命令}
           DdeExample.ExecuteMacroLines(Cmds,False);
        end;
    end
    else
        DdeExample.ExecuteMacroLines(Cmds,false);
  end;

  在private聲明區裡加入如下:
  procedure ActiveWord(Cmds: TStrings);

  3)在Form1中加入一個按鈕Button1,在其onclick事件裡寫如下代碼:
  procedure TForm1.Button1Click(Sender: TObject);
  var
       Cmds:TStringList;{創建Cmds}
       TempItem1,TempItem2:String;
  begin
       cmds:=TStringList.Create;
       cmds.Clear;
       TempItem1:='數據項一';
       TempItem2:='數據項二';
       with Cmds do
       begin
          Clear;
          Add('[FileNew.Template ="Example.Dot″]');{打開模板文件Example.Dot}
          Add('[AppMaximize]');{文檔最大化}
          Add('[SetFormResult"Item1″,″'+TempItem1+'″]');{將數據TempItem1傳給表單域Item1}
          Add('[SetFormResult"Item2″,″'+TempItem2+'″]);{將數據TempItem2傳給表單域Item2}
       end;
       WordActive(DdeExample,Cmds);{調用自定義過程}
       Cmds.Free;{釋放Cmds}
  end;

  運行這個程序,單擊Button1,大家可以發現Word被啟動了,屏幕上出現了:數據項一;數據項二兩個數據項。最後,大家可以任意修改本報表的格式及數據,因為這時這個報表與具體的應用程序巳沒有關系了。

  本例中用的是中文Word6或中文Word7。由於Word97的宏命令巳變為Visual Basic語句,如大家想用Word97實現,請將其宏命令改變為相應的代碼。

  這是個簡單的示例,大家可以利用Word的宏錄制功能,錄取更多的宏(如自動生成表格、填充文字、變動字體等宏命令),並與數據庫的各種表聯系起來,依次加入Cmds中即可實現您所要求的更復雜的功能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved