Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年04月21日] [更新 2014年01月13日] Delphi サンプルプログラム集
   
422_エクセルクリエータ 3.6 で Xlsx ファイルを扱う
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel Creator 3.6
422_ExcelCreator36_Xlsx.zip [99 KB] 2014年01月13日版 (EXEの同梱なし)



  • 2009年04月24日
  • 作成するファイル名の指定に無駄があったので修正
  • 2010年09月12日
  • マイクロソフト・オフィス関係ファイルのリンク修正
  • 2014年01月13日
  • マイクロソフト・オフィス関係のリンクを削除
  • エクセルクリエータがない環境用のサンプルを削除して,記事を整備





Excel Create 3.6 で Xlsx ファイルを扱う


アドバンスソフトウェアが提供している Excel Creator を使用すると,エクセルのブックの操作が非常に高速に処理できます.
Excel Creator 3.6 は,Excel 2007 で実装された xlsx 形式のブック専用です.Excel Creator 3.6 には,Delphi で使用可能な API 関数コードが提供されていません.そこで,コンポーネントにしてみました.
このテストは,あらかじめ Excel Creator 3.6 をインストールしておく必要があります.
今回は,[コンポーネントのインポート] で [ExcelCreator Ver3.6] を選択し,既存のパッケージに登録してテストしてしています.


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


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




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


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


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

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

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Panel2: TPanel;
    Xlsx1: TXlsx;
    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.6がインストールされている必要がある
//  コンポーネントを配置
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
begin
  FFileName := 'Testbook.xlsx';
  if not FileExists(FFileName) then begin
    Xlsx1.CreateBook(FFileName, ver2007, 3);
    Xlsx1.CloseBook(True);
  end;
end;

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

    ASheetName := Xlsx1.SheetName2[2];

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

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

    APos := Xlsx1.Pos[1, 3, 1, 3];
    APos.Double         := VarToDateTime('2005/10/2 20:23:10');
    APos.Attr.Format    := 'yyyy年mm月dd日 hh時mm分ss秒';
    APos.Attr.FontColor := xclBlack;
    APos.Attr.BackColor := xclLightBlue;
  except
    //ブックや該当シートが存在しない場合等
  end;
  Xlsx1.CloseBook(True);
end;

//=============================================================================
//  セルの値を取得
//  Button1クリックで設定した値を取得
//=============================================================================
procedure TForm1.Button3Click(Sender: TObject);
begin
  try
    Xlsx1.OpenBook(FFileName);
    Xlsx1.SheetNo := 2;
    //数値として取得
    Panel1.Caption := IntToStr(Xlsx1.Cell['A2', 0, 0].Int64);
    //文字列として取得
    Panel2.Caption := Xlsx1.Cell['A2', 0, 0].Str;
  except
    //ブックや該当シートが存在しない場合等
  end;
  Xlsx1.CloseBook(True);
end;

end.