2016-04-08 85 views
0

私はC#のランク初心者です。現在、Visual Studio 2015を使用してWord 2013のリボンベースのVSTOプラグインを作成していますWord 2013 VSTOプラグインでApplication.Select.Findを利用できません

  • ユーザーからの入力をテキストボックスに入力します。
  • 一連の文字( "xxxxx")を検索し、以前のユーザー入力を使用してドキュメント全体のセットを置き換えます。
  • 文書をPDFとして保存します。

私は現在、罰金最初最後タスクを実行することができています。皮肉なことに、私はMSDN article on Find & Replaceからコードを直接使用しましたが、私のビルドを妨げるエラーが発生し続けます。私は、Application.Selection.FindWord.Selection.Findと置き換え、WordApp.Selection.Findと置き換えることを含む多くの解決策を試したが、役に立たなかった。次のように

私の正確なエラーは:「 エラーCS0117 『アプリケーション』 『選択』の定義が含まれていません」私はそれが私にバティを駆動しています、ここでの勝利に近い感じ

を。私は以下の完全なコードを投稿しました。

ご協力いただきありがとうございました。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Office.Tools.Ribbon; 
using System.Windows.Forms; 
using Word = Microsoft.Office.Interop.Word; 
using Microsoft.Office.Tools.Word; 

namespace RestRef_Automator_Test 
{ 
    public partial class Ribbon1 
    { 
     private bool flag; 

     private void Ribbon1_Load(object sender, RibbonUIEventArgs e) 
     { 

     } 

     private void button1_Click(object sender, RibbonControlEventArgs e) 
     { 
      //Get, Find, & Replace RID 
      int myRID = 0; 
      string myString = myRID.ToString(); 

      flag = int.TryParse(RID.Text, out myRID); 
      if (flag == false) 
      { 
       MessageBox.Show("Please enter in a number.", "Input Error"); 
       return; 
      } 

      Word.Find findObject = Application.Selection.Find; 
      findObject.ClearFormatting(); 
      findObject.Text = "xxxxx"; 
      findObject.Replacement.ClearFormatting(); 
      findObject.Replacement.Text = myString; 

      object replaceALL = Word.WdReplace.wdReplaceAll; 
      object missing = null; 
      findObject.Execute(
       ref missing, ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref missing, ref missing, 
       ref replaceALL, ref missing, ref missing, ref missing, ref missing); 

      //Save as PDF w/ applicable name. 
      SaveFileDialog dlg = new SaveFileDialog(); 
      dlg.FileName = "*"; 
      dlg.DefaultExt = "pdf"; 
      dlg.ValidateNames = true; 
      if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(dlg.FileName, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF, OpenAfterExport: true); } 
     } 
    } 
} 
+0

まだ関連しています。しかし、ある時点でCS0117を取得したことを覚えています。 [this](https://support.microsoft.com/en-us/kb/821175)ページで解決しました。 –

+0

@NickOtten、ありがとう!とても有難い。残念ながら、私のスキルレベルはかなり低いので、上記のコードでどのように実装されるかを理解するのに少し問題があります。あなたは時間があれば、私は上記の使用例を求めてもいいですか?そうでなければ、全く問題ありません!ありがとうございました! –

+0

私は別の何かに気付いたときに私は例を作っていました、下記の答えを見てください。 –

答えて

0

元の質問の下にコメントをフォローアップすると、私はあなたに間違ったアプリケーションオブジェクトを使用していることに気づいた。代わりにあなたの選択を見つけるためにMS Wordに依頼する代わりに、あなたのC#アプリケーションにそれを尋ねます。

私は、MS Wordを自分のコンピュータにインストールされていないが、メモリのうち、私はこのソリューションがいることを期待していることを覚えておいてください

Word.Find findObject = Application.Selection.Find; 

var app = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); 
Word.Find findObject = app.Selection.Find; 

に変更すべきであると言うだろう女史Wordが起動しています。単語が実行されていない場合、例外が発生します。

+0

あなたは、脳の保護者です。どうもありがとうございます!注記すると、これで私のアドインを構築することはできましたが、残念ながらこの段階で実際にテキストを置き換えることはできません。これは私の上にあり、あなたに多くのおかげです! –

+0

@NickDonegan嬉しいあなたのフォローアップの問題については、私は助けることができました:あなたが正しい単語のインスタンスに接続していることを確認してください(タスクマネージャをチェックし、プロセスリストに1つのWORD.EXEがあることを確認してください)。 –

0

Nickの分析は正しいですが、推奨される解決策はVSTOアドインには最適ではありません。

これはVSTOアドインであるため、GetObjectを使用してWord.Applicationのインスタンスを取得すると、ではなく、が正しい方法です。 Word.Applicationは、アドインがWord.Applicationでインプロセスで実行されているため、任意のVSTOアドインを通じて直接使用できます。通常ThisAddIn_StartupイベントでThisAddIn.csクラスで

、:

Word.Application wdApp = this.Application; 

あなたが/したい場合は、Wordを、その後、別のクラスからアクセスのいずれかを宣言する必要があります。クラスのメンバとしてApplicationオブジェクトとThisAddIn_Startup

ORすべてのクラス全体のすべてのVSTOオブジェクトへのあなたのコードへのアクセスを提供しますGlobalsオブジェクトを通じてアクセスして、それを割り当てます。これがあれば、私は知らない

Word.Application app = Globals.ThisAddIn.Application; 
+0

ありがとうございました!あなたの提案で自分のコードを編集しましたが、今はすべてがもっときれいに見えます。私も最終的に交換作業を得たので、皆さんは公式に素晴らしいです! –

+0

あなたは@NickDoneganを歓迎しています:-)あなたはサイトの初心者であるため、有用な情報を人々に感謝する「正しい」方法は、アップフォート(投稿の横にある上矢印)です。 "the" Answerの隣にチェックマークを入れてください。あなたはあなたが望むだけ多くの貢献をupvoteすることができます。唯一の「回答」があります。 –

+0

絶対に、私に知らせてくれてありがとう!私はあなたと@NickOttenの両方をupvotedしましたが、私の担当者がまだ目に見える影響があるほど高くないようです。私の感謝はまだ本当です! –

関連する問題