ITservice雄飛 プロモーションビデオ

2020年6月13日土曜日

Lazarusから日本語対応でComObjを使ってExceVBAを呼び出す

おはようございます。

久しぶりの投稿です、ITservice雄飛です。

Lazarusから、VBAを呼び出して自動処理を書いています。
そして、Delphiで使っていたライブラリを、Lazarusに移植しております。

今回は、そのネタを。

Lazarusは、Ver2.08(64Bit)を使用しております。
Excelは、2016になります。

Lazarusは、開発環境内部の文字セットが、UTF-8です。

旧Delphi(Ver6位)だとAnsi、
新Delphi(XE前後以降)だと、Unicode。

更にUTF-8でそのままやると、Excel等とのアプリケーションの連携で苦しみます。

要は、文字化けですね。
やってみればなんてことはないのですが、
WideStringで変換を掛ければ一発で行けました。

Delphiとは似て非なるのがLazarusでもあり、その辺りは、
慣れと試行錯誤でしょうか?

以下がコードになります。

あとは、普通にVBAをDelphiで呼び出すようにして記述するだけです。

気持ち程度ですが、Delphiより処理速度が速い気もします。


procedure TForm1.Button1Click(Sender: TObject);
var
  Exl:Variant;                             //Excelを呼び出す為の器
  SheetNo,row,col:integer;          //シート番号、セル番号
  SheetName,CellValue:String;    //シートタブ、セルに入れる文字列
begin
  SheetNo := 1; //番号は1番(Sheet1)から。
  row := 1;        //Row1を指定
  col := 1;         //ColAを指定
  SheetName := 'シート名を代入するよ';         //シート名を設定
  CellValue := 'セルに文字を代入するよ';         //セル名を設定
  Exl := CreateOleObject('Excel.Application'); //ExcelのComObjを呼び出し、初期化する
  Exl.Visible := true;                                     //エクセルの表示をONにする
  Exl.DisplayAlerts := true;                           //警告(アラート)を有効にする
  Exl.Workbooks.add;                                   //ワークブックを新規に追加する

  //シート名を代入(WideStringで変換をかける)
  Exl.WorkSheets[SheetNo].name:= WideString(SheetName);
  //セルに文字を代入(WideStringで変換をかける)
  Exl.WorkSheets[SheetNo].Cells[row,col] := WideString(CellValue);
  //Excelを終了させる
  Exl.Quit;
  //Variantを初期化し、使用した痕跡を消去する
  Exl := nil;
end;


0 件のコメント:

コメントを投稿