schwazza
Goto Top

SharePoint, Word, Excel. Auslesen mittels VBA und XML

Hallo zusammen,

ich lese zurzeit in Excel mittels VBA ein Word-Dokument aus, das auf dem SharePoint liegt.

Im Word-Dokument sind Steuerelemente, die - wie hier beschrieben - ausgelesen werden.
Problematisch wird es nun, wenn die Felder direkt mit dem SharePoint verknüpft sind, also auch vom SharePoint aus bearbeitet werden können.
Die meisten Felder wurden direkt im Word-Dokument über die Entwicklertools angelegt, können nur direkt mittels Word bearbeitet werden und stellen kein Problem dar.

Beispiel:
Es sind ein paar Felder als "Schnellbaustein"-> "Dokumenteigenschaft" eingefügt worden. Hinter diesen Schnellbausteinen steckt z. B. eine Drop-Down-Liste, die auf dem SharePoint angelegt wurde.

Bisher greife ich problemlos über XML auf den Inhalt der Felder zu und lass mir den Inhalt in Excel ausgeben. Bei diesen Feldern, die direkt mit dem SharePoint verknüpft sind, funktioniert dies aber nicht. Ich benutze zur Verknüpfung der Felder das Word 2007 Content Control Toolkit. Aufgefallen ist mir, dass bei den Feldern, die durch Schnellbausteine entstanden sind ein "Prefix Mappings" existiert, das bei den anderen Feldern nicht vorhanden ist. Der XPath ist natürlich ebenfalls anders.

Leider weiß ich im Moment nicht wirklich weiter und bin für jede Hilfe dankbar.

Ich hoffe ich konnte das Problem einigermaßen verständlich beschreiben.

Gruß
schwazza


Auslesemethode:

[...]
'Für jede Datei die gefunden wurde ..  
            For Each File In .FoundFiles
                'Öffne die Datei  
                Set Doc = objWord.Documents.Open(File)
                'Suche das CustomXML im Dokument  
                For Each cXML In Doc.CustomXMLParts
                    If cXML.BuiltIn = False Then
                        Set rootNode = cXML.SelectSingleNode("root")  
                        If Not rootNode Is Nothing Then
                            Set myXMLPart = cXML
                            Exit For
                        End If
                    End If
                Next

                'Wenn der CustomXML-Part gefunden wurde ...  
                If Not myXMLPart Is Nothing Then

                    '1st Part - CODE  
                    'Formularfelder zu Variablen zuordnen  
                    
                    strDatum = myXMLPart.SelectSingleNode("/root/Datum").Text  
                    Lo.ListRows(Lo.ListRows.Count).Range(1, 1) = strDatum
                End If
                'Dokument schließen  
                Doc.Close False
            Next

        'Word schließen  
        objWord.DisplayAlerts = False
        objWord.Quit
        Set objWord = Nothing
[...]

Content-ID: 304701

Url: https://administrator.de/contentid/304701

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

schwazza
schwazza 25.05.2016 um 10:32:12 Uhr
Goto Top
Hallo,

ich versuche mein Problem mal etwas kürzer zu beschreiben:
Ich bin auf der Suche nach einer Methode, die Felder, die in einem Word-Dokument (liegt auf dem SharePoint) sind mittels VBA auslesen kann.
Die problematischen Felder sind die, denen auf dem SharePoint eine Liste zugeordnet wurden, z.B. für eine Drop-Down-Auswahl. Die Felder werden mittels XML im VBA-Code zugewiesen und sollen in Excel ausgewertet werden.

Evtl. wird mein Problem nun etwas verständlicher und ich hoffe auf eine Antwort.


Gruß
schwazza
129413
129413 25.05.2016 aktualisiert um 18:45:21 Uhr
Goto Top
Poste doch mal den gesamten XML-Inhalt so eines Dokuments, dann kann man den XPATH hier zusammenbauen.

Sollte sich mit
debug.print myXMLPart.OuterXML 
im Code als String in den MakroEditor-Direktbereich ausgeben lassen.

Gruß skybird
schwazza
schwazza 03.06.2016 um 09:47:09 Uhr
Goto Top
Vielen Dank für deine Antwort. Ich hatte diese Woche leider wenig Zeit, daher erst jetzt mein Kommentar.

Da sehr viele Felder in dem Word-Dokument sind, habe ich mir durch das Word 2007 Content Control Toolkit den Inhalt ausgeben lassen und einige Felder entfernt. Ich hoffe es reicht trotzdem.

Im Folgenden sind ein paar Felder, die ich selbst direkt in Word angelegt habe und keine Probleme beim Auslesen machen:

<?xml version="1.0"?> 

-<root>

  <Date1/>
  <Name1/>
  <Rev2/>

</root>

Nun die Felder, die z. B. auf eine Liste, die im SharePoint angelegt wurde, zurückgreifen:

<?xml version="1.0" encoding="UTF-8"?> 

-<p:properties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://schemas.microsoft.com/office/2006/metadata/properties"> 

  -<documentManagement>
    <PM_x0020_responsible xmlns="3a9fa6eb-67d4-4345-b293-8463501cd732">false</PM_x0020_responsible> 
    <Country0 xmlns="3a9fa6eb-67d4-4345-b293-8463501cd732">27</Country0> 
    <Active_x002f_Archive xmlns="3a9fa6eb-67d4-4345-b293-8463501cd732">Archive</Active_x002f_Archive> 
    <Project_x0020_name_x0020__x002f__x0020_PSP xmlns="3a9fa6eb-67d4-4345-b293-8463501cd732">Test_ExcelTool</Project_x0020_name_x0020__x002f__x0020_PSP> 
  </documentManagement>

</p:properties>

Sobald es mit einem Feld klappt, solltees mit den anderen ja kein Problem mehr sein, daher würde ich mich z. B. gerne auf das Feld "Project_name" konzentrieren:
So sieht das Feld in Word aus:
project_name

Es steht also der richtige Name "Test_ExcelTool" bereits in der XML-Struktur. Ich kann nur leider nicht auf das Feld zugreifen.

Hier die Ansicht, des Feldes im Content Control Toolkit:
project_name_toolkit

Ich hoffe das hilft bei der Lösungssuche.

Gruß
schwazza
129413
129413 03.06.2016 aktualisiert um 12:24:20 Uhr
Goto Top
Kannst du das Dokument mal zum Download bereitstellen (anonymisiert)? Den dir das hier alles zu erklären bis ich die benötigten Infos habe würde ewig dauern, so viel Zeit habe ich nicht ...
schwazza
schwazza 04.06.2016 um 13:26:52 Uhr
Goto Top
Ich konnte hier keine Upload-Möglichkeit sehen, daher liegt die Datei nun hier:
http://www3.zippyshare.com/v/DpooSnxB/file.html

Ich habe die Datei stark gekürzt und anonymisiert.

Das angesprochene Feld "Project name" ist auch dabei und bei "Region" erkennt man, dass die DropDown-Liste noch vorhanden ist, da das Feld direkt in Word angelegt wurde. Bei "Country" hingegen wird die Auswahl zwar noch angezeigt, aber ich kann das Feld nicht auslesen und auch die Liste ist verschwunden, da sie auf dem SharePoint liegt.

Ich hoffe das hilft weiter.
129413
Lösung 129413 04.06.2016 um 14:42:32 Uhr
Goto Top
'......  
    For Each cXML In doc.CustomXMLParts
        If Not cXML.SelectSingleNode("//documentManagement") Is Nothing Then  
            Set nodeProjectName = cXML.SelectSingleNode("//ns2:Project_x0020_name_x0020__x002f__x0020_PSP")  
            If Not nodeProjectName Is Nothing Then
                MsgBox nodeProjectName.Text
            End If
        End If
        If cXML.BuiltIn = False Then
            Set rootNode = cXML.SelectSingleNode("root")  
            If Not rootNode Is Nothing Then
                Set myXMLPart = cXML
                strDatum = myXMLPart.SelectSingleNode("/root/Datum").Text  
                Lo.ListRows(Lo.ListRows.Count).Range(1, 1) = strDatum
            End If
        End If
    Next
'....  
schwazza
schwazza 09.06.2016 um 13:48:27 Uhr
Goto Top
Super. Vielen, vielen Dank. Es wird nun (fast) genau das gemacht, was ich möchte.

Das einzige Problem ist nun eine Dropdown-Liste, bei der auf diesem Weg leider der Wert ausgelesen wird. Gibt es eine Möglichkeit, stattdessen den "Anzeigenamen" zu erfassen?

Da ich leider nicht auf den SharePoint zugreifen kann, kann ich die Auswahl leider nicht anpassen. Der einfachste Weg ware wahrscheinlich Wert = Anzeigename.

Meine Idee war ".Text" durch ".Value" zu ersetzen, aber das klappte leider nicht.

Gruß
schwazza
129413
129413 09.06.2016 aktualisiert um 15:39:09 Uhr
Goto Top
Das einzige Problem ist nun eine Dropdown-Liste, bei der auf diesem Weg leider der Wert ausgelesen wird
????????? Du sprichst in Rätseln.

Schau in die XML Parts dann bist du schlauer ...
schwazza
schwazza 09.06.2016 um 17:00:06 Uhr
Goto Top
Ich sehe ein, ich habe mich da etwas unglücklich ausgedrückt.
Es ging mir um das Auslesen des folgenden "Anzeigenamens" anstelle des "Wertes":

country

Im XML Part sehe ich auch nur, wie der "Wert" übergeben wird und nirgends den Anzeigenamen.

Ich habe das Problem nun mittels SVERWEIS gelöst. Eine Lösung mittels VBA ware sicherlich schöner, aber es funktioniert nun alles so wie es soll, daher nochmals vielen Dank face-smile
129413
129413 09.06.2016 aktualisiert um 17:03:39 Uhr
Goto Top
Wenn in den Entwurfs-Modus schaltest siehst du den XML Tag um das Dropdown... face-wink Damit kannst du dann den gewünschten Wert wie oben geschrieben auslesen.