delphiからOpenOffice Calcに画像を貼りつけたい


egg  2012-09-18 05:21:37  No: 42941

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;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加