Comprimir todas as imagens no livro do Excel

2

Eu tenho uma pasta de trabalho com mais de 150 planilhas. Cada folha contém uma imagem que foi copiada para cada folha de trabalho de outra pasta de trabalho de 150 folhas. O processo foi feito copiando manualmente a imagem 1 da pasta de trabalho A para a pasta de trabalho B, a imagem 2 da pasta de trabalho A para a pasta de trabalho B e assim por diante.

A questão é que a pasta de trabalho onde as imagens foram copiadas ficou enorme, já que as imagens foram coladas como 'fotos' em vez de 'manter a formatação original'.

Como posso compactar todas as imagens na pasta de trabalho grande? Eu já apliquei a resolução padrão "Comprimir Imagens" do Excel (E-mail (96 ppi)). Isso ajudou a reduzir o tamanho do documento, mas ainda é enorme comparado ao documento do qual as imagens foram copiadas.

    
por StatsScared 28.06.2018 / 23:44

2 respostas

1

Você pode usar o PowerShell! Podemos adaptar um script que escrevi para apresentações do PowerPoint para trabalhar em documentos do 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()

Dado um arquivo XLSX, o script converterá todas as imagens incorporadas no formato JPEG com uma configuração de qualidade ajustável que será padronizada para 50. Para usá-lo, primeiro salve esse script como um arquivo PS1, por exemplo, %código%. Se ainda não o fez, siga as instruções na seção Habilitando Scripts do wiki de tags do PowerShell . Em seguida, abra um prompt do PowerShell na pasta em que você salvou o script e execute-o assim:

.\xlsximg.ps1 C:\path\to\workbook.xlsx

Quando testei isso, reduzi uma pasta de trabalho contendo uma captura de tela incorporada de 109 KB para 49 KB. Se você precisar compactá-lo ainda mais, poderá especificar manualmente uma configuração de qualidade mais baixa, como:

.\xlsximg.ps1 C:\path\to\workbook.xlsx -Quality 20

Observe que ele modifica o arquivo no local, portanto, talvez você queira fazer um backup primeiro.

    
por 29.06.2018 / 03:54
0

O Excel não foi feito para armazenar imagens. Você poderia tentar incorporar a imagem a partir de um link externo, portanto, a planilha não conteria a imagem em si, mas a buscaria de outra fonte

    
por 29.06.2018 / 01:20