9

最近、Wordファイルの読み取りに関する質問をここに投稿しました。

アプリは正常に動作しますが、この警告メッセージが表示されます。

警告メソッド'Microsoft.Office.Interop.Word._Document.Close(ref object、ref object、ref object)'と非メソッド'Microsoft.Office.Interop.Word.DocumentEvents2_Event.Close'の間のあいまいさ。メソッドグループを使用します。

名前空間を使用している人にはあいまいさがあるようですが、これを解決する方法を知りたいと思います。アプリは動作しますが、警告/エラーを最小限に抑えたいと思います。

クラスに以下のコードを提供しました。それが参照する線はこれらの2つの線です

docs.Close(ref nullobject, ref nullobject, ref nullobject);
wordObject.Quit(ref nullobject, ref nullobject, ref nullobject);

コード全体:

namespace Wizard.Classes
{
    class MSWordReader
    {
        public void read(String filename)
        {
            String buffer = "";
            try
            {
                Microsoft.Office.Interop.Word.Application wordObject = new   
                Microsoft.Office.Interop.Word.Application();
                object file = filename; //this is the path
                object nullobject = Type.Missing;
                object visible = false;
                object readonlyp = true;
                object addtorecent = false; //add to words recent filelist

                Microsoft.Office.Interop.Word.Document docs = wordObject.Documents.Open
                    (ref file,ref nullobject, ref readonlyp, ref addtorecent,
                    ref nullobject, ref nullobject, ref nullobject, ref nullobject,
                    ref nullobject, ref nullobject, ref nullobject, ref visible,
                    ref nullobject, ref nullobject, ref nullobject, ref nullobject
                                    );
                docs.ActiveWindow.Selection.WholeStory();
                docs.ActiveWindow.Selection.Copy();
                IDataObject data = Clipboard.GetDataObject();
                buffer = data.GetData(DataFormats.Text).ToString();

                docs.Close(ref nullobject, ref nullobject, ref nullobject);

                wordObject.Quit(ref nullobject, ref nullobject, ref nullobject);
                MessageBox.Show(buffer);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
4

3 に答える 3

21

あいまいさを解決するには、次を使用します。

((Microsoft.Office.Interop.Word._Document)docs).Close(ref nullobject, ref nullobject, ref nullobject);    
((Microsoft.Office.Interop.Word._Application)wordObject).Quit(ref nullobject, ref nullobject, ref nullobject);
于 2012-10-18T02:22:27.307 に答える
6

最初にキャストしてみてくださいdocs

((_Document)docs).Close(ref nullobject, ref nullobject, ref nullobject);

Microsoft.Office.Interop.Word.Documentインターフェイスは、 DocumentEvents2_Eventインターフェイスと_Documentインターフェイスの両方を実装します。それぞれにcloseメソッドがあり、コンパイラーはどちらを意味するのかを判断するのに問題があります。

または、最初にdocs変数をaとして宣言することもできます。_Document

Microsoft.Office.Interop.Word._Document docs = wordObject.Documents.Open ...

同じ解像度を使用して、のあいまいさをwordObjectにキャストすることができます_Application

于 2012-10-18T02:22:09.287 に答える
1

提案されたソリューションは正常に機能しますが、コンパイラが十分に満足している場合でも、R#エラーダイアログで古い「エラーを無視」トリックを使用する以外は取り除くことができないあいまいな呼び出しエラーがReSharperに残ります。

私はR#から本当に良い解決策を得ることができず、それはほんの数か所でしか出てこないので、Visual StudioまたはR#エラーのいずれかを生成せずに機能することがわかった最も悪い答えは、ダイナミックにキャストすることです。

((dynamic) Doc).Close();

理想的ではありませんが、鼻を押さえて使うだけです。複数回使用する場合は、明らかに動的変数に保存できます。技術的にはすべてにダイナミックを使用できますが(これはレイトバウンドCOMです)、すべてのintelliSenseが失われるため、発生するいくつかのメソッドとイベントでのみ使用します。

于 2014-12-29T23:18:44.177 に答える