我正在尝试使用 Windows 上运行的 GitHub Actions 自动截取与 Chocolatey 一起安装的 Excel 文件区域的屏幕截图。一切都按预期工作,除了 Excel 无法在 GitHub Action 内运行的 Windows 实例上正确显示嵌入图像。相反,它在图像所在的单元格中显示 #UNKNOWN!。
我期待的是这样的:
屏幕截图的一部分,图像正确显示在单元格中
我得到的是这样的:
屏幕截图的一部分,图像错误地显示为#UNKOWN!在细胞里
以下是 GitHub Action Workflow 中的作业示例:
注意:
Add-Excel-Trusted-Location.ps1
和 export-png.py
是我编写的脚本,它们已经过测试,并且似乎可以在本地以及在 GitHub Actions 内运行的 Windows 实例上运行。
env:
EXCEL_FILE_PATH: 'MySpreadsheet.xlsx'
OUTPUT_PNG_PATH: 'MySpreadsheetScreenshot.png'
INPUT_EQUIPMENT_SHEET_NAME: 'Sheet1'
INPUT_EQUIPMENT_CELL_RANGE: '$$A$$3:$$I$$35'
name: Export image from Excel spreadsheet
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Office
run: choco install office365business --params "'/productid:ExcelRetail /updates:FALSE'"
- name: Add Excel Trusted Location
run: pwsh .github/workflows/lib/Add-Excel-Trusted-Location.ps1 -Path "${{ env.EXCEL_FILE_PATH }}"
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12.3'
- name: Install Python dependencies
run: pip install pywin32 ImageGrab pillow
- name: Export PNG from Excel
run: python .github/workflows/lib/export-png.py "${{ env.EXCEL_FILE_PATH }}" "${{ env.OUTPUT_PNG_PATH }}" "${{ env.INPUT_EQUIPMENT_SHEET_NAME }}" "${{ env.INPUT_EQUIPMENT_CELL_RANGE}}"
我尝试在运行 Excel 的 Windows 11 电脑上本地运行此程序(内部版本 17830.20210 即点即用)。这一切都按预期运行,但我的机器已经安装了 Excel。
我还尝试将文件路径添加到 Excel 的受信任位置注册表项 (HKCU:\Software\Microsoft\Office .0\Excel\Security\Trusted Locations),但仍然显示 #UNKOWN!在目标细胞中。
我建立了一个 Windows Server 2022 VM(类似于 GitHub Action 中
runs-on: windows-latest
中使用的虚拟机)并手动完成 GitHub Action 工作流程。问题最终出在 Chocolatey 安装的 Excel 版本上。这是我正在使用的命令:
choco install office365business --params "'/productid:ExcelRetail /updates: FALSE'"
记下产品 ID,ExcelRetail。这是安装“Microsoft Excel 2016”。此版本的 Excel 不支持在单元格中放置图像,因此我不断在单元格中看到
#UNKONWN!
,就像我之前在 GitHub Action 运行的输出文件中观察到的那样。
为了解决此问题,我将产品 ID 更改为 O365HomePremRetail:
choco install office365business --params "'/productid:O365HomePremRetail /exclude: Access Groove Lync OneDrive OneNote Outlook Publisher Word Powerpoint /updates: FALSE /eula:TRUE'"
此命令仍然只安装 Excel,但由于我必须添加所有排除项才能获取 Excel 而不是整个 Office 套件,因此阅读起来比较困难。生成的安装是更现代的 Excel 版本:“Microsoft Excel for Microsoft 365”。此版本支持将图像放置在单元格内。
这个更新版本产生了 Excel 文件的屏幕截图(和 PDF),正如我最初的意图:
您可以在此处查看 GitHub 存储库:https://github.com/ThePerfectStrangers/TechnicalDocumentation
您可以在此处查看功能齐全的 GitHub Action 工作流程:https://github.com/ThePerfectStrangers/TechnicalDocumentation/blob/5d966a5f9b8640c72a08e761a026b6fe9edefbcd/.github/workflows/full-band-input-list-workflow.yml