Delphi Programming / Object Pascal
[掲載 2010年03月02日] [更新 2013年11月14日] エクセル操作フォームEx |
エクセル操作フォームEx 参考コード類
ブックの保存・形式を指定した保存等 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010 |
エクセルの保存ダイアログを使用すると,いろいろな形式で保存できます.
Excel 2007 以降のブック形式である xlsx, xlsm 形式でも保存可能です. |
procedure TplExcelFormEx2.Button1Click(Sender: TObject);
var
pIndex : OleVariant;
AItem : OleVariant;
begin
pIndex := xlDialogSaveAs;
try
AItem := xlfExcelApp.Dialogs.Item[pIndex];
AItem.Show;
except
//エラー処理
end;
//キャプションの表示を変更しておく
Self.Caption := xlfExcelBook.Name;
end;
[ 保存 ] ボタンでエクセルの保存ダイアログを表示 |
[保存] ボタンでエクセルの保存ダイアログを表示して保存する場合は,継承フォームのボタンクリックにそのコードを記述します.この時,元のダイアログを表示しないようにします.常にエクセルの保存ダイアログを使用するのであれば,元のエクセル操作フォームEx のコードを書きえてください. |
procedure TplExcelFormEx2.btnFileSaveClick(Sender: TObject);
var
pIndex : OleVariant;
AItem : OleVariant;
begin
//inheritedをコメントアウトする
//inherited;
pIndex := xlDialogSaveAs;
try
AItem := xlfExcelApp.Dialogs.Item[pIndex];
AItem.Show;
except
//エラー処理
end;
//キャプションの表示を変更しておく
Self.Caption := xlfExcelBook.Name;
end;
上書き保存の機能を,別のボタンクリック等で実行するには,例えば次のようなコードで可能ず. |
procedure TplExcelFormEx2.Button6Click(Sender: TObject);
var
pType : OleVariant;
pID : OleVariant;
pTag : OleVariant;
pVisible : OleVariant;
begin
pType := EmptyParam;
pID := 3;
pTag := EmptyParam;
pVisible := EmptyParam;
try
xlfExcelApp.CommandBars.FindControl(pType, pID, pTag, pVisible).Execute;
except
end;
end;
[上書き] ボタンの機能をカスタマイズしたい場合も同様に,上のコード,あるいは,本ページのこれ以降のコードを参考にして書き換えることにより可能です. |
指定のファイル形式で保存するには,以下のように,保存の際にパラメータで指定します.[CSV ファイルへの保存] もこの方法で可能です. |
図1
いろいろな保存形式の定数の一部 (VBA のヘルプから) |
リスト4
保存形式を指定して保存.HTML 形式で保存する例 |
procedure TplExcelFormEx2.Button2Click(Sender: TObject);
var
pFilePath : OleVariant;
pFileFormat : OleVariant;
pPassword : OleVariant;
pWritePassword : OleVariant;
pReadOnly : OleVariant;
pCreateBackup : OleVariant;
pAccessMode : OleVariant;
begin
pFilePath := ExtractFilePath(Application.ExeName) + 'ExcelTest.html';
//保存形式の指定(xlHtmlはhtml形式保存)
pFileFormat := xlHtml;
pPassword := '';
pWritePassword := '';
pReadOnly := False;
pCreateBackup := False;
pAccessMode := xlNoChange;
try
//SaveAsは別の名前で保存するメソッド.引数は省略不可
xlfExcelBook.SaveAs( pFilePath, //保存ファイル名
pFileFormat, //保存形式.現在のエクセルのバージョン形式
pPassword, //パスワード
pWritePassword, //文書読出しパスワード指定
pReadOnly, //読取り専用推奨表示の有無
pCreateBackup, //バックアップファイル作成
pAccessMode, //アクセスモード
EmptyParam, //ブックが共有の場合のコンフリクトの解決方法
EmptyParam, //最近使用したファイルの一覧をブックに追加
EmptyParam, //TextCodePage
EmptyParam, //TextVisualLayout
0);
//保存したことにする
xlfExcelBook.Saved[0] := True;
//キャプションの表示を変更しておく
Self.Caption := xlfExcelBook.Name;
except
end;
end;
|
図2
HTMLファイル形式で保存の例
- ExcelTest.html の名前で保存されるが,[ExcelTest.files] というフォルダも作成されて,そこにシート別に保存される
- スタイルシートも作成される
|
|
図3
ブラウザでの表示結果
- 最下部のタブをクリックすると,エクセルのブックのように表示が切り替わる
|
TExcelWorkBook を使用した上のコードでは,SaveAs メソッドの引数が省略できません.
TExcelWorkBook を OleVariant 型の変数に置き換えて処理すれば,下のコードのように,引数を省略できます. |
リスト5
保存形式を指定して保存.HTML 形式で保存する例.OleVariant 型を使用する場合 |
procedure TplExcelFormEx2.Button3Click(Sender: TObject);
var
objExcelSheet : OleVariant;
pFilePath : OleVariant;
pFileFormat : OleVariant;
begin
pFilePath := ExtractFilePath(Application.ExeName) + 'ExcelTest.html';
//xlfExcelBook(TExcelWorkBook)をOleVariant型にして扱うとVBA的な使い方が可能
objExcelSheet := xlfExcelApp.ActiveWorkbook;
//保存形式の指定(xlHtmlはhtml形式保存)
pFileFormat := xlHtml;
try
objExcelSheet.SaveAs(pFilePath, pFileFormat);
//保存したことにする
xlfExcelBook.Saved[0] := True;
//キャプションの表示を変更しておく
Self.Caption := xlfExcelBook.Name;
except
end;
end;
エクセルの保存ダイアログを表示して,保存形式を選択して保存すれば,エクセル 2007 以降のブック形式で保存することができます.また,上の保存形式を指定した保存のコードで保存形式を指定すればエクセル 2007 以降の形式で保存できます.
ただし,エクセル操作フォームEx では,これらの定数変数は使用できません.そこで次のサンプルコードでは,これらの定数値を定義して使用しています.
システムに複数のバージョンのエクセルがインストールされている環境では注意が必要です.システムのカレントバージョンが,エクセル 2007 以上になっていないと保存に失敗します. |
リスト6
エクセル 2007 以降のブック形式で保存 (マクロは保存しない)
必要ならば保存ダイアログを表示するようにする |
procedure TplExcelFormEx2.Button4Click(Sender: TObject);
const
xlOpenXMLWorkbook = 51;
xlOpenXMLWorkbookMacroEnabled = 52;
var
objExcelSheet : OleVariant;
pFilePath : OleVariant;
pFileFormat : OleVariant;
begin
pFilePath := ExtractFilePath(Application.ExeName) + 'テスト.xlsx';
//xlfExcelBook(TExcelWorkBook)をOleVariant型にして扱うとVBA的な使い方が可能
objExcelSheet := xlfExcelApp.ActiveWorkbook;
//保存形式の指定(xlOpenXMLWorkbookはxlsx形式保存)
pFileFormat := xlOpenXMLWorkbook;
try
objExcelSheet.SaveAs(pFilePath, pFileFormat);
//保存したことにする
xlfExcelBook.Saved[0] := True;
//キャプションの表示を変更しておく
Self.Caption := xlfExcelBook.Name;
except
end;
end;
エクセル 2007 以降では,マクロも保存可能な形式と,できない形式があります.xlsx はマクロが保存できないファイル形式です.マクロも保存するには,保存形式を xlOpenXMLWorkbookMacroEnabled とし,拡張子を xlsm とします.
システムに複数のバージョンのエクセルがインストールされている環境では注意が必要です.システムのカレントバージョンが,エクセル 2007 以上になっていないと保存に失敗します. |
リスト7
エクセル 2007 以降のブック形式で保存 (マクロも保存する場合)
必要ならば保存ダイアログを表示するようにする |
procedure TplExcelFormEx2.Button5Click(Sender: TObject);
const
xlOpenXMLWorkbook = 51;
xlOpenXMLWorkbookMacroEnabled = 52;
var
objExcelSheet : OleVariant;
pFilePath : OleVariant;
pFileFormat : OleVariant;
begin
pFilePath := ExtractFilePath(Application.ExeName) + 'テスト.xlsm';
//xlfExcelBook(TExcelWorkBook)をOleVariant型にして扱うとVBA的な使い方が可能
objExcelSheet := xlfExcelApp.ActiveWorkbook;
//保存形式の指定(xlOpenXMLWorkbookはxlsx形式保存)
pFileFormat := xlOpenXMLWorkbookMacroEnabled;
try
objExcelSheet.SaveAs(pFilePath, pFileFormat);
//保存したことにする
xlfExcelBook.Saved[0] := True;
//キャプションの表示を変更しておく
Self.Caption := xlfExcelBook.Name;
except
end;
end;
|