忍者ブログ

ゆるいSEの小ネタ集

ゆるキャラ好きのITエンジニアが書くTips。 ゆるキャラ命なSEのIT徒然草 https://itmagic.hatenablog.com/

[Delphi]Excel操作

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

[Delphi]Excel操作

【エクセル入出力基礎】
TExcelApplication,TExcelWorkbook,TExcelWorksheetクラスを利用し
OLE経由でエクセルの直接操作を行う。

■エクセル関連コンポーネントのツリー構造
・TExcelApplication //エクセルアプリケーション
 ・TExcelWorkbook  //エクセルワークブック
  ・TExcelWorksheet  //エクセルワークシート


【TExcelApplication】
エクセルファイルの操作を行うコンポーネント

■メソッド
・Create
インスタンス生成
例)xlaMain := TExcelApplication.Create(nil); //xlaMainはTExcelApplication型
・Workbooks.Open
エクセルファイルをオープンする
・Connect
エクセルアプリケーションの起動
・Quit
エクセルアプリケーションの終了
・Disconnect
エクセルアプリケーションの終了
・Free
エクセルアプリケーションの開放
→違いがわからん…未調査。

■プロパティ
・Workbooks
ワークブック(TExcelWorkbook)の集合を管理するプロパティ
※Workbooks[1].(TExcelWorkbookのメソッド) のような形で利用可能。
・ActiveWorkBook
現在アクティブなワークブック
・DisplayAlerts
アラート表示・非表示設定
eaExcelApp.DisplayAlerts[0] := False;
・ConnectKind
ckNewInstance;
・Visible[LCID] := False;
アプリケーションの可視状態
※以下のようなイメージで、TExcelApplication→TExcelWorkbook→TExcelWorksheetの
プロパティやメソッドを直接操作可能。
  eaExcelApp.Workbooks[1].Worksheets.Count


【TExcelWorkbook】
エクセルの1ワークブック単位での操作を行う。

■メソッド
・Create
xlwBook := TExcelWorkbook.Create(nil);
xlsShet := TExcelWorksheet.Create(nil);
・ConnectTo
ワークブックを展開
xlwBook.ConnectTo(xlaMain.Workbooks.Add(EmptyParam, LCID));
・Workbooks[1].SaveAs
エクセルファイルの保存
・SaveAs
ファイルの保存
例) SaveAs(pXlsFileName, NULL, NULL, NULL, NULL, NULL,0, NULL, NULL, NULL, NULL, 0);

■プロパティ
・Worksheets
ワークシートの集合体。
//シート数が2毎以上ある場合は削除
while eaExcelApp.ActiveWorkBook.Worksheets.Count > 1 do


【TExcelWorkSheet】
■基礎知識
エクセルの1シート単位での操作を行う。

■メソッド
・ConnectTo
現在のシートを読み込む
例)xlsShet.ConnectTo(xlwBook.activesheet as _Worksheet);

■プロパティ
・Cells
1セル単位で選択する。以下のようにセルに値をセットする。
例)Cells.Item[1, 1] := 'abc';
・Range    
セルを矩形選択する。
左上のセル~右下のセル を指定することで、範囲指定する。
・1セルのみを選択する場合
   ExcelWorksheet1.Range['A1','A1'].Value := Edit1.Text;
  とすれば、A1のセルに値が入る。
・複数のセルに同時に値を挿入する
   ExcelWorksheet1.Range['A1','B2'].Value := Edit1.Text;
  とすれば、A1~B2の4つのセルに同じ値を同時に挿入可能。
・これの応用で、1次元、2次元の配列の値を一度に入力する方法。
   SetLength(ArrXlsHd, 3, 7);  (タテ3行、横7列の要素をもつ配列)
   Range[Cells.Item[1, 1],Cells.Item[3, 7]].Value := ArrXlsHd;
  これで、セルの 1,1~3,7 の範囲に、配列の全要素の値が挿入される。
・シートをクリアする方法
  ewExcelSheet.Range[ewExcelSheet.Cells.Item[1, 1],
  ewExcelSheet.Cells.Item[ewExcelSheet.Rows.Count,
  ewExcelSheet.Columns.Count]].Value := '';


【サンプル集】
■エクセルファイルオープン
eaExcelApp  := TExcelApplication.Create(nil);
eaExcelApp.ConnectKind := ckNewInstance;  //エクセルを別スレッドで起動する
ewExcelSheet := TExcelWorksheet.Create(nil);
eaExcelApp.Connect;
eaExcelApp.Visible[0] := False;//True; //エクセルの可視/不可視

■エクセルファイルクローズ
//上書き確認のダイアログを表示させない
eaExcelApp.DisplayAlerts[0] := False;
ewExcelSheet.Free;
eaExcelApp.ActiveWorkbook.Close(False,EmptyParam,False,0);
eaExcelApp.Quit;
eaExcelApp.Disconnect;
eaExcelApp.Free;

■シート削除
eaExcelApp.DisplayAlerts[0] := False;
//エクセルブック保存
eaExcelApp.Workbooks[1].SaveAs(pXlsFileName, NULL, NULL, NULL, NULL, NULL,
                 0, NULL, NULL, NULL, NULL, 0);
//ワークブックの1つめのシートをアクティブに
(eaExcelApp.ActiveWorkbook.Worksheets[1] as _WorkSheet).Activate(0);
//シート数が2毎以上ある場合は削除
while eaExcelApp.ActiveWorkBook.Worksheets.Count > 1 do
begin
  i := eaExcelApp.ActiveWorkBook.Worksheets.Count;
  eaExcelApp.DisplayAlerts[0] := False;
  (eaExcelApp.ActiveWorkbook.Worksheets[i] as _WorkSheet).Delete(0);
end;


【Tips】
■エクセルの最終行取得
      //最終列取得
      iMaxRow := Cells.Item[1, 1].End[xlDown].Row;
      SetLength(Xls1, iMaxRow - 1);
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
ゆるキャラ命
性別:
非公開

P R