2

У меня есть рабочая тетрадь с более чем 150 листами. Каждый лист содержит изображение, которое было скопировано на каждый рабочий лист из другой рабочей книги на 150 листов. Процесс выполнялся путем ручного копирования изображения 1 из рабочей книги A в рабочую книгу B, изображения 2 из рабочей книги A в рабочую книгу B и так далее.

Проблема в том, что рабочая книга, куда были скопированы изображения, оказалась огромной, поскольку изображения были вставлены как «картинки», а не как «сохраняющие исходное форматирование».

Как мне сжать все изображения в большой книге? Я уже применил стандартное разрешение "Сжатие изображений" (E-mail (96 ppi)) в Excel. Это помогло уменьшить размер документа, но он все еще огромен по сравнению с документом, из которого были скопированы изображения.

2 ответа2

1

Вы можете использовать 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

Обратите внимание, что он изменяет файл на месте, поэтому вы можете сначала сделать резервную копию.

0

Excel не предназначен для хранения изображений. Вы можете попытаться встроить изображение из внешней ссылки, поэтому рабочий лист не будет содержать само изображение, а извлечет его из другого источника.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .