У меня есть несколько сотен шаблонов Word (DOTX) на сайте SharePoint. Многие команды пользователей работают с этими шаблонами.
Когда пользователю необходимо настроить эту документацию, он щелкает специальную ссылку в SharePoint, чтобы создать новый документ (DOCX) из выбранного им шаблона. Этот новый файл документа всегда должен быть «связан» с файлом шаблона в SharePoint. Если документ потеряет эту ссылку, он не будет работать правильно и считается «неработающим».
Когда документы ломаются, мне нужно восстановить связь с нужным шаблоном в SharePoint. Имеет смысл сделать это программно, чтобы я мог передать решение своей команде.
Я хочу присвоить каждому файлу шаблона уникальный идентификатор шаблона (трехзначное число), сохраненный в метаданных или в пользовательском свойстве файла. Когда новые документы генерируются из шаблонов, идентификатор шаблона автоматически переносится в документ, так что это установлено. Теперь мне просто нужно использовать VBA для сканирования файлов шаблонов в библиотеке документов SharePoint на предмет соответствия идентификатору шаблона. Когда это будет найдено, я смогу восстановить связь, и все в порядке.
Я в основном ищу это:
Sub DocFixer()
Dim objTemplate as Template
Dim objBrokenDoc as Document
Set objBrokenDoc = ActiveDocument
For each objTemplate in "\\SharePoint\Template Library\".Templates
If objTemplate.Properties("Template ID").Value = objBrokenDoc.Properties("Template ID").Value Then
objBrokenDoc.AttachedTemplate = objTemplate.Path
Exit For
End If
Next
End Sub
… но у меня возникают проблемы с использованием VBA для чтения содержимого библиотеки документов SharePoint без фактического открытия содержимого, поскольку это занимает слишком много времени при использовании большого количества шаблонов, а также очень разрушительно для пользователя.
Есть идеи? Не могли бы вы указать мне правильное направление?
Редактировать: вот мое решение:
Sub Macro()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim objFile As Object
Dim objDSO As Object
For Each objFile In FSO.GetFolder("\\SharePoint\doc lib\").Files
Set objDSO = CreateObject("DSOFile.OleDocumentProperties")
objDSO.Open objFile.Path
If objDSO.CustomProperties.Item("Template_ID") = ActiveDocument.CustomDocumentProperties("Template_ID").Value Then
ActiveDocument.AttachedTemplate = objFile.Path
End
End If
Next
MsgBox ("No matching template found. Please attach the proper template manually."), vbCritical
End Sub
По-видимому, это касается DSOFile.dll (http://technet.microsoft.com/en-us/library/ee692828.aspx),, но мне не нужно было добавлять ссылку? Все еще запутался в этой части.
Кроме того, это может не работать через https: // (SSL). Работая на меня, хотя, поэтому я думал, что поделюсь.