ApplicationFactory.GetVstoObject 方法 (_Worksheet)

返回一个 Microsoft.Office.Tools.Excel.Worksheet 宿主项,该宿主项可扩展指定的本机工作簿对象的功能。

命名空间:  Microsoft.Office.Tools.Excel
程序集:   Microsoft.Office.Tools.Excel(在 Microsoft.Office.Tools.Excel.dll 中)
  Microsoft.Office.Tools.Excel.v4.0.Utilities(在 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll 中)

语法

声明
Function GetVstoObject ( _
    worksheet As _Worksheet _
) As Worksheet
Worksheet GetVstoObject(
    _Worksheet worksheet
)

参数

返回值

类型:Microsoft.Office.Tools.Excel.Worksheet
一个扩展本机工作表对象功能的宿主项。

备注

在应用程序级外接程序中调用此方法可自定义在 Excel 中打开的任何工作表。 此方法会生成一个新的 Microsoft.Office.Tools.Excel.Worksheet 对象(如果还没有生成此类对象)。 对此方法的后续调用会返回现有的 Microsoft.Office.Tools.Excel.Worksheet 对象的缓存实例。 有关更多信息,请参见在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿

备注

worksheet 参数属于 Microsoft.Office.Interop.Excel._Worksheet 类型,后者是 Microsoft.Office.Interop.Excel.Worksheet 的父接口。因此,此方法可以接受这两种类型的对象:Microsoft.Office.Interop.Excel._WorksheetMicrosoft.Office.Interop.Excel.Worksheet。通常,在引用 Excel 工作表时,使用 Microsoft.Office.Interop.Excel.Worksheet

示例

下面的代码示例为每个具有宿主项的 Microsoft.Office.Interop.Excel.Workbook 对象创建一个 Microsoft.Office.Tools.Excel.Worksheet 宿主项。 若要使用此代码,请运行该自针对 .NET Framework 4 或 .NET Framework 4.5的 Excel 外接程序项目的 ThisAddIn 选件类。

Private Sub Application_WorkbookBeforeSave( _
    ByVal Wb As Microsoft.Office.Interop.Excel.Workbook, _
    ByVal SaveAsUI As Boolean, _
    ByRef Cancel As Boolean) Handles Application.WorkbookBeforeSave

    If Globals.Factory.HasVstoObject(Wb) = True Then
        For Each interopSheet As Excel.Worksheet In Wb.Worksheets
            If Globals.Factory.HasVstoObject(interopSheet) = True Then
                Dim vstoSheet As Worksheet = Globals.Factory.GetVstoObject(interopSheet)
                If vstoSheet.Controls.Count > 0 Then
                    System.Windows.Forms.MessageBox.Show( _
                        "The VSTO controls are not persisted when you" _
                        + " save and close this workbook.", _
                        "Controls Persistence", _
                        System.Windows.Forms.MessageBoxButtons.OK, _
                        System.Windows.Forms.MessageBoxIcon.Warning)
                    Exit For
                End If
            End If
        Next
    End If
End Sub
void Application_WorkbookBeforeSave(
    Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, 
    ref bool Cancel)
{            
    if (Globals.Factory.HasVstoObject(Wb) == true)
    {                
        foreach (Excel.Worksheet interopSheet in Wb.Worksheets)
        {
            if (Globals.Factory.HasVstoObject(interopSheet) ==  true)
            {
                Worksheet vstoSheet = Globals.Factory.GetVstoObject(interopSheet);
                if (vstoSheet.Controls.Count > 0)
                {
                    System.Windows.Forms.MessageBox.Show(
                        "The VSTO controls are not persisted when you"
                        + " save and close this workbook.",
                        "Controls Persistence",
                        System.Windows.Forms.MessageBoxButtons.OK,
                        System.Windows.Forms.MessageBoxIcon.Warning);
                    break;
                }
            }
        }
    }
}

.NET Framework 安全性

请参见

参考

ApplicationFactory 接口

GetVstoObject 重载

Microsoft.Office.Tools.Excel 命名空间

其他资源

在运行时在应用程序级外接程序中扩展 Word 文档和 Excel 工作簿

Getting Extended Objects from Native Office Objects in Document-Level Customizations