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:
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
[...]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 304701
Url: https://administrator.de/contentid/304701
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
10 Kommentare
Neuester Kommentar
Poste doch mal den gesamten XML-Inhalt so eines Dokuments, dann kann man den XPATH hier zusammenbauen.
Sollte sich mit
im Code als String in den MakroEditor-Direktbereich ausgeben lassen.
Gruß skybird
Sollte sich mit
debug.print myXMLPart.OuterXML
Gruß skybird
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 ...
'......
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
'....
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 ...
Wenn in den Entwurfs-Modus schaltest siehst du den XML Tag um das Dropdown... Damit kannst du dann den gewünschten Wert wie oben geschrieben auslesen.