unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComObj;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
exApp: Variant;
wBooks: Variant;
wBook: Variant;
wSheets: Variant;
wSheet: Variant;
eRange: Variant;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
fname: AnsiString;
begin
{ Ex97起動 }
// ファイル選択(アプリ起動ディレクトリを初期ディレクトリにする)
OpenDialog1.Options := [ ofHideReadOnly ];
OpenDialog1.Filter := 'Excel97ファイル (*.xls)|*.xls|すべてのファイル (*.*)|*.*';
OpenDialog1.InitialDir := ExtractFileDir( Application.ExeName );
if OpenDialog1.Execute = False Then
// キャンセル選択時
Exit;
fname := OpenDialog1.FileName;
// OLE オートメーション部
try
// Excel97 起動
exApp := CreateOleObject('Excel.Application.8');
except
on EOleSysError do
begin
// 起動失敗
ShowMessage('Excel97が起動できません');
exApp := Null;
Exit;
end;
end;
// Excel97 表示
exApp.Visible := True;
// このフォームをフォアグランドにする
SetForegroundWindow( Application.Handle );
Update;
// Workbook オブジェクトのコレクションを得る
wBooks := exApp.WorkBooks;
// Workbook をオープンする
try
wBook := wBooks.Open( fname );
except
on EOleSysError do
begin
// オープン失敗
ShowMessage( fname + 'が Excel97 で開けません' );
exApp := Null;
Exit;
end;
end;
// Worksheet オブジェクトのコレクションを得る
wSheets := wBook.WorkSheets;
// Worksheet オブジェクトを”Sheet1”に指定する
try
wSheet := wSheets.Item[ 'Sheet1' ];
except
on EOleSysError do
begin
// ワークシートの指定に失敗
ShowMessage( 'Sheet1 が見つかりません' );
exApp := Null;
Exit;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{ 計算 }
// 値をセルにセット
try
eRange := wSheet.Range[ 'KAKAKU' ];
except
on EOleSysError do
begin
// セルの指定に失敗
ShowMessage( 'Excel97は既に終了しているか、''KAKAKU''のセルが見つからない' );
exApp := Null;
Exit;
end;
end;
eRange.Value := Edit1.Text;
// ワークシート再計算
wSheet.Calculate;
// 結果取り出し
eRange := wSheet.Range[ 'GOUKEI' ];
Edit2.Text := eRange.Value;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
{ Ex97終了 }
// 保存確認ダイアログを非表示
try
exApp.DisplayAlerts := False;
except
on EOleSysError do
begin
// プロパティの指定に失敗
ShowMessage( 'Excel97 は既に終了しています' );
exApp := Null;
Exit;
end;
end;
// Excel97 を終了する
exApp.Quit;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
{ 閉じる(C) }
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
exApp := Null;
end;
end.
|