跟踪 SharePoint 链接的 Excel 模板中的用户活动
想象一下一个繁忙的办公室,其中多个用户访问同一个 SharePoint 模板来提交表单。 🖥️ 当审核员需要确定谁填写并提交了特定表格时,就会出现挑战。虽然 SharePoint 将此信息记录在“创建者”列下,但仍无法满足在 Excel 工作表页脚中打印包含用户姓名的硬拷贝的需求。
此任务变得更加棘手,因为默认的 VBA 函数如下 应用程序.用户名 和 环境(“用户名”) 通常指向原始模板创建者或本地计算机用户,而不是编辑表单的实际用户。因此,找到一种可靠的方法来动态插入正确的用户名变得至关重要。
在现实场景中,这种差异可能会导致审核和跟踪不准确。例如,在我之前的角色中,我们遇到了一个问题,外部承包商填写的表格总是在打印输出中显示管理员的用户名,这在审核期间造成了严重的混乱。
本文深入探讨了如何使用 VBA、SharePoint 集成和一些智能调整来绕过这些障碍。最后,您将获得一个实用的解决方案,确保每个打印的表单正确反映提交该表单的个人用户。让我们深入了解一下! 🔍
命令 | 使用示例 |
---|---|
ActiveSheet.PageSetup.LeftFooter | 用于自定义 Excel 中活动工作表的页脚。在这种情况下,它会动态地将用户名和日期插入页脚中。 |
ListObjects.Add | 在工作表和外部数据源(例如 SharePoint 文档库)之间创建连接,以获取“创建者”字段等元数据。 |
CreateObject("MSXML2.XMLHTTP") | 初始化用于进行 API 调用的 HTTP 请求对象。在本例中,它从 SharePoint REST API 检索元数据。 |
InStr | 查找字符串中子字符串的位置。此处,它用于定位来自 SharePoint API 的 JSON 响应中的“创建者”字段。 |
Mid | 根据起始位置和长度从字符串中提取子字符串。用于解析 SharePoint API 的 JSON 响应中的用户名。 |
BuiltinDocumentProperties | 访问 Excel 工作簿的元数据属性(例如“Creator”属性)以动态识别保存文档的用户。 |
Range("A1") | 指定用于放置从外部源检索的数据(例如 SharePoint 元数据)的起始单元格。 |
On Error Resume Next | 即使发生错误,也允许代码继续执行,此处用于防止元数据获取期间崩溃。 |
responseText | 从 API 调用中提取 HTTP 响应的正文。在本例中,它保存 SharePoint REST API 返回的 JSON 数据。 |
ParseJSONForCreator | 用于从 JSON 响应字符串中提取“creator”字段值的自定义函数。 |
使用动态 SharePoint 用户名自定义 Excel 页脚
提出的解决方案旨在动态获取并显示 SharePoint“创造者” Excel 工作表页脚中的用户名。当多个用户基于 SharePoint 中存储的共享模板提交表单并且审核员需要明确的归属时,就会出现此要求。第一个脚本利用 Excel 的本机 页面设置 动态自定义页脚的功能。通过将 VBA 方法与 SharePoint 元数据访问相结合,此脚本可确保页脚反映填写表单的用户的用户名,而不是原始创建者的用户名。
例如,第一个解决方案利用 列表对象.添加 建立与 SharePoint 文档库的实时连接。此命令将元数据提取到工作簿中,从而可以迭代行并提取“创建者”字段。想象一下一个部门提交合规表格——每份提交的页脚都会清楚地识别负责的员工,从而消除审计歧义。此方法可确保灵活性并防止在识别表单贡献者时进行人工干预。 🚀
第二种方法利用 SharePoint 的 REST API。通过使用 CreateObject("MSXML2.XMLHTTP") 命令后,脚本发起HTTP请求,直接获取元数据。此方法在 SharePoint 库复杂或包含大量字段的环境中特别有用。使用类似函数解析 JSON 响应 内斯特 和 中 允许精确提取“创建者”字段。在我过去的角色中,类似的脚本简化了表单跟踪,每月节省了数小时的手动核对时间。 🖋️
最终脚本集成了 Office 365 属性,利用 内置文档属性 命令直接访问工作簿的元数据。此脚本最适合广泛使用 Office 365 并需要没有 REST API 复杂性的轻量级解决方案的组织。每个脚本都具有模块化功能,使其可重用于其他 SharePoint 集成工作流。例如,您可以调整它们以包含提交时间戳甚至部门名称,从而进一步增强其审计实用性。
解决方案 1:通过 SharePoint 元数据提取用户名
使用 VBA 从 SharePoint 元数据动态获取“创建者”字段并将其添加到 Excel 页脚。
Sub AddUsernameFromSharePoint()
Dim ws As Worksheet
Dim sharePointUsername As String
Dim listObj As Object
Dim spURL As String
Dim row As Object
On Error Resume Next
' Set your SharePoint site and library path here
spURL = "https://your-sharepoint-site/documents/"
Set ws = ActiveSheet
' Access metadata of the current workbook in SharePoint
Set listObj = ws.ListObjects.Add(
SourceType:=xlSrcExternal,
Source:=spURL,
Destination:=Range("A1")
)
' Loop through rows to find "creator"
For Each row In listObj.ListRows
If row.Range(1, 1).Value = "creator" Then
sharePointUsername = row.Range(1, 2).Value
Exit For
End If
Next row
' Update footer with username
ws.PageSetup.LeftFooter = "SUBMITTED BY: " & sharePointUsername & " on " & Date
On Error GoTo 0
End Sub
解决方案 2:使用 SharePoint REST API 获取用户名
将 Excel VBA 与 SharePoint 的 REST API 集成,以从“创建者”字段检索用户名。
Sub FetchUsernameWithAPI()
Dim http As Object
Dim jsonResponse As String
Dim username As String
Dim ws As Worksheet
Set http = CreateObject("MSXML2.XMLHTTP")
Set ws = ActiveSheet
' API endpoint to fetch metadata
apiURL = "https://your-sharepoint-site/_api/web/lists/getbytitle('Documents')/items"
' Make GET request
http.Open "GET", apiURL, False
http.setRequestHeader "Accept", "application/json;odata=verbose"
http.Send
' Parse response for "creator" field
jsonResponse = http.responseText
username = ParseJSONForCreator(jsonResponse)
' Add username to footer
ws.PageSetup.LeftFooter = "SUBMITTED BY: " & username & " on " & Date
End Sub
Function ParseJSONForCreator(jsonResponse As String) As String
' Basic parsing logic to extract "creator" value
Dim pos As Integer
Dim creatorValue As String
pos = InStr(jsonResponse, """creator"":")
creatorValue = Mid(jsonResponse, pos + 10, InStr(pos + 10, jsonResponse, ",") - pos - 10)
ParseJSONForCreator = creatorValue
End Function
解决方案 3:通过 VBA 集成利用 Office 365 在线功能
将 Excel 的 VBA 功能与 Office 365 在线功能相结合,实现无缝 SharePoint 集成。
Sub AddFooterFromO365()
Dim ws As Worksheet
Dim o365User As String
Set ws = ActiveSheet
' Assume user is logged in to Office 365
o365User = Application.UserName
' Fetch creator data from workbook properties
If ActiveWorkbook.BuiltinDocumentProperties("Creator") <> "" Then
o365User = ActiveWorkbook.BuiltinDocumentProperties("Creator")
End If
' Add to footer
ws.PageSetup.LeftFooter = "SUBMITTED BY: " & o365User & " on " & Date
End Sub
将 SharePoint 数据与 Excel VBA 集成以增强审核
将 Excel 与 SharePoint 集成时经常被忽视的一个方面是两个平台之间元数据的无缝流动。使用 VBA,您可以超越基本自动化来提取关键的元数据字段,例如 用户名 个人完成模板的信息,并在自定义 Excel 页脚或页眉中使用它们。此功能在合规性等场景中至关重要,其中每个提交的表单都需要明确归属于负责其完成的人员。
另一种有用的方法涉及利用 SharePoint 广泛的元数据功能。例如,“修改者”或“上次修改”等列可以提供用于跟踪和验证的附加上下文。通过 VBA 动态提取这些数据,您的 Excel 模板不仅可以反映准确的用户信息,还可以减少手动输入错误的可能性。此功能在多个用户在共享模板上进行协作的团队项目中特别有价值。 🖇️
最后,重要的是要考虑组织使用 SharePoint 的方式的潜在变化。有些可能有自定义列或元数据字段,需要适应性强的 VBA 脚本。模块化编码实践(例如将 API 调用与数据格式化分开)可确保您的解决方案可以扩展或调整以适应此类变化。例如,在过去的项目中,我们使用此方法自动生成摘要报告,将用户活动直接从 SharePoint 聚合到 Excel 工作簿中。 🚀
有关 SharePoint 和 VBA 集成的常见问题
- 如何使用 VBA 在 Excel 中动态获取用户名?
- 通过使用 CreateObject("MSXML2.XMLHTTP"),您可以调用 SharePoint REST API 并解析 "creator" 元数据字段。
- 为什么会 Application.UserName 返回原始创建者的名字?
- 此命令检索与本地 Excel 安装关联的用户名,该用户名可能与访问 SharePoint 模板的用户不对应。
- 在 VBA 中解析 JSON 响应的最佳方法是什么?
- 使用组合 InStr 和 Mid,您可以从 JSON 响应中提取特定的数据字段,例如“创建者”。
- 我可以在 Excel 页脚中包含其他 SharePoint 字段(例如“上次修改时间”)吗?
- 是的,您可以扩展脚本以使用 SharePoint 的 API 获取多个元数据字段,并将它们格式化以包含在 Excel 中 PageSetup。
- 是否可以针对多个模板自动执行此过程?
- 绝对地。您可以设计一个脚本,循环访问 SharePoint 中存储的多个模板,并使用特定于用户的数据更新每个模板的页脚。
关于动态页脚定制的最终想法
确保完成 SharePoint 模板的人员的用户名准确显示在 Excel 页脚中,从而提高责任性和可追溯性。利用 VBA 脚本的解决方案提供了可定制和可扩展的方法来满足这一需求。
通过集成高级元数据检索方法(例如 API)或使用内置文档属性,组织可以有效地自动化工作流程。这不仅节省了时间,还确保了精确的审核,这对于合规性较高的行业至关重要。 🚀
VBA 和 SharePoint 集成的参考和资源
- 详细阐述如何使用VBA动态操作Excel页脚: 微软VBA文档
- 解释 SharePoint 用于元数据检索的 REST API 功能: Microsoft SharePoint REST API 指南
- 提供有关 SharePoint 工作流和模板管理的见解: ShareGate - SharePoint 元数据最佳实践
- 讨论 VBA 中的 JSON 解析以实现高级 API 响应: Excel Macro Pro - JSON 解析