#excel #vba
#excel #vba
Вопрос:
Некоторое время использовал этот код для загрузки файла в SharePoint и на днях заметил, что при загрузке файла он автоматически извлекается для меня, и мне приходится заходить в SharePoint и вручную регистрироваться, чтобы другие могли просмотреть файл. Есть ли способ изменить или добавить в мой приведенный ниже код автоматическую проверку файла после его загрузки? Полностью в тупике, и любая помощь будет высоко оценена.
Sub SharePointUpload()
Dim WSN
Dim spAdd
Set WSN = CreateObject("WScript.Network")
spAdd = "https://mysharepoint/test"
WSN.mapnetworkdrive "N:", spAdd
ActiveWorkbook.Save
Dim SharepointAddress As String
Dim LocalAddress As String
Dim objNet As Object
Dim FS As Object
' Where you will enter Sharepoint location path
SharepointAddress = "\mysharepointtest"
' Where you will enter the local file path
LocalAddress = "C:datasample_file.xlsm"
Set objNet = CreateObject("WScript.Network")
Set FS = CreateObject("Scripting.FileSystemObject")
If FS.FileExists(LocalAddress) Then
FS.CopyFile LocalAddress, SharepointAddress
Else: MsgBox "File does not exist!"
End If
Set objNet = Nothing
Set FS = Nothing
WSN.removenetworkdrive "N:"
End Sub
Ответ №1:
У меня была такая же проблема с нашей библиотекой документов SharePoint даже при отключенной опции Require Check Out
— некоторые документы (Word, Excel) были загружены как извлеченные автоматически (зеленая стрелка), тогда как другие были фактически возвращены из загрузки. Более того, когда я хотел вручную проверить такие документы, я получил сообщение об ошибке об отсутствии обязательного поля, хотя в библиотеке не было поля, установленного как обязательный.
Причиной в моем случае было поле Title
. Это поле представлено в библиотеке как текстовое поле по умолчанию, а также представлено в файлах Office. Я заметил, что для файлов Office с пустым полем Title
документ автоматически извлекается во время загрузки. Когда загруженный документ содержал некоторый текст в Title
свойстве, проверка не была установлена. Я также пытался использовать workflow для изменения Title
, а затем извлечь файл (после создания), но это не сработало — для запуска рабочего процесса требовалась первоначальная регистрация. Ручное изменение свойств документа работает, но это слишком утомительно…
Первым программным вариантом для решения этой проблемы может быть заполнение Title
свойства загруженного документа, когда оно пустое (т. Е. Добавление имени файла или любого другого текста). Должно хорошо работать со многими языками. Пример с Python:
from docx import Document
path = 'D:/myfile.docx'
document = Document(path)
document_property = document.core_properties
if not document_property.title:
document_property.title = 'Everything is Awesome'
document.save(path)
В VBA Title
должен быть доступен через Wb.BuiltinDocumentProperties("Title")
.
Другим успешным вариантом для меня было найти столбец Title
в столбцах библиотеки документов и переименовать его во что-то другое (я использовал Titlex
в качестве нового имени), затем попытаться загрузить новый документ с пустым заголовком — на этот раз не было автоматической проверки загруженного документа. Тогда я мог бы Titlex
вернуться к Title
, не возвращая проблему.