1、やりたいこと
delphiで作成した画像ファイルをOpenOffice Calcに貼ってpdf形式にして保存したい
2、処理の順序
A: Delphiで画像を作成する(下記コードでは 無題.jpg という名前になってます)
B: OpenOffice CalcをDelphiから起動する
C: Calcに無題.jpgを貼りつける
D: Calcからpdf形式で保存する
以上の処理のうちCのみうまくできません。
エラーも出ずに処理するのですが、Calcの画面になんの変化もなく
無題.jpgは貼り付けられません。
また、エラーもでないため問題の切り分けすらできていない状況です。
(そのため質問にコードを貼らせていただきます。ごめんなさい ><)
画像は作成できていることから、Aには問題ないので、B,Cのコードを
以下に記載します。
間違っている点があったら指摘していただけると助かります。
また、以下のような方法ではなく、Calcに画像を貼りつける方法があったら
教えていただきたいです。
(複数枚の画像データをずらしながら自動的に貼っていく必要があるので、
位置を指定できる貼りつけ方法だとうれしいです)
Delphi7
OpenOffice.org 3.4
Windows7
グローバル変数
//OpenOfficeグローバル変数
vOpenOffice : Variant; //サービスマネージャ
vobjFrame:Variant;
vDispacher:Variant;
vStarDesktop: Variant; //サービス
vDocument : Variant; //ドキュメント
vSheet : Variant; //シート
//================================================================
// B: Calc起動(こちらは正常に動作しています。読み飛ばしても結構です)
//================================================================
//空のプロパティ配列を返却するメソッド
function TForm1.dummyArray: Variant;
begin
Result:= VarArrayCreate([0, -1], varVariant);
end;
//起動
procedure TForm1.Button5Click(Sender: TObject);
begin
//サービスマネージャ生成
vOpenOffice := CreateOleObject('com.sun.star.ServiceManager');
//サービス生成
vStarDesktop := vOpenOffice.createInstance('com.sun.star.frame.Desktop');
//新規でCalcを起動
vDocument := vStarDesktop.loadComponentFromURL('private:factory/scalc'
, '_blank'
, 0
, dummyArray);
//アクティブなSheetを設定(1番目のSheet)
vSheet := vDocument.Sheets.getByIndex(0);
//Sheet名変更
vSheet.Name := 'Sheet1';
vDocument.getCurrentController.Select('A1');
//vSheet.getCellRangeByName('A1');
end;
//================================================================
// C: 画像の挿入(こちらが問題のコード)
//================================================================
procedure TForm1.Button6Click(Sender: TObject);
var
vaProperties : variant; //保存パラメータ用<配列>
vProperty,vProperty2,vProperty3,vProperty4 : variant; //保存オプション用<配列値>
sFileName : String; //保存ファイル名編集用
begin
vobjFrame := vDocument.getCurrentController.getFrame;
vDispacher := vOpenOffice.createInstance('com.sun.star.frame.DispatchHelper');
//パラメータ用プロパティ配列生成
vaProperties := VarArrayCreate([0, 3], varVariant);
//プロパティ用オプション生成
vProperty:= vOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
vProperty2:= vOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
vProperty3:= vOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
vProperty4:= vOpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
//プロパティ用オプション値設定
vProperty.Name := 'FileName';
vProperty.Value := 'file:///C:/無題.jpg';
//プロパティ用オプション値設定
vProperty2.Name := 'FilterName';
vProperty2.Value := '<すべての書式>';
//プロパティ用オプション値設定
vProperty3.Name := 'AsLink';
vProperty3.Value := false;
//プロパティ用オプション値設定
vProperty4.Name := 'Style';
vProperty4.Value := '図';
//オプション内容をプロパティ配列に設定
vaProperties[0] := vProperty;
vaProperties[1] := vProperty2;
vaProperties[2] := vProperty3;
vaProperties[3] := vProperty4;
vDispacher.executeDispatch(vobjFrame, '.uno:InsertGraphic'
, '_blank'
, 0
, vaProperties);
end;
ツイート | ![]() |