如何设置(Word / Excel).Document.BeforeCloseEvent

我有一个Windows.Form application与Word和一起使用的Excel。要与他们合作,我使用Interop package。另外,我正在用Visual Studio和C#语言编程。


我创建了一个EventHandler在关闭Word文档之前执行的操作,另一个EventHandler在关闭Excel文档之前执行的操作。这两个事件的功能是:取消关闭文档,然后将其隐藏而不是关闭,以便文档继续在内存中运行。


ExcelDocument->BeforeCloseEvent工作正常,但WordDocument->BeforeCloseEvent给出了错误:


System.NullReferenceException:对象引用未设置为对象的实例。


我收到错误的行在下面的代码中指示。(在代码中,我只显示了如何包括Word / Excel,如何将它们初始化以及两个EventHandlers...。在完整代码的另一部分中,我是使用aplicacionWord / aplicacionExcel显示应用程序的地方。visible= true,...)


using System;

using System.Collections.Generic;

using System.Drawing;

using System.Windows.Forms;

using System.Reflection;

using System.IO;

// Include Word

using Word = Microsoft.Office.Interop.Word;

// Include Excel

using Excel = Microsoft.Office.Interop.Excel;


public partial class formWord : Form

{

    // New object type application of Word

    Word.Application aplicacionWord = new Word.Application();

    // New instance for Word document

    Word.Document documentoWord;

    // New object type application of Excel

    Excel.Application aplicacionExcel = new Excel.Application();

    // New instance for Excel document

    Excel.Workbook documentoExcel;

    // New instance for Excel Worksheet

    Excel.Worksheet documentoExcelPrimeraHoja;


正如所说,Excel的事件没有任何错误,但Word却有。该错误是由于文档已关闭,因此... BeforeClose无法按预期方式工作。还有其他方法可以使用BeforeClose事件吗?还是我做错了什么?


另外,我不确定这是否是处理Document.BeforeCloseEventWord和Excel的最佳方法。任何升级它的想法都会很棒。


提醒:我希望在关闭Word / Excel文档时-可以看到Word / Excel应用程序-(用户单击Top-Right-X以退出)而不是关闭文档,而是将其隐藏以使其保持打开状态。


PS:如果您想在自己的机器上尝试该问题,只需在我的代码中进行更改:


// Word application is not visible

aplicacionWord.Visible = true;

// Excel application is not visible

aplicacionExcel.Visible = true;

然后,当c#应用程序运行时,关闭两个程序(Word / Excel),您将看到错误。


繁花不似锦
浏览 218回答 1
1回答

拉丁的传说

我只能和Word对话-但因为那是您遇到错误的地方...您说提醒:我希望在关闭Word / Excel文档时-Word / Excel应用程序可见-(用户单击Top-Right-X退出)而不是关闭文档,而是将其隐藏以使其保持打开状态。如果用户单击应用程序的red-x按钮,则不是关闭文档,而是退出Word.Application。这也将关闭触发该文档的文档BeforeClose,但是由于该应用程序不再可用,您会收到错误-该对象aplicacionWord为“ null”。Word有一个Quit事件,但是没有提供取消的选项-Word将退出。您可以在Quit事件中放入代码,但是要采取某些措施,例如可以设置布尔值,可以检入BeforeClose,保存文档,启动Word的新实例(不可见)并在新实例中再次打开文档。重要的是要注意,Excel和Word在许多方面并不相同。即使两者都在“ Microsoft Office”的保护下,它们的起源也非常不同,并且是由不同的团队开发的。偶尔会尝试将所有“核心” MS Office应用程序紧密结合在一起,以实现它们确实不常见的功能(“打开”,“保存”和“关闭”用户界面是一个很好的例子),但是它们在“内部”的行为方式是完全独立的和无关。
打开App,查看更多内容
随时随地看视频慕课网APP