Rozszerzanie dokumentów programu Word i skoroszytów w programie Excel w czasie wykonywania w dodatkach na poziomie aplikacji
Dodatek poziomie aplikacji służy do dostosowywania dokumentów programu Word oraz skoroszyty programu Excel w następujący sposób:
Dodać formanty zarządzane, otwórz dokument lub arkusz.
Konwersja istniejącego obiektu listy w arkuszu programu Excel do rozszerzonej ListObject opisuje zdarzenia i mogą być powiązane z danych przy użyciu modelu wiązania danych Windows Forms.
Zdarzenia aplikacji poziom dostępu, które są udostępniane przez program Word i Excel dla określonych dokumentów, skoroszytów i arkuszy.
Aby użyć tej funkcji, generowania obiektu w czasie wykonywania, który rozszerza dokumentu lub skoroszytu.
Stosuje się do: informacje w tym temacie dotyczą projektów z poziomu aplikacji dla następujących aplikacji: Excel 2010 r.; Program Word 2010.Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacjach pakietu Office i typ projektu.
Rozszerzone obiektów wystąpień typów przewidziane przez Visual Studio Tools dla pakietu Office runtime Dodawanie funkcji do obiektów, które natywnie istnieje w modelach obiektu programu Word lub Excel (nazywany obiekty rodzime Office).Aby wygenerować rozszerzone obiektu dla obiektu programu Word lub Excel, GetVstoObject metody.Przy pierwszym wywołaniu GetVstoObject obiektu metody dla określonego programu Word lub Excel zwraca nowy obiekt, który rozszerza określonego obiektu. Obiekt przy każdym wywołaniu metody i określić takie same programu Word lub Excel, zwraca ten sam obiekt rozszerzone.
Typ obiektu rozszerzone ma taką samą nazwę, typ obiektu macierzystego pakietu Office, ale typ jest zdefiniowany w Microsoft.Office.Tools.Excel lub Microsoft.Office.Tools.Word obszaru nazw.Na przykład, jeśli GetVstoObject metody rozszerzenie Document obiektu, metoda zwraca Document obiektu.
GetVstoObject Metody są przeznaczone do wykorzystania przede wszystkim w przypadku projektów na poziomie aplikacji.Metody te można stosować również w projektach na poziomie dokumentu, ale zachowują się inaczej i mieć mniejszą liczbę zastosowań.
Aby ustalić, czy rozszerzone obiekt został już wygenerowany dla danego obiektu macierzystego pakietu Office, użyj HasVstoObject metody.Aby uzyskać więcej informacji, zobacz Określenia czy Office obiekt został rozszerzony.
Podczas używania GetVstoObject rozszerzenie obiektu na poziomie dokumentu (czyli Workbook, Worksheet, lub Document), zwracany obiekt jest nazywany hosta elementu.Element hosta jest typ, który może zawierać inne obiekty, łącznie z innych obiektów rozszerzone i formantów.Przypomina on odpowiedniego typu w programie Word lub Excel podstawowego zestawu międzyoperacyjnego, ale ma dodatkowe funkcje.Więcej informacji o elementach hosta, zobacz Przegląd obiektów hosta i formantów hosta.
Po wygenerowaniu element hosta można go dodać zarządzane formanty do dokumentu, skoroszytu lub arkusza.Aby uzyskać więcej informacji, zobacz Dodawanie formantów zarządzanych do dokumentów i arkuszy.
Poniższy kod demonstruje, jak wygenerować element hosta dla aktywnego 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); }
Poniższy kod demonstruje, jak wygenerować element hosta dla aktywnego skoroszytu.
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); }
Poniższy kod demonstruje, jak wygenerować element hosta dla aktywnego arkusza 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); }
Kiedy używać GetVstoObject metody rozszerzenie ListObject, metoda zwraca ListObject.ListObject Ma wszystkie funkcje oryginalnego ListObject, ale również dodatkowe funkcje, takie jak możliwość powiązać dane przy użyciu modelu wiązania danych Windows Forms.Aby uzyskać więcej informacji, zobacz ListObject — Formant.
Poniższy kod demonstruje, jak wygenerować ListObject w pierwszym ListObject w aktywnym arkuszu w projekcie.
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); }
Po wygenerowaniu Document lub Worksheet, można dodać formanty do dokumentu lub arkusza, które są rozszerzone obiekty reprezentują.Aby to zrobić, użyj Controls właściwość Document lub Worksheet.Aby uzyskać więcej informacji, zobacz Dodawanie formantów do dokumentów pakietu Office w czasie wykonywania.
Można dodać formanty Windows Forms lub hosta formanty.Host jest sterowany dostarczonych przez Visual Studio Tools for Office Runtime który otacza odpowiedniego formantu w programie Word lub Excel podstawowego zestawu międzyoperacyjnego.Kontroli host udostępnia wszystkie zachowanie obiektu źródłowego pakietu Office macierzystych, ale również wywołuje zdarzenia i mogą być powiązane z danych przy użyciu modelu wiązania danych Windows Forms.Aby uzyskać więcej informacji, zobacz Przegląd obiektów hosta i formantów hosta.
[!UWAGA]
Nie można dodać XmlMappedRange formantu w arkuszu lub XMLNode lub XMLNodes formantu do dokumentu za pomocą.Te formanty hosta nie można dodać programistycznie.Aby uzyskać więcej informacji, zobacz Ograniczenia programowe elementów hosta i formantów hosta.
Po dodaniu formantów zarządzanych do dokumentu lub arkusza formanty nie są zachowywane, gdy dokument jest zapisywany, a następnie zamknięte.Wszystkie formanty hosta są usuwane, dzięki czemu tylko podstawowej macierzystych obiektów Office są pozostawione.Na przykład ListObject staje się ListObject.Usuwane są również wszystkie formanty Windows Forms, ale ActiveX otoki dla formantów są pozostawione w dokumencie.Kod musi zawierać w dodatku oczyścić formanty lub odtworzyć formantów przy następnym otwarciu dokumentu.Aby uzyskać więcej informacji, zobacz Przechowywanie formantów dynamicznych w dokumentach pakietu Office.
Niektóre zdarzenia dokumentu, skoroszytu i arkusza w macierzystym modeli obiektów programu Word i Excel są wywoływane tylko na poziomie aplikacji.Na przykład DocumentBeforeSave zdarzenie jest wywoływane, gdy dokument jest otwarty w programie Word, ale to zdarzenie jest zdefiniowany w Application klasy, a nie Document klasy.
Użycie obiektów Office tylko macierzystym w dodatku, musi obsługiwać te zdarzenia na poziomie aplikacji, a następnie wpisz dodatkowy kod, aby określić, czy dokument, który zdarzenie jest dostosowany.Elementy hosta dostarczyć te zdarzenia na poziomie dokumentu, dzięki czemu łatwiej obsługiwać zdarzenia dla określonego dokumentu.Można wygenerować element hosta i następnie obsługi zdarzeń dla tego elementu hosta.
Poniższy kod demonstruje, jak obsługiwać zdarzenie na poziomie aplikacji dla dokumentów programu Word.CreateDocument Metoda tworzy nowy dokument, a następnie definiuje DocumentBeforeSave obsługi zdarzeń, który uniemożliwia zapisanie tego dokumentu.Ponieważ jest to zdarzenie jest wywoływane na poziomie aplikacji Application obiektu, należy porównać obsługi zdarzeń Doc parametru z document1 obiekt, aby ustalić, czy document1 reprezentuje zapisany 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;
}
}
Następujące przykłady kodu uprościć ten proces obsługa BeforeSave zdarzenia Document element hosta.CreateDocument2 Metody w tych przykładach generowania Document , rozszerza document2 definiuje obiekt, a następnie BeforeSave obsługi zdarzeń, który uniemożliwia zapisanie dokumentu.Ponieważ ta obsługa zdarzeń jest wywoływana tylko wtedy, gdy document2 jest zapisywane zdarzenie obsługi można anulować zapisywanie akcji nie robiąc wszelkich dodatkowej pracy, aby sprawdzić, który dokument został zapisany.
Poniższy przykład kodu pokazuje tego zadania.
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;
}
Aby ustalić, czy rozszerzone obiekt został już wygenerowany dla danego obiektu macierzystego pakietu Office, użyj HasVstoObject metody.Ta metoda zwraca true , jeśli już został wygenerowany rozszerzone obiektu; w przeciwnym razie zwraca false.
Użyj metody Globals.Factory.HasVstoMethod.Przekazać w macierzystym obiektu programu Word lub Excel, takie jak Document lub Worksheet, który chcesz przetestować rozszerzone obiektu.
HasVstoObject Metoda jest użyteczna, gdy chcesz uruchomić kod tylko wtedy, gdy określony obiekt Office rozszerzone obiektu.Na przykład, jeśli masz dodatku programu Word, który obsługuje DocumentBeforeSave jest zapisywane zdarzenie, aby usunąć z dokumentu przed nim formanty zarządzane, można użyć HasVstoObject metody, aby ustalić, czy dokument został rozszerzony.Jeśli dokument nie został rozszerzony, nie może zawierać formanty zarządzane i dlatego obsługi zdarzeń można po prostu zwraca bez próby oczyścić formantów w dokumencie.
Dodawanie formantów do dokumentów pakietu Office w czasie wykonywania
Przegląd obiektów hosta i formantów hosta