Erhalte ein CheckBox in Word mit OpenXML

8

Wie erhält man ein Handle für ein CheckBox-Steuerelement, das mit OpenXML in ein Word-Dokument eingebettet ist?

Sie würden denken, dass entweder Paragraph.ControlPropertiesPart oder Paragraph.Descendents () etwas erreichen würde, aber in jedem einzelnen Fall bekomme ich einen Null-Typ zurück.

Ich kann den Dokumentbaum mit der tatsächlichen XML-Struktur durchziehen, aber das scheint umständlich.

Vorschläge willkommen.

    
Phil.Wheeler 01.12.2011, 03:55
quelle

1 Antwort

10

Der folgende Code zeigt, wie Sie alle Kontrollkästchen in einem Word-Dokument auflisten Verwenden Sie die Decendants<CheckBox>() -Methode für den Dokumententext.

%Vor%

Um den Namen eines gegebenen Checkbox-Eingabeelements zu bestimmen, müssen Sie auf den Parent -Eigenschaft der Instanz CheckBox und dann nach dem Element FormFieldName suchen (um einem Kontrollkästchen einen Namen zuzuweisen, verwenden Sie den Eigenschaften-Dialog in Microsoft Word).

Die Eigenschaft DefaultCheckBoxFormFieldState Val enthält den Standardstatus für das Kontrollkästchen. Außerdem enthält die Eigenschaft Val des Elements Checked den tatsächlich überprüften Zustand der Instanz CheckBox . Beachten Sie, dass die Val-Eigenschaft für Microsoft Word 2007 null if lautet Das Kontrollkästchen ist aktiviert.

BEGIN EDIT

Ich möchte meine Antwort erweitern. Tatsächlich gibt es auf der MS Word-Entwickler-Registerkarte zwei Arten von Kontrollkästchen-Steuerelementen - ein Legacy-Kontrollkästchen und ein Kontrollkästchen für ein ActiveX-Steuerelement. Der oben gezeigte Code kann verwendet werden, um Legacy-Checkboxen in einem Word-Dokument aufzuzählen (siehe Artikel zum Erstellen eines Legacy-Kontrollkästchens).

Soweit ich weiß, können Sie das Open XML SDK nicht verwenden, um Werte für ein ActiveX-Kontrollkästchen abzurufen / festzulegen. Sie können jedoch ActiveX-Steuerelemente mit dem folgenden Code aufzählen:

%Vor%

Um festzustellen, ob ein gegebenes Control ein Kontrollkästchen ist, müssen Sie die Klassen-ID des Control überprüfen. Die Klassen-ID eines Kontrollkästchens lautet {8BD21D40-EC42-11CE-9E0D-00AA006002F3} . Hier ist ein Codebeispiel, um die Klassen-ID zu erhalten (ich weiß nicht, ob es einen einfacheren Weg gibt ...):

%Vor%

ENDE BEARBEITEN

BEARBEITEN 2

Ich habe nicht bemerkt, dass es in Word 2010 ein neues Kontrollkästchen gibt (Danke an Dennis  Palmer).

Um diese neuen Kontrollkästchen zu nummerieren, können Sie den folgenden Code verwenden:

%Vor%

END EDIT 2

Hoffe, das hilft.

    
Hans 04.12.2011, 13:47
quelle