Powershell 自动安装Excel自定义标签页,开启宏

目录

  • [一. 自动安装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
相关推荐
西西弗Sisyphus2 天前
PowerShell 配置为启动时自动激活 Conda 环境
conda·powershell
夫唯不争,故无尤也16 天前
curl与Invoke-RestMethod核心区别
后端·fastapi·powershell·curl
bu_shuo18 天前
Windows电脑使用VSCode远程控制Windows主机方法记录
windows·vscode·ssh·powershell
Moshow郑锴1 个月前
WindowsRemoteAdmin(超级马里奥像素版)专为无远程登录桌面系统打造的便携式管理工具
java·powershell·远程控制·远程桌面·系统运维
超级大福宝2 个月前
PowerShell 实现类似 Bash 的补全行为
bash·powershell
小雪_Snow2 个月前
PowerShell 版本升级教程
powershell
Whoami!2 个月前
⓫⁄₅ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 利用PowerShell获取敏感信息
网络安全·信息安全·powershell·windows日志
小雪_Snow2 个月前
PowerShell 修改编码为 UTF-8 教程
powershell
番茄灭世神2 个月前
常见终端工具输出中文乱码的解决方案
bash·编码格式·powershell·终端工具