none
Microsoft.Office.Interop.Word._Application.Quit的警告如何解决? RRS feed

  • 问题

  • 方法“Microsoft.Office.Interop.Word._Application.Quit(ref object, ref object, ref object)”和非方法“Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit”之间存在二义性。将使用方法组。 

    这是什么意思?我看都看不明白它在说什么。如何解决?


    不受2008的广告诱惑, 本人坚持使用Windows Server 2003, Visual Studio 2005和SQL Server 2000.
    • 已移动 周雪峰MVP, Moderator 2009年3月18日 9:32 移动到office版 (从 一般性问题讨论区 移动到 Microsoft office system)
    2009年3月18日 8:02

答案

  • 的确存在二义性,参考word对象库然后打开Visual Studio的对象浏览器,展开Microsoft.Office.Interop.Word,你会看到_Application和Application,如果你展开Application,你会看到它有两个基本类型:_Application和ApplicationEvents4_Event,这就是问题所在,虽然它们都声明了Quit,但在_Application下它是方法,而在ApplicationEvents4_Event下它是事件。
    Microsoft Technet Observer
    • 已标记为答案 dvdvip 2009年3月20日 0:55
    2009年3月19日 8:06
    版主

全部回复

  • 如果你没有进行office开发,是否启用了宏?或者安装了某个第三方的加载项?或者……中招了?
    Microsoft Technet Observer
    2009年3月18日 15:13
    版主
  • 是Office开发。就是因为Office开发才有这个问题。说直接点就是调用Word的功能。
    不受2008的广告诱惑, 本人坚持使用Windows Server 2003, Visual Studio 2005和SQL Server 2000.
    2009年3月19日 0:07
  • 的确存在二义性,参考word对象库然后打开Visual Studio的对象浏览器,展开Microsoft.Office.Interop.Word,你会看到_Application和Application,如果你展开Application,你会看到它有两个基本类型:_Application和ApplicationEvents4_Event,这就是问题所在,虽然它们都声明了Quit,但在_Application下它是方法,而在ApplicationEvents4_Event下它是事件。
    Microsoft Technet Observer
    • 已标记为答案 dvdvip 2009年3月20日 0:55
    2009年3月19日 8:06
    版主
  • 你分析得很具体,问题是,如何解决这个问题?

    下面是Form1.cs文件的代码:

    using System;  
    using System.Windows.Forms;  
    using System.Reflection;  
    using Word=Microsoft.Office.Interop.Word;  
     
     
    namespace WordSpell  
    {  
        public partial class Form1 : System.Windows.Forms.Form  
        {  
            private System.Windows.Forms.TextBox T;  
     
            public Form1()  //constructor  
            {  
                InitializeComponent();  
            }  
     
     
            private void T_DoubleClick(object sender,EventArgs e)  
           {Word.Application app = new Word.Application();  
     
                int errors = 0;  
                if (T.Text.Length > 0)  
                {  
                    app.Visible = false;  
     
                    // Setting these variables is comparable to passing null to the function.  
                    // This is necessary because the C# null cannot be passed by reference.  
                    object template = Missing.Value;  
                    object newTemplate = Missing.Value;  
                    object documentType = Missing.Value;  
                    object visible = true;  
     
                    Word._Document doc1 = app.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);  
                    doc1.Words.First.InsertBefore(T.Text);  
                    Word.ProofreadingErrors spellErrorsColl = doc1.SpellingErrors;  
                    errors = spellErrorsColl.Count;  
     
                    object optional = Missing.Value;  
     
                    doc1.CheckSpelling(  
                        ref optional, ref optional, ref optional, ref optional, ref optional, ref optional,  
                        ref optional, ref optional, ref optional, ref optional, ref optional, ref optional);  
     
                    this.Text = errors + " errors are corrected ";  
                    object first = 0;  
                    object last = doc1.Characters.Count - 1;  
                    T.Text = doc1.Range(ref first, ref last).Text;  
                }  
     
                object saveChanges = false;  
                object originalFormat = Missing.Value;  
                object routeDocument = Missing.Value;  
     
                app.Quit(ref saveChanges, ref originalFormat, ref routeDocument);  
     
            }  
        }  


    本人现在使用Windows Server 2003, CentOS Linux 5.2, Windows XP,VirtualBox 2.1.4, Visual Studio 2005, Eclipse 3.2, .NET Framework 2.0 SP2, C# 2.0, SQL Server 2000, MySQL 5.0, FireBird 2.1.1, PHP 5.2.4, Office 2007和OpenOffice 3.0.
    2009年3月20日 0:58
  • namespace WordSpell {  
        partial class Form1 {  
            private System.ComponentModel.IContainer components = null;  
     
            protected override void Dispose(bool disposing) {  
            if (disposing && (components != null)) {  
            components.Dispose();  
            }  
            base.Dispose(disposing);  
            }
            #region Windows 窗体设计器生成的代码  
     
            private void InitializeComponent() {  
            this.T = new System.Windows.Forms.TextBox();  
            this.SuspendLayout();  
            //   
            // T  
            //   
            this.T.BorderStyle = System.Windows.Forms.BorderStyle.None;  
            this.T.CausesValidation = false;  
            this.T.Font = new System.Drawing.Font("Verdana",12F,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((byte)(0)));  
            this.T.Location = new System.Drawing.Point(0,0);  
            this.T.Margin = new System.Windows.Forms.Padding(7,4,7,4);  
            this.T.MaxLength = 4000000;  
            this.T.Multiline = true;  
            this.T.Name = "T";  
            this.T.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;  
            this.T.Size = new System.Drawing.Size(700,260);  
            this.T.TabIndex = 0;  
            this.T.DoubleClick += new System.EventHandler(this.T_DoubleClick);  
            //   
            // Form1  
            //   
            this.AutoScaleDimensions = new System.Drawing.SizeF(11F,18F);  
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;  
            this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;  
            this.CausesValidation = false;  
            this.ClientSize = new System.Drawing.Size(712,268);  
            this.Controls.Add(this.T);  
            this.Font = new System.Drawing.Font("Verdana",12F,System.Drawing.FontStyle.Bold,System.Drawing.GraphicsUnit.Point,((byte)(0)));  
            this.Margin = new System.Windows.Forms.Padding(7,4,7,4);  
            this.Name = "Form1";  
            this.ShowIcon = false;  
            this.ShowInTaskbar = false;  
            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;  
            this.ResumeLayout(false);  
            this.PerformLayout();  
     
            }
            #endregion  
        }  

    }  

     
     

    这是Form1.Desinger.cs里的代码。

    2009年3月20日 0:59
  • 抱歉本人没有从事过VSTO的开发,但下面这篇文章的2.4这第一部分或许对您有帮助(sorry我也没仔细看,呵呵):

    http://msdn.microsoft.com/zh-cn/library/aa679807(en-us).aspx#officeinteroperabilitych2_part2_version
    Microsoft Technet Observer
    2009年3月20日 1:32
    版主
  • 再上一段简单的控制台应用程序,它将建立一个WORD实例,创建文档并保存,请注意其中的_Application和_Document的使用以及Document和Application的释放机制,希望对您有所帮助。
    using System;
    using System.Collections.Generic;
    using System.Text;
    using WORD = Microsoft.Office.Interop.Word;
    using System.Runtime.InteropServices;
    using System.IO;
    namespace QW
    {
    class Program
    {
    static void Main(string[] args)
    {
    WORD._Application word = null;
    WORD._Document document = null;
    Object fileName = (Object)String.Concat(Path.GetTempPath(), @"Document.doc");
    Object fileFormat = (Object)WORD.WdSaveFormat.wdFormatDocument;
    Object missing = (Object)Type.Missing;
    try
    {
    word = new WORD.Application();
    document = word.Documents.Add(
    /* ref object Template */ ref missing,
    /* ref object NewTemplate */ ref missing,
    /* ref object DocumentType */ ref missing,
    /* ref object Visible */ ref missing);
    document.SaveAs(
    /* ref object FileName */ ref fileName,
    /* ref object FileFormat */ ref fileFormat,
    /* ref object LockComments */ ref missing,
    /* ref object Password */ ref missing,
    /* ref object AddToRecentFiles */ ref missing,
    /* ref object WritePassword */ ref missing,
    /* ref object ReadOnlyRecommended */ ref missing,
    /* ref object EmbedTrueTypeFonts */ ref missing,
    /* ref object SaveNativePictureFormat */ ref missing,
    /* ref object SaveFormsData */ ref missing,
    /* ref object SaveAsAOCELetter */ ref missing,
    /* ref object Encoding */ ref missing,
    /* ref object InsertLineBreaks */ ref missing,
    /* ref object AllowSubstitutions */ ref missing,
    /* ref object LineEncoding */ ref missing,
    /* ref object AddBiDiMarks */ ref missing);
    }
    catch (COMException)
    {
    }
    finally
    {
    if (document != null)
    {
    document.Close(
    /* ref object SaveChanges */ ref missing,
    /* ref object OriginalFormat */ ref missing,
    /* ref object RouteDocument */ ref missing);
    document = null;
    }
    if (word != null)
    {
    word.Quit(
    /* ref object SaveChanges */ ref missing,
    /* ref object OriginalFormat */ ref missing,
    /* ref object RouteDocument */ ref missing);
    word = null;
    }
    }
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    }
    }
    }
    Cheers, TC

    Microsoft Technet Observer
    2009年3月20日 3:09
    版主