0

私はvsto-wordアドインを開発しており、picturecontentcontrolのWord文書にリモート画像を挿入しています。

ログインしているユーザーがリモート ログイン ドメインに接続されているマシンを除いて、すべて正常に動作します。

エラーに関する情報は得られません。実行を停止するだけです.画像と空のコンテンツコントロールがワードドキュメントに挿入されますが、2つのオブジェクトとして挿入されるため、コンテンツコントロールは画像プロパティを取得していません。これは、コードの実行が停止するポイントでもあります。

public void resultImage(Result r, Dictionary<string, string> wizard)
{
      if (this.hasSelection())
      {
          PictureContentControl picture = getVSTODocument().Controls.AddPictureContentControl(getCCRange(), this.getRandomControlName());

          picture.LockContents = false;
          toggleActiveCCs(false);

          picture.Title = truncateCCTitle(r.title);
          picture.Tag = getWizardString(wizard, r.arrange);

                 try {
                     Image img = Fetcher.getImage(r.data)
                     picture.Image = img;
                 }
                 catch (Exception e) {
                     Log.alert(e.Message);
                 }


          afterInsert(picture.Range);
      }
    }

現在、管理者以外のユーザーがメモリへの書き込み権限を持っていないのではないかと思っていたので、画像を保存するために一時ファイルを使用しています...テーブルを挿入するために一時ファイル(html付き)も使用しています。ドメインアクセスが制限されたユーザーとしても正常に機能します...だから、これは画像でも機能するはずです!?

私は次のようなものをたくさん試しました:

  • StreamReaders と Memory ストリームを使用して画像を作成する
  • ロックされた ContentControls は動作を停止するだけで同様の動作をするため、すべてのロックが解除されていることを確認します。
  • base64でエンコードされた画像を転送し、メモリストリームも使用します...しかし、ここでも同じです..

MSDNでもこの質問をしました

update X: エラーを特定しました。これは hresult 0x80004005 (E_FAIL: Unspecified failure) で、あまり役に立ちません。

スタックトレース:

Microsoft.Office.Interop.Word.InlineShapes.AddPicture(String FileName, Object& LinkToFile, Object& SaveWithDocument, Object& Range) at Microsoft.Office.Tools.Word.PictureContentControlImpl.SetImage(Image image) at Microsoft.Office.Tools.Word.PictureContentControlImpl XXX.ThisAddIn.resultImage(Result r, Dictionary`2 ウィザード) の .set_Image(Image value)

それは間違いなく許可の問題です。適切な許可を確認/設定するにはどうすればよいですか.. ?!!

4

2 に答える 2

1

私は簡単な解決策を見つけました...このドメインログインマシンでも機能します..範囲にインラインシェイプを追加し、次のようにコンテンツコントロールをこの範囲外にします:

Word.Range rng = getCCRange();

string tempPath = Fetcher.getImage(r.data);
rng.InlineShapes.AddPicture(tempPath);

PictureContentControl picture = getVSTODocument().Controls.AddPictureContentControl(rng, this.getRandomControlName());
于 2016-02-06T16:54:25.530 に答える