OLEオートメーションを利用したExcelコントロール

テクニカルブログ

こんにちは、サポート部の明石です。

最近すっかり寒くなりましたね。
さて弊社サポートでは、PowerBuilder 2017からSaveAsTypeの「EXCEL!」が廃止となったことが影響してか、「XLSX!」への置き換えやOLEオートメーションを利用したExcel操作が、PowerServer Web化と並んでホットな話題になっています。
そんな訳で今回は、OLEオートメーションを利用したExcel操作についてご紹介したいと思います。


OLEオートメーションとは

OLE(Object Linking and Embedding)とは、Microsoft社が開発した、Windowsのアプリケーションから別のWindowsアプリケーションを操作するために作られた規格になります。また、OLEの技術をネットワーク経由で利用できるようにしたものは「ActiveX」と呼ばれます。
このOLEを、VBAなどのプログラミング言語を利用して外部からアプリケーション操作できるようにした仕組みを、「OLEオートメーション」といいます。


OLEを利用するメリットは?

「僕なんかは、ビルダー※でファイル出力する場合はSaveAsだけで事足りてましたけどね。」とは同じサポート部のコバヤシ君。確かにPowerBuilderで用意されているSaveAsメソッドを利用すれば、データウィンドウに表示されているデータが一発でファイル出力できるので非常に便利なのですが、データウィンドウ上に設定したフォントや線までは引き継ぐことができないので、若干痒い所に手が届かない印象もあります。そんな時に、OLEを利用して出力したExcelファイルを編集することで、ファイルのレイアウト変更が行えます。
なお、OLEでExcelを操作する場合は、操作する端末にExcelがインストールされていることが前提となります。

※ビルダー:PowerBuilderの略称、私はPBと呼んでましたが。。。


プログラミングしてみよう!

物は試し、実際にPowerBuilderからExcelを操作してみましょう。下記は、SaveAsを利用して単純にExcelファイルを出力した状態となります。

SaveAs保存時

SaveAs保存時

このExcelファイルに対して、PowerScript上でファイルを操作します。


// 変数宣言
oleobject Lo_ole		// OLEオブジェクト
Integer Li_cd_ret		// 戻り値
String Ls_nm_file		// ファイル名

// 既存のExcelファイル名を取得
Ls_nm_file = sle_1.text
Lo_ole = CREATE oleobject

TRY

	// オブジェクトを作成し、PowerBuilderのOLEObjectと関連づける
	Li_cd_ret = Lo_ole.ConnectToNewObject("excel.application")
	Lo_ole.Application.Workbooks.Open(Ls_nm_file)

	// ヘッダー行のフォント、サイズ、色を変更
	Lo_ole.Application.Workbooks[1].Sheets[1].Range("A1:D1").Font.Name = "游ゴシック"
	Lo_ole.Application.Workbooks[1].Sheets[1].Range("A1:D1").Font.Size = 12
	Lo_ole.Application.Workbooks[1].Sheets[1].Range("A1:D1").Interior.Color = RGB(204,255,204)

	// 明細フォント、サイズ
	Lo_ole.Application.Workbooks[1].Sheets[1].Range("A2:D21").Font.Name = "HGP創英角ポップ体"
	Lo_ole.Application.Workbooks[1].Sheets[1].Range("A2:D21").Font.Size = 10

	// 罫線を設定
	Lo_ole.Application.Workbooks[1].Sheets[1]. Range("A1:D21").Borders.LineStyle = True

	// 自動調整
	Lo_ole.Application.Workbooks[1].Sheets[1]. Range("A1:D21").EntireColumn.AutoFit

	// セルに値を設定
	Lo_ole.Application.Workbooks[1].Sheets[1].Cells[22,1] = String(now()) 
	Lo_ole.Application.Workbooks[1].Sheets[1].Cells[22,2] = "上のセルの値を PowerBuilder で設定しました。"

	// 保存します。
	Lo_ole.Application.Activeworkbook.Save()

CATCH (OLERuntimeError l_ole_error)
	MessageBox("OLERuntimeError", l_ole_error.getmessage(),StopSign!)
FINALLY
	Lo_ole.Application.Quit()
	// Excel の終了を 1 秒待つ
	sleep(1)
END TRY
Destroy Lo_ole
MessageBox("終了","OLE 編集終了")

簡単なサンプルですが、Excelファイルが編集されたことが確認できると思います。

OLE編集後

OLE編集後


まとめ

SaveAsメソッドとOLEを利用することで簡単に見栄えの良いExcelファイルの編集が行えますので、是非いろいろとお試しいただきたいと思います。
またOLEはExcel以外にも、インストールされている様々なアプリケーションと連携できるので併せてご活用ください。
以上、明石でした。

テクニカルブログ 一覧を見る
PowerBuilder マイグレーション
PowerBuilder学習、動画で始めちゃう?