Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年04月25日] [更新 2014年01月13日] Delphi サンプルプログラム集
421_エクセルクリエータ 3.0 をコンポーネントにして使用
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel Creator 3.0
421_ExcelCreator30_Xls.zip [97 KB] 2013年01月13日版 (EXEの同梱なし)



  • 2010年06月13日
  • CreateComObject 関係の記事追加と動作確認環境の変更,コード修正
  • 2014年01月13日
  • 実行時に生成するサンプルを削除して,記事を整備




Excel Create 3.0 をコンポーネントにして使用


アドバンスソフトウェアが提供している Excel Creator を使用すると,エクセルのブックの操作が非常に高速に処理できます.Excel Creator 3.0 はコンポーネントにして利用することも可能です.ただし,Excel Creator 3.0 がインストールされている必要があります.
つまり,Excel Creatro の DLL がシステムに登録されていなければタイプライブラリの取り込みでユニットを作成するこはできません.

今回は,[コンポーネントのインポート] で [ExcelCreator Ver3.0] を選択し,既存のパッケージに登録してテストしてしています.


[備考]
Excel Creator 3.0 は,以前は単体で販売されていましたが,2014年01月12日現在,Excel Creator 2012 に含まれている製品で,xls 形式のブック専用となっています.Excel Creator 3.6 という製品も含まれていますが,こちらは Excel 2007 以降の xlsx 形式専用です.


  • 図1
  • [コンポーネント] [コンポーネントのインストール] で
  • [タイプライブラリの取り込み] を選択して,コンポーネントラッパーを作成




01_フォームにコンポーネントを配置して使用


作成したコンポーネントをフォームに配置,下のコードでテストした結果です.このサンプルプログラムは,実行環境でも開発環境でも Excel Creator 3.0 が必要です.


図2
設計時画面
図3
実行画面
図4
生成ファイル
  • プロジェクトのフォルダ内の TestBook.xls
図5
ブックの出力内容
  • Sheet3 に出力される

リスト1
Excel Creator 3.0 をインストールしていないと動作しない
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, CREATOROCXLib_TLB, StdCtrls, ExtCtrls, OleServer;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Panel2: TPanel;
    Xls1: TXls;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private 宣言 }
    FFileName : String;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  フォーム表示開始時の処理
//
//  Excel Creator3.0がインストールされている必要がある
//  コンポーネントを配置
//
//  プロパティやメソッドはExcel Creator3.0のActiveXのヘルプで確認できる
//  セルの指定にはCell2,Pos2プロパティを使用する
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
begin
  //ブックを新規に作成
  FFileName := ExtractFilePath(Application.ExeName) + 'Testbook.xls';
  if not FileExists(FFileName) then begin
    Xls1.CreateBook(FFileName, ver97, 3);
    Xls1.CloseBook;
  end;
end;

//=============================================================================
//  セルに値を設定 A1形式
//  Cell2の第3,4引数は元のセルに対する相対移動量
//  ここではA2そのものを対象とする
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  ASheetName : String;
begin
  try
    Xls1.OpenBook(FFileName);
    Xls1.SheetNo := 2;

    //指定セルに整数値を書込み
    Xls1.Cell2['A2', 0, 0].Long := 1500;
    ASheetName := Xls1.SheetName2[2];

    Panel1.Caption := '3 番目のシート名は ' + ASheetName;
    Panel2.Caption := '';
  except
    //ブックや該当シートが存在しない場合等
  end;
  Xls1.CloseBook(True);
end;

//=============================================================================
//  セルに値を設定
//  日時の場合で,文字色と背景色も指定
//  Pos2は列,行の番号で指定する(0が左端の列と行)
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  APos : IExcelCrtOcx;
begin
  try
    Xls1.OpenBook(FFileName);
    Xls1.SheetNo := 2;

    //セルに書式を指定して実数値を書込む
    APos := Xls1.Pos2[1, 3, 1, 3];
    APos.Double    := VarToDateTime('2005/10/2 20:23:10');
    APos.Format    := 'yyyy年mm月dd日 hh時mm分ss秒';
    APos.FontColor := xcBlack;
    //淡い水色
    APos.BackColor := 27;
  except
    //ブックや該当シートが存在しない場合等
  end;
  Xls1.CloseBook(True);
end;

//=============================================================================
//  セルの値を取得
//  Button1クリックで設定した値を取得
//=============================================================================
procedure TForm1.Button3Click(Sender: TObject);
begin
  try
    Xls1.OpenBook(FFileName);
    Xls1.SheetNo := 2;

    //数値として取得
    Panel1.Caption := IntToStr(Xls1.Cell2['A2', 0, 0].Long);
    //文字列として取得
    Panel2.Caption := Xls1.Cell2['A2', 0, 0].Str;
  except
    //ブックや該当シートが存在しない場合等
  end;
  Xls1.CloseBook(True);
end;

end.