久しぶりの投稿です、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;