Sdílet prostřednictvím


Rozšíření dokumentů aplikace Word a sešitů aplikace Excel v doplňcích na úrovni aplikace za běhu

Doplněk pro úroveň aplikace můžete použít dokumenty aplikace Word a Excel přizpůsobit následujícími způsoby:

  • Přidáte ovládací prvky spravované otevřeného dokumentu nebo listu.

  • Převést existující objekt seznamu v listu aplikace Excel na rozšířené ListObject , zpřístupní události a mohou být vázány na data pomocí modelu model Windows Forms datové vazby.

  • Přístup úroveň aplikace události, které jsou vystaveny v aplikaci Word a Excel pro specifické dokumenty, sešity a listy.

Chcete-li použít tuto funkci, generovat objektu za běhu, která rozšiřuje dokument nebo sešit.

Platí pro: informace v tomto tématu se vztahuje na úrovni aplikace projekty pro následující aplikace: aplikace Excel 2010; Word 2010.Další informace naleznete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.

Generování rozšířených objekty v doplňky

Extended objekty instancí typů poskytované Visual Studio Tools pro runtime sady Office, které objekty, které existují v objektových modelů aplikace Word nebo Excel nativně funkce (nazývané nativní objekty sady Office).Generovat rozšířené objektu pro objekt aplikace Word nebo Excel, použijte GetVstoObject metoda.Při prvním volání GetVstoObject objekt metody zadané slovo nebo aplikace Excel vrátí nový objekt, který rozšiřuje zadaný objekt. Při každém volání metody a zadejte stejné aplikace Word nebo Excel objektu vrátí rozšířený stejného objektu.

Typ rozšířeného objektu má stejný název jako typ nativní objekt sady Office, ale typ je definována v Microsoft.Office.Tools.Excel nebo Microsoft.Office.Tools.Word oboru názvů.Například při volání GetVstoObject metoda rozšířit Document objektu, vrátí metoda hodnotu Document objektu.

GetVstoObject Metody jsou určeny k použití především projekty na úrovni aplikace.Tyto metody lze použít také projektů na úrovni dokumentu, ale chovat odlišně a mají méně použití.

Zjistit, zda rozšířený objekt již byla vytvořena pro konkrétní nativní objekt sady Office, použijte HasVstoObject metoda.Další informace naleznete v tématu Určení, zda Office objekt byl rozšířen.

Generování položky hostitele

Při použití GetVstoObject rozšířit na úrovni dokumentu objekt (, Workbook, Worksheet, nebo Document), vráceného objektu se nazývá položku hostitele.Položku hostitele je typ, který může obsahovat další objekty, včetně jiných rozšířené objektů a ovládací prvky.Připomíná odpovídajícího typu v aplikace Word nebo Excel primární sestavení vzájemné spolupráce, ale má další funkce.Další informace o položkách hostitele naleznete v Přehled hostitelských položek a hostitelských ovládacích prvků.

Po vytvoření položky hostitele, můžete jej přidat spravovaný ovládací prvky dokumentu, sešitu nebo listu.Další informace naleznete v tématu Přidání kontroly dokumentů a listy spravované.

Generovat položky hostitele pro dokument aplikace Word

  • Následující příklad kódu ukazuje jak vygenerovat položku hostitele aktivního dokumentu.

    If Globals.ThisAddIn.Application.Documents.Count > 0 Then 
        Dim NativeDocument As Microsoft.Office.Interop.Word.Document = _
            Globals.ThisAddIn.Application.ActiveDocument
        Dim VstoDocument As Microsoft.Office.Tools.Word.Document = _
            Globals.Factory.GetVstoObject(NativeDocument)
    End If
    
    if (Globals.ThisAddIn.Application.Documents.Count > 0)
    {
        Microsoft.Office.Interop.Word.Document nativeDocument =
            Globals.ThisAddIn.Application.ActiveDocument;
        Microsoft.Office.Tools.Word.Document vstoDocument =
            Globals.Factory.GetVstoObject(nativeDocument);
    }
    

Generovat položky hostitele v sešitu aplikace Excel

  • Následující příklad kódu ukazuje jak vygenerovat položku hostitele aktivního sešitu.

    Dim NativeWorkbook As Microsoft.Office.Interop.Excel.Workbook =
        Globals.ThisAddIn.Application.ActiveWorkbook
    If NativeWorkbook IsNot Nothing Then 
        Dim vstoWorkbook As Microsoft.Office.Tools.Excel.Workbook =
            Globals.Factory.GetVstoObject(NativeWorkbook)
    End If
    
    Microsoft.Office.Interop.Excel.Workbook nativeWorkbook = 
        Globals.ThisAddIn.Application.ActiveWorkbook;
    if (nativeWorkbook != null)
    {
        Microsoft.Office.Tools.Excel.Workbook vstoWorkbook = 
            Globals.Factory.GetVstoObject(nativeWorkbook);
    }
    

Generovat položky hostitele pro list aplikace Excel

  • Následující příklad kódu ukazuje jak vygenerovat položku hostitele pro aktivní list v projektu.

    Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
        Globals.ThisAddIn.Application.ActiveSheet
    If NativeWorksheet IsNot Nothing Then 
        Dim vstoSheet As Microsoft.Office.Tools.Excel.Worksheet =
            Globals.Factory.GetVstoObject(NativeWorksheet)
    End If
    
    Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet =
        Globals.ThisAddIn.Application.ActiveSheet;
    if (nativeWorksheet != null)
    {
        Microsoft.Office.Tools.Excel.Worksheet vstoSheet = 
            Globals.Factory.GetVstoObject(nativeWorksheet);
    }
    

Generování objektu ListObject hostitele ovládací prvky

Při použití GetVstoObject metoda rozšířit ListObject, vrátí metoda hodnotu ListObject.ListObject Má všechny funkce původní ListObject, ale má také další funkce, například možnost vázat na data pomocí modelu model Windows Forms datové vazby.Další informace naleznete v tématu ListObject – ovládací prvek.

Vygenerovat ovládací hostitele pro objektu ListObject

  • Následující příklad kódu ukazuje, jak vygenerovat ListObject pro první ListObject v aktivním listu v projektu.

    Dim sheet As Microsoft.Office.Interop.Excel.Worksheet =
        Globals.ThisAddIn.Application.ActiveSheet
    If sheet.ListObjects.Count > 0 Then 
        Dim listObject As Excel.ListObject = sheet.ListObjects(1)
        Dim vstoListObject As Microsoft.Office.Tools.Excel.ListObject =
            Globals.Factory.GetVstoObject(listObject)
    End If
    
    Microsoft.Office.Interop.Excel.Worksheet sheet =
        Globals.ThisAddIn.Application.ActiveSheet;
    if (sheet.ListObjects.Count > 0)
    {
        Excel.ListObject listObject = 
            sheet.ListObjects[1];
        Microsoft.Office.Tools.Excel.ListObject vstoListObject =
            Globals.Factory.GetVstoObject(listObject);
    }
    

Přidání ovládacích prvků spravovaných dokumentů a listy

Po vytvoření Document nebo Worksheet, můžete přidat ovládací prvky v dokumentu nebo listu, který tyto rozšířené objekty představují.To provedete pomocí Controls vlastnosti Document nebo Worksheet.Další informace naleznete v tématu Přidání ovládacích prvků do dokumentů Office za běhu.

Můžete přidat ovládací prvky model Windows Forms nebo hostitel prvky.Řízení hostitele je ovládací prvek poskytované Visual Studio Tools for Office runtime , obtéká příslušného ovládacího prvku aplikaci Word nebo Excel primární sestavení interop v.Řízení hostitele poskytuje všechny základní nativní objekt Office chování, ale také vyvolává události a mohou být vázány na data pomocí modelu model Windows Forms datové vazby.Další informace naleznete v tématu Přehled hostitelských položek a hostitelských ovládacích prvků.

[!POZNÁMKA]

Nelze přidat XmlMappedRange řízení do listu nebo XMLNode nebo XMLNodes řízení do dokumentu pomocí doplňku.Tyto ovládací prvky hostitele nelze programově přidat.Další informace naleznete v tématu Programová omezení hostitelských položek a hostitelských ovládacích prvků.

Stav a odebráním ovládacích prvků

Při přidání spravované prvky dokumentu nebo listu ovládací prvky nepřetrvají po uložení dokumentu a pak uzavřen.Všechny ovládací prvky hostitele jsou odebrány, aby se zanechat pouze základní nativní objekty sady Office.Například ListObject se změní ListObject.Odebrány také všechny ovládací prvky model Windows Forms, ale jsou zanechat obálky ActiveX pro všechny ovládací prvky v dokumentu.V doplňku vyčistit ovládací prvky nebo prvky znovu při příštím otevření dokumentu musí obsahovat kód.Další informace naleznete v tématu Uchování dynamických ovládacích prvků v dokumentech systému Office.

Přístup k události na úrovni aplikace na dokumentů a sešitů

Některé události dokumentu, sešitu a listu v nativním objektových modelů aplikace Word a Excel jsou aktivována pouze na úrovni aplikace.Například DocumentBeforeSave událost je aktivována při otevření dokumentu v aplikaci Word, ale tato událost je definována v Application třídy, nikoli Document třídy.

Při použití pouze nativní objekty sady Office v doplňku musí zpracovat tyto události na úrovni aplikace a pak napište další kód určit, zda je dokument, který vyvolal událost, který jste přizpůsobili.Položky hostitele poskytují tyto události na úrovni dokumentu, takže je snazší zpracování událostí pro určitý dokument.Můžete vygenerovat položku hostitele a potom zpracovat událost pro tuto položku hostitele.

Příklad, který používá nativní objekty aplikace Word

Následující příklad kódu ukazuje, jak zpracovat událost na úrovni aplikace pro dokumenty aplikace Word.CreateDocument Metoda vytvoří nový dokument a potom definuje DocumentBeforeSave obslužnou rutinu události, který zabraňuje uložení tohoto dokumentu.Toto je událost je aktivována pro úroveň aplikace Application objektu obslužné rutiny události se musí porovnat Doc parametr s document1 objekt zjistit, zda document1 představuje uložený dokument.

Private document1 As Word.Document = Nothing 

Private Sub CreateDocument1()
    document1 = Me.Application.Documents.Add()
End Sub 

Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
    ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) _
    Handles Application.DocumentBeforeSave
    If Type.ReferenceEquals(Doc, document1) Then
        Cancel = True 
    End If 
End Sub
private Word.Document document1 = null;

private void CreateDocument1()
{
    document1 = this.Application.Documents.Add(ref missing,
        ref missing, ref missing, ref missing);
    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
}

private void Application_DocumentBeforeSave(Word.Document Doc, 
    ref bool SaveAsUI, ref bool Cancel)
{
    if (Type.ReferenceEquals(Doc, document1)) 
    {
        Cancel = true;
    }
}

Příklady, které používají položku hostitele

Následující příklady kódu zjednodušit proces zpracování BeforeSave události Document položku hostitele.CreateDocument2 Metoda v těchto příkladech generovat Document , rozšiřuje document2 definuje objekt a pak BeforeSave obslužnou rutinu události, která zabraňuje ukládání dokumentu.Protože této obslužné rutiny události se nazývá pouze při document2 uložena událost zrušit ukládání popisovač akce bez jakékoli další činnost ověřit, který dokument byl uložen.

Následující příklad kódu ukazuje tento úkol.

Private document2 As Word.Document = Nothing 
Private WithEvents vstoDocument As Microsoft.Office.Tools.Word.Document = Nothing 

Private Sub CreateDocument2()
    document2 = Me.Application.Documents.Add()
    vstoDocument = Globals.Factory.GetVstoObject(document2)
End Sub 

Private Sub vstoDocument_BeforeSave(ByVal sender As Object, _
    ByVal e As SaveEventArgs) Handles vstoDocument.BeforeSave
    e.Cancel = True 
End Sub
private Word.Document document2 = null;
private Microsoft.Office.Tools.Word.Document vstoDocument = null;

private void CreateDocument2()
{
    document2 = this.Application.Documents.Add(ref missing,
        ref missing, ref missing, ref missing);
    vstoDocument = Globals.Factory.GetVstoObject(document2);
    vstoDocument.BeforeSave += new SaveEventHandler(vstoDocument_BeforeSave);
}

private void vstoDocument_BeforeSave(object sender, SaveEventArgs e)
{
    e.Cancel = true;
}

Určení, zda byla rozšířena objekt sady Office

Zjistit, zda rozšířený objekt již byla vytvořena pro konkrétní nativní objekt sady Office, použijte HasVstoObject metoda.Tato metoda vrátí true Pokud již byla vytvořena rozšířeného objektu; jinak vrací false.

Použijte metodu Globals.Factory.HasVstoMethod. Předat jako nativní objekt aplikace Word nebo Excel Document nebo Worksheet, který chcete testovat rozšířeného objektu.

HasVstoObject Metoda je užitečná, pokud chcete spustit kód pouze v případě, že zadaný objekt Office má rozšířené objektu.Například pokud jste doplněk aplikace Word, který zpracovává DocumentBeforeSave událost odebrání spravované prvky z dokumentu před jeho uložení, můžete použít HasVstoObject metoda k určení, zda dokument byl rozšířen.Pokud dokument nebyl rozšířen, nesmí obsahovat spravované prvky a proto obslužnou rutinu události lze jednoduše vrátíte bez pokusu o vyčištění ovládací prvky v dokumentu.

Viz také

Koncepty

Přidání ovládacích prvků do dokumentů Office za běhu

Přehled hostitelských položek a hostitelských ovládacích prvků

Další zdroje

Programování doplňků na úrovni aplikace

Ukázky a návody k vývoji pro systém Office