Lazarusから日本語対応でComObjを使ってExceVBAを呼び出す – Information Teaching Service 雄飛

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;
 
 

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です