Вопрос или проблема
Я хотел бы сохранить файл Excel (с использованием макросов) на SharePoint и поместить его в нужное место. Я много искал в интернете, но не смог найти решение, которое меня интересует.
1) Шаг 1: Сохраните документ на SharePoint (это работает):
Dim all variables
SPExcelFile = SPlocation & "/" & Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Split(ThisWorkbook.Name, ".")(0) & ".xlsm"
SPPdfFile = SPlocation & "/" & Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Split(ThisWorkbook.Name, ".")(0) & ".pdf"
ThisWorkbook.SaveAs Filename:=SPExcelFile, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=SPPdfFile
2) Шаг 2: Сохраните документ и установите свойства.
Вот то, что я ищу, я думаю, что мне просто нужно добавить немного кода к Шагу 1, чтобы добавить свойства. Но в данный момент мне нужно вручную изменить следующие свойства: тип содержимого и тип документа для обслуживания.
Кто-нибудь знает, как это сделать в макросе, чтобы это можно было автоматизировать?
Ответ или решение
Чтобы автоматизировать процесс сохранения файла Excel на SharePoint и установку его свойств, включая тип документа, вам необходимо использовать API SharePoint для изменения метаданных файла после его сохранения. Ниже приведено подробное руководство по выполнению этой задачи.
Шаг 1: Сохраните документ на SharePoint
Ваш код для сохранения файла Excel на SharePoint уже корректен и выглядит хорошо. Убедитесь, что все переменные и пути указаны верно. Приведенный вами код для сохранения файла выглядит следующим образом:
Dim all_variables
SPExcelFile = SPlocation & "/" & Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Split(ThisWorkbook.Name, ".")(0) & ".xlsm"
SPPdfFile = SPlocation & "/" & Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Split(ThisWorkbook.Name, ".")(0) & ".pdf"
ThisWorkbook.SaveAs Filename:=SPExcelFile, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=SPPdfFile
Шаг 2: Установите свойства документа
Для автоматизации установки свойств документа в SharePoint, таких как "Content Type" и "Maintenance Document Type", вы можете воспользоваться библиотекой Microsoft XMLHTTP для выполнения REST-запросов к API SharePoint. Это позволит вам обновить метаданные файла после его сохранения. Пример кода:
Sub SetSharePointProperties()
Dim xmlHttp As Object
Dim SharePointSite As String
Dim SPExcelFile As String
Dim RequestUrl As String
Dim jsonRequest As String
' Задайте нужные значения
SharePointSite = "https://example.sharepoint.com/sites/yoursite/"
SPExcelFile = "Documents/" & Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Split(ThisWorkbook.Name, ".")(0) & ".xlsm"
RequestUrl = SharePointSite & "_api/web/GetFileByServerRelativeUrl('/sites/yoursite/" & SPExcelFile & "')/ListItemAllFields"
' Создайте объект для http-запроса
Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
xmlHttp.Open "POST", RequestUrl, False
' Добавьте заголовки
xmlHttp.setRequestHeader "Accept", "application/json;odata=verbose"
xmlHttp.setRequestHeader "Content-Type", "application/json;odata=verbose"
xmlHttp.setRequestHeader "IF-MATCH", "*"
xmlHttp.setRequestHeader "X-HTTP-Method", "MERGE"
' Создайте JSON-объект для обновления метаданных
jsonRequest = "{ '__metadata': { 'type': 'SP.Data.DocumentsItem' }, 'ContentTypeId': '0x0101', 'MaintenanceDocumentType': 'YourValueHere' }"
' Отправьте запрос
xmlHttp.send jsonRequest
If xmlHttp.Status = 204 Then
MsgBox "Свойства успешно обновлены!"
Else
MsgBox "Ошибка при обновлении свойств: " & xmlHttp.Status & " " & xmlHttp.statusText
End If
End Sub
Объяснение кода
-
Свойства объектов и JSON: Запрос формируется с использованием
MSXML2.XMLHTTP
, который позволяет отправлять HTTP-запросы. Обратите внимание на формат JSON, который указывает на метаданные файла и новые значения, которые вы хотите установить. -
Настройка заголовков: Заголовки, как
Accept
,Content-Type
,IF-MATCH
иX-HTTP-Method
, необходимы для успешного выполнения REST-запроса к SharePoint. -
Обработка ответа: После отправки запроса проверяется статус. Если статус равен 204, это означает, что запрос прошел успешно, и свойства документа обновлены.
Заключение
С помощью приведенных выше шагов вы сможете автоматизировать процесс сохранения файла на SharePoint и установку нужных метаданных. Убедитесь, что у вас есть необходимые права доступа в SharePoint для выполнения всех этих действий.
Не забудьте протестировать ваш макрос в безопасной среде, прежде чем использовать его в производственной среде.