Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2009年05月24日] [更新 2010年09月12日] エクセル操作フォームEx
   
エクセル操作フォームEx
開く・保存・印刷・入力のキャンセル
動作確認等 図は主に Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成






プロパティ同様,全てのメソッド名の先頭に xlf が付いています.



ブックを開く


xlfExcelFileOpen(OpenFilePath): Boolean

引数で指定したエクセルのブックを読出して表示します.OpenFilePath のファイルが存在しない場合は現在の表示状態は変わりません.現在表示中のブックの変更が保存されていない場合は,保存確認のダイアログを表示します.ファイル名にパス名部分がない場合は,プログラムの起動フォルダ内のファイルとなります.拡張子のチェックはしません.成功するとファイルのフルパス名を返します.失敗すると空文字を返します.
現在表示中のブック,またはネット上で他の方が使用中のブックは開けません.また,ワークシートかグラフシート以外のシートが含まれるブックは開けません.

引数 説明
OpenFilePath String 開くブックのフルパス名




ブックの保存


xlfExcelFileSave(SavePath): Boolean

現在表示中のブックを保存します.保存に成功すれば True を失敗すると False を返します.拡張子のチェックは行いません.
保存に成功すると,xlfBookFullPath プロパティに保存のフルパスが代入されます.

引数 説明
SavePath String 保存する時のブックのフルパス名




印刷


xlfExcelPrintOut (FirstPage, 
                  LastPage, 
                  ACopies, 
                  CollateFlg, 
                  AllSheetPrintFlg)

シートを以下の引数の設定で印刷します.
プリンタは現在のプリンタを使用しますが,[プロパティ] の設定は無効です.
印刷するのは,現在表示されているワークシートまたはグラフシートだけです.

引数 説明
FirstPage Integer 印刷開始頁
LastPage Integer 印刷終了頁
ACopies Integer 印刷部数
CollateFlg Boolean 部単位の印刷指定
AllSheetPrintFlg Boolean 全てのシートを印刷する場合は True にする




エクセルの印刷ダイアログを表示


xlfExcelShowPrintDialog

エクセル操作フォームEx の [印刷] ボタンでは Delphi の TPrintDialog を表示するようになっています.このダイアログではプリンタの [プロパティ] は設定できません.エクセルの印刷ダイアログでは設定が可能です.そのためのメソッドです.
このダイアログから [印刷プレビュー] ボタンをクリックして印刷プレビューを表示すると正常動作しなくなるためこのボタンを非表示としています.

エクセルやワードは,その内部でプリンタ関係を制御しています.Delphi のプリンタ設定関係のプロパティやメソッド類では制御できません.ワードやエクセルのプロパティやメソッド類で設定する必要があります.


図1
[印刷] ダイアログ
  • エクセルの印刷ダイアログ
  • [印刷プレビュー] は非表示

リスト1
使用例
//=============================================================================
//  エクセルの印刷ダイアログを表示するメソッドの使用
//  エクセル操作フォームExの継承フォームの[印刷]ボタンクリックイベントに記述
//  した場合
//=============================================================================
procedure TplExcelFormEx2.btnPrintClick(Sender: TObject);
begin
  //inherited; これは元のボタンクリックイベント実行なので不要

  //印刷方向を横とする
  xlfExcelSheet.PageSetup.Orientation := xlLandscape;

  xlfExcelShowPrintDialog;
end;




エクセルの印刷プレビューを表示


xlfExcelShowPrintPreview(
  BtnEnabled: TplExcelPrintPrevBtnEnabled)

エクセルの印刷プレビューを表示するメソッドです.引数の構造体は以下の表のようになってますが,Excel 2007 以降では設定しても無効です.引数は省略可能です.省略した場合の状態は実際に確認してください.
印刷プレビュー表示と元の表示に戻る際にチラツキがあります.またシステムのアニメーション機能を有効にしていると,切り換え表示が乱れる場合があります.エクセルの場合,印刷プレビュー画面で位置とサイズを変更すると,元の画面に戻った時に位置とサイズが変更されますが,このエクセル操作フォームEx では位置サイズ共に変化しません.

エクセルの印刷プレビューは必ずしも正確とは言えない場合があります.印刷プレビュー通りに印刷できないという話はよく耳にしますが,要望がありましたので追加しました.

[備考]
Excel 2010 では [印刷プレビュー] というメニューはなくなりました.VBA または本エクセル操作フォームEx のように,プログラムコードからでないと表示できません.Excel 2007 以降ではページレイアウト表示ができます.こちらを使用した方がいいでしょう.


図2
印刷プレビュー
  • Windows 7 + Excel 2010 の画面
図3
印刷プレビュー
  • Windows XP + Excel 2000 の画面
  • [印刷] ボタンを無効にできる

BtnPrint Boolean False にすると [印刷] ボタンを無効にします
BtnPageSetup Boolean False にすると [設定] ボタンを無効にします
BtnMargin Boolean False にすると [余白] ボタンを無効にします
BtnPreview Boolean [改ページプレビュー] または [標準] ボタンですが,設定しても無効です.エクセル側が制御しています
プレビュー対象のシートが [標準] で表示されている場合は [改ページプレビュー],[改ページプレビュー] となっている場合は [標準] となります
BtnHelp Boolean False にすると [ヘルプ] ボタンを無効にします


リスト2
使用例.シート (シートのデータ) が空かどうかチェックしてから印刷プレビュー
//=============================================================================
//  ボタンクリックでエクセルの印刷プレビューを表示する
//  WorksheetFunctionオブジェクトのcount関数は引数が多いのでOleVariantで使用
//  数値が1つも入ってないシートはデータがないことになるので注意
//=============================================================================
procedure TplExcelFormEx2.Button4Click(Sender: TObject);
var
  BtnInfo   : TplExcelPrintPrevBtnEnabled;
  AFunction : OleVariant;
begin
  AFunction := xlfExcelApp.WorksheetFunction;
  if AFunction.Count(xlfExcelSheet.Cells) = 0 then begin
    Application.MessageBox('印刷可能なデータがありません.', 'シートの印刷');
  end else begin
    BtnInfo.BtnPageSetup := False;
    BtnInfo.BtnMargin    := False;
    BtnInfo.BtnHelp      := True;

    //印刷プレビュー表示
    xlfExcelShowPrintPreview(BtnInfo);
  end;
end;




入力のキャンセル


xlfCancelInput

ブックの読み込み,保存,または印刷を,セルへの入力中や漢字変換中に実行するとエラーが発生します.そのために入力操作を取り消すためのメソッドです.
実際のエクセルでは,セルへの入力中は印刷等のメニューは使用不可となっていますが,このエクセル操作フォームEx ではこの状態を監視していません.必要に応じて使用してください.