目录
- [一. 自动安装Excel自定义标签页](#一. 自动安装Excel自定义标签页)
- [二. 开启Excel的宏功能](#二. 开启Excel的宏功能)
一. 自动安装Excel自定义标签页
.xlam文件和powershell脚本文件需要在同一个目录下- 思路:
- 将
.xlam文件复制到Excel的AddIns目录中 - 通过com创建一个Excel对象,然后创建一个工作簿
- 然后通过该Excel对象添加对应的
.xlam文件
- 将
powershell
# 要安装的插件名称
$addInFileName = "09-MyTool.xlam"
# 插件所在的路径
$sourceAddin = Join-Path $PSScriptRoot $addInFileName
# 创建Excel的COM对象
$excel = New-Object -ComObject Excel.Application
# 非表示
$excel.Visible = $false
# 方式1: 获取Excel的插件目录
# $addInFolderPath = "$env:APPDATA\Microsoft\AddIns\"
# 方式2: 获取Excel的插件目录
$addInFolderPath = $excel.UserLibraryPath
$targetAddinFilePath = Join-Path $addInFolderPath $addInFileName
# 如果Excel插件目录中没有指定的插件的话
if (-not (Test-Path "$targetAddinFilePath")) {
# 复制当前脚本目录下的插件到Excel插件目录中
Copy-Item $sourceAddin $targetAddinFilePath -Force
}
try {
# 创建一个空工作簿
$excel.Workbooks.Add() | Out-Null
# 遍历所有的插件对象, 注册前, 查看自定义的插件对象是否存在
$addin = $excel.AddIns | Where-Object {
$_.Name -eq $addInFileName
} | Select-Object -First 1
# 已安装判断
if ($addin.Installed) {
throw [System.Exception]::new("插件已安装,无需重复安装...")
}
# 添加插件到Excel中
$addin = $excel.AddIns.Add($targetAddinFilePath, $true)
if (-not $addin) {
throw [System.Exception]::new("插件注册失败...")
}
# 启用插件
$addin.Installed = $true
Write-Host "插件安装成功..."
} catch {
Write-Host $_
} finally {
# 退出打开的Excel
$excel.Quit()
# 释放Excel的COM对象
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
}
Pause
二. 开启Excel的宏功能
- 思路:
- 动态获取当前Excel的版本
- 根据版本找到Excel所在的注册表位置
- 修改宏策略所在注册表的值,实现自动开启宏功能
powershell
<#
现在主流Excel的version
2016
2019
2021
Microsoft 365
全部都是 16.0
#>
# 动态获取Excel的version
$excel = New-Object -ComObject Excel.Application
$version = $excel.Version
$excel.Quit()
# Excel的安全设置注册表位置
$path = "HKCU:\Software\Microsoft\Office\$version\Excel\Security"
if (!(Test-Path $path)) {
New-Item -Path $path -Force | Out-Null
}
<#
宏策略
1 启用所有宏【不安全】
2 禁用宏, 并提示
3 禁用所有宏【默认】
4 仅允许数字签名宏
#>
# 将宏策略设置为 → 禁用宏, 并提示
Set-ItemProperty -Path $path -Name "VBAWarnings" -Value 2
# 允许VBA项目访问
Set-ItemProperty -Path $path -Name "AccessVBOM" -Value 1
Write-Host "Excel宏策略已设置完成, 重启Excel即可生效..."
Pause