おはようございます。
久しぶりの投稿です、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;