Como Converter .ppt para .pptx em Lote com PowerShell e Office Interop
🔍 WiseChecker

Como Converter .ppt para .pptx em Lote com PowerShell e Office Interop

Você tem uma pasta cheia de arquivos PowerPoint .ppt antigos que precisa converter para o formato .pptx moderno. Abrir cada arquivo manualmente e usar Salvar Como é lento e sujeito a erros quando você tem dezenas ou centenas de apresentações. A causa raiz é que arquivos .ppt mais antigos usam um formato binário que carece de recursos como estrutura baseada em XML, compactação aprimorada e compatibilidade com ferramentas mais recentes do PowerPoint. Este artigo explica como usar PowerShell com o assembly Office Interop para converter em lote todos os arquivos .ppt de uma pasta para .pptx em uma única passagem automatizada.

Principais Pontos: Conversão em Lote de .ppt para .pptx via PowerShell

  • Script PowerShell com namespace Microsoft.Office.Interop.PowerPoint: Inicia o PowerPoint em segundo plano, abre cada arquivo .ppt e o salva como .pptx sem interação do usuário.
  • Filtro de extensão de arquivo -Filter “ppt”: Segmenta apenas arquivos no formato antigo e ignora arquivos já no formato .pptx.
  • Objeto COM PowerPoint.Application com Visible = $false: Executa o processo de conversão silenciosamente, sem exibir a janela do PowerPoint.

ADVERTISEMENT

Por que PowerShell com Office Interop é a Ferramenta Certa para Conversão em Lote

O PowerPoint não inclui uma ferramenta de conversão em lote integrada. O fluxo de trabalho Arquivo > Abrir e Arquivo > Salvar Como lida com um arquivo por vez. Para operações em lote, você precisa de uma abordagem programática que possa iterar sobre uma pasta, abrir cada apresentação e salvá-la no formato desejado.

PowerShell com a biblioteca Office Interop é a solução padrão porque controla diretamente o objeto de aplicação do PowerPoint. O assembly Interop expõe o modelo de objeto completo do PowerPoint, incluindo o método Presentation.SaveAs, que aceita o valor da enumeração PpSaveAsFileType ppSaveAsOpenXMLPresentation (valor 24) para saída .pptx.

Antes de começar, confirme os seguintes pré-requisitos:

  • PowerPoint (Microsoft 365 ou 2021, 2019, 2016) está instalado na mesma máquina onde o script será executado.
  • PowerShell 5.1 ou posterior está disponível. Windows 10 e Windows 11 incluem PowerShell 5.1 por padrão.
  • Os arquivos .ppt não são protegidos por senha. O Interop não consegue abrir arquivos protegidos por senha sem intervenção manual.
  • A conta de usuário que executa o script tem permissões de gravação na pasta de destino.

O script inicia o PowerPoint como um objeto COM. Cada arquivo .ppt é aberto, convertido e fechado um de cada vez. Após processar todos os arquivos, o script fecha o PowerPoint de forma limpa para liberar recursos do sistema.

Script PowerShell para Converter Todos os Arquivos .ppt para .pptx

O script abaixo realiza a conversão em lote. Copie o script inteiro em um arquivo .ps1, por exemplo Convert-PptToPptx.ps1. Ajuste o caminho $sourceFolder para corresponder ao seu ambiente.

  1. Abra o PowerShell como Administrador
    Pressione a tecla Windows, digite PowerShell, clique com o botão direito em Windows PowerShell e selecione Executar como administrador. Direitos de administrador não são estritamente necessários para o script, mas evitam erros de permissão se a pasta de origem estiver em um local protegido, como C:\Program Files.
  2. Defina a política de execução para permitir scripts locais
    Execute este comando: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Essa configuração permite que scripts criados localmente sejam executados, enquanto ainda bloqueia scripts remotos não assinados.
  3. Crie o arquivo de script PowerShell
    Abra o Bloco de Notas ou qualquer editor de texto. Cole o seguinte código:
# Convert-PptToPptx.ps1
# Converte em lote todos os arquivos .ppt em uma pasta para .pptx usando Office Interop

$sourceFolder = "C:\Apresentacoes\FormatoAntigo"
$pptFiles = Get-ChildItem -Path $sourceFolder -Filter "ppt"

if ($pptFiles.Count -eq 0) {
    Write-Host "Nenhum arquivo .ppt encontrado em $sourceFolder" -ForegroundColor Yellow
    exit
}

$powerPoint = New-Object -ComObject PowerPoint.Application
$powerPoint.Visible = $false  # Executar em segundo plano

foreach ($file in $pptFiles) {
    $fullPath = $file.FullName
    $outputPath = [System.IO.Path]::ChangeExtension($fullPath, ".pptx")
    
    Write-Host "Convertendo: $fullPath" -ForegroundColor Green
    
    $presentation = $null
    try {
        $presentation = $powerPoint.Presentations.Open($fullPath, $true, $false, $false)
        $presentation.SaveAs($outputPath, 24)  # 24 = ppSaveAsOpenXMLPresentation
        $presentation.Close()
        Write-Host "Salvo: $outputPath" -ForegroundColor Cyan
    }
    catch {
        Write-Host "Erro ao converter $fullPath : $_" -ForegroundColor Red
    }
    finally {
        if ($presentation -ne $null) {
            [System.Runtime.InteropServices.Marshal]::ReleaseComObject($presentation) | Out-Null
        }
    }
}

$powerPoint.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($powerPoint) | Out-Null

Write-Host "Conversão concluída. Processados $($pptFiles.Count) arquivos." -ForegroundColor Green
  1. Salve o arquivo de script
    Salve o arquivo como Convert-PptToPptx.ps1 em uma pasta que você possa acessar facilmente pelo PowerShell, por exemplo C:\Scripts.
  2. Execute o script
    Na janela do PowerShell, digite: C:\Scripts\Convert-PptToPptx.ps1 e pressione Enter. O script lista cada arquivo à medida que converte. Os arquivos .ppt originais permanecem inalterados; novos arquivos .pptx aparecem na mesma pasta.
  3. Verifique a saída
    Abra alguns dos novos arquivos .pptx no PowerPoint e confirme se todos os slides, textos, imagens e transições estão intactos. A conversão preserva a maioria do conteúdo, mas algumas animações muito antigas ou objetos incorporados podem sofrer pequenas alterações.

ADVERTISEMENT

Personalização de Parâmetros do Script para Diferentes Estruturas de Pastas

O script acima processa apenas a pasta de nível superior. Se seus arquivos .ppt estiverem espalhados em subpastas, modifique a linha Get-ChildItem para incluir o parâmetro -Recurse. Substitua a linha original por:

$pptFiles = Get-ChildItem -Path $sourceFolder -Filter "ppt" -Recurse

Com -Recurse, o script encontra arquivos .ppt em todas as subpastas e salva o arquivo .pptx convertido na mesma subpasta onde o .ppt original reside. A hierarquia de pastas é preservada.

Se você quiser enviar todos os arquivos convertidos para uma única pasta de saída em vez de mantê-los junto com os originais, adicione uma variável de caminho de destino e use o cmdlet Join-Path. Por exemplo:

$destinationFolder = "C:\Apresentacoes\Convertidas"
if (-not (Test-Path $destinationFolder)) {
    New-Item -ItemType Directory -Path $destinationFolder | Out-Null
}
$outputPath = Join-Path -Path $destinationFolder -ChildPath ($file.BaseName + ".pptx")

Problemas Comuns Durante a Conversão em Lote e Como Resolvê-los

Falha ao instanciar o objeto COM do PowerPoint

Se o script lançar um erro em New-Object -ComObject PowerPoint.Application, o PowerPoint não está instalado ou o registro COM está corrompido. Reinstale o PowerPoint a partir do instalador do Microsoft 365 ou Office. No Windows 11, vá em Configurações > Aplicativos > Aplicativos instalados, encontre Microsoft 365 e selecione Modificar > Reparação Rápida.

Script é executado, mas nenhum arquivo .pptx aparece

Verifique o caminho $sourceFolder. O script exibe um aviso amarelo se encontrar zero arquivos .ppt. Verifique também se os arquivos têm extensão .ppt e não .pptm ou .pps. O -Filter “ppt” não corresponde a arquivos .pptm ou .pps.

Processo do PowerPoint permanece no Gerenciador de Tarefas após o término do script

O script chama Quit e libera o objeto COM, mas um processo do PowerPoint pode persistir se uma exceção impedir a execução do bloco finally. Para limpar, abra o Gerenciador de Tarefas, encontre POWERPNT.EXE e finalize a tarefa. Para evitar isso, envolva todo o loop em uma estrutura try-catch-finally conforme mostrado no script acima.

Conversão muito lenta em pastas grandes

Cada arquivo .ppt leva vários segundos para abrir e salvar. Para pastas com mais de 100 arquivos, o script pode executar por vários minutos. Isso é esperado porque o Interop abre o aplicativo PowerPoint em segundo plano para cada arquivo. Não há método mais rápido usando apenas PowerShell e Interop, pois a conversão requer o mecanismo de renderização completo do PowerPoint.

ADVERTISEMENT

PowerShell Interop vs Conversores em Lote de Terceiros

Item PowerShell + Office Interop Conversor em Lote de Terceiros
Custo Gratuito se você já possui o PowerPoint Geralmente requer licença paga
Fidelidade Usa o mesmo mecanismo de renderização do PowerPoint Pode perder animações, fontes incorporadas ou SmartArt
Automação Programável, pode ser agendado via Task Scheduler Geralmente apenas GUI ou opções de linha de comando limitadas
Dependência PowerPoint deve estar instalado na mesma máquina Independente, não requer Office
Velocidade Mais lento porque cada arquivo abre no PowerPoint Mais rápido para slides simples com texto e imagem

Para a maioria dos usuários empresariais, a abordagem PowerShell Interop oferece o melhor equilíbrio entre fidelidade e custo. Considere um conversor de terceiros apenas se precisar executar conversões em um servidor sem PowerPoint instalado ou se precisar de uma taxa de transferência significativamente maior em centenas de arquivos diariamente.

Agora você pode converter uma pasta inteira de arquivos .ppt para .pptx com um único comando PowerShell. Após a conversão, abra os novos arquivos no PowerPoint para verificar a fidelidade do conteúdo. Para automação contínua, agende o script usando o Agendador de Tarefas do Windows para execução noturna. Uma dica avançada: adicione um parâmetro -PassThru ao script que retorna a lista de caminhos de arquivos convertidos, que você pode canalizar para uma função de registro ou um script de upload para o SharePoint.

ADVERTISEMENT