Вы можете использовать PowerShell! Мы можем адаптировать сценарий, который я написал для презентаций PowerPoint, для работы с документами Excel.
[CmdletBinding()]
Param(
[Parameter(Mandatory = $true)][string]$File,
[Parameter()][int]$Quality = 50
)
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.Drawing
$fs = New-Object System.IO.FileStream (Resolve-Path $File), 'Open'
$zip = New-Object System.IO.Compression.ZipArchive $fs, 'Update'
$zip.Entries | ? {$_.FullName.StartsWith('xl/media/')} | % {
$s = $_.Open()
$img = [System.Drawing.Image]::FromStream($s)
$s.Position = 0
$codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageDecoders() | ? {$_.FormatId -eq [System.Drawing.Imaging.ImageFormat]::Jpeg.Guid}
$qualityprop = [System.Drawing.Imaging.Encoder]::Quality
$encodeparams = New-Object System.Drawing.Imaging.EncoderParameters 1
$encodeparams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter $qualityprop, $Quality
$img.Save($s, $codec, $encodeparams)
$s.SetLength($s.Position)
$s.Close()
}
$zip.Dispose()
Имея файл XLSX, скрипт преобразует все внедренные изображения в формат JPEG с настройкой качества по умолчанию, равной 50. Чтобы использовать его, сначала сохраните этот скрипт в виде файла PS1, например, xlsximg.ps1
. Если вы этого еще не сделали, следуйте инструкциям в разделе «Включение сценариев» вики-тега PowerShell . Затем откройте приглашение PowerShell для папки, в которой вы сохранили скрипт, и запустите его так:
.\xlsximg.ps1 C:\path\to\workbook.xlsx
Когда я это проверял, он уменьшил рабочую книгу со встроенным снимком экрана со 109 КБ до 49 КБ. Если вам нужно сжать его дальше, вы можете вручную указать более низкую настройку качества, например:
.\xlsximg.ps1 C:\path\to\workbook.xlsx -Quality 20
Обратите внимание, что он изменяет файл на месте, поэтому вы можете сначала сделать резервную копию.