Você precisa converter um documento do Word para o formato OOXML Strict, mas não pode usar a caixa de diálogo Salvar Como para cada arquivo. OOXML Strict é a versão ISO do formato Office Open XML, que garante compatibilidade entre plataformas e conformidade para arquivamento de longo prazo. Este artigo explica como automatizar a conversão usando macros VBA, PowerShell com o Open XML SDK e o modelo de objeto COM do Office. Você aprenderá o código exato e as etapas para converter documentos únicos ou em lote sem intervenção manual.
Principais Conclusões: Automatizando a Conversão para OOXML Strict
- Macro VBA com FileFormat:=wdFormatXMLStrictDocument: Converte o documento ativo para OOXML Strict em uma linha de código.
- PowerShell + Open XML SDK 2.5: Permite conversão headless em servidores sem Word instalado usando o namespace DocumentFormat.OpenXml.Packaging.
- Processamento em lote via loop de pasta: Use Dir() no VBA ou Get-ChildItem no PowerShell para converter todos os arquivos .docx em uma pasta.
O Que é OOXML Strict e Por Que Converter Programaticamente
OOXML Strict é a versão padrão ISO 29500:2008 do formato Office Open XML. O formato .docx padrão no Word usa uma variante transitória que inclui recursos binários legados que não fazem parte do padrão ISO. OOXML Strict remove esses elementos legados, produzindo um arquivo totalmente compatível com o padrão internacional.
Converter programaticamente é necessário quando você precisa processar centenas ou milhares de arquivos. A conversão manual através de Arquivo > Salvar Como > Procurar > Tipo de arquivo > Documento do Word (docx) com a opção “Strict” selecionada é impraticável para trabalhos em lote. A automação também garante uma saída consistente — cada arquivo convertido usa as mesmas configurações, reduzindo erros humanos.
Pré-requisitos para Cada Método
O método VBA requer o Word instalado na máquina. O método PowerShell requer o Open XML SDK 2.5 para Microsoft Office, que pode ser instalado via NuGet ou pelo Centro de Download da Microsoft. O método COM também requer o Word instalado, mas é executado fora da interface gráfica do Word, sendo útil para automação no lado do servidor onde não há sessão interativa.
Método 1: Converter Usando uma Macro VBA
Este método funciona dentro do Word. Você executa uma macro que salva o documento atual no formato OOXML Strict. A macro usa a constante wdFormatXMLStrictDocument, que tem valor 24.
- Abra o Editor Visual Basic
Pressione Alt+F11. No Project Explorer, clique duas vezes em ThisDocument ou insira um novo módulo via Inserir > Módulo. - Cole a macro de conversão
Copie e cole o seguinte código no módulo:Sub ConvertToOOXMLStrict()Dim doc As DocumentSet doc = ActiveDocumentDim newName As StringnewName = Replace(doc.FullName, ".docx", "_strict.docx")doc.SaveAs2 FileName:=newName, FileFormat:=wdFormatXMLStrictDocumentEnd Sub - Execute a macro
Pressione F5 enquanto o cursor está dentro da macro. Um novo arquivo chamadooriginal_strict.docxé salvo na mesma pasta. - Converter em lote todos os documentos de uma pasta
Use esta macro para processar todos os arquivos .docx em uma pasta:Sub BatchConvertToStrict()Dim f As String, doc As Documentf = Dir("C:\Docs\docx")Do While f <> ""Set doc = Documents.Open("C:\Docs\" & f)doc.SaveAs2 FileName:="C:\Docs\Strict\" & f, FileFormat:=wdFormatXMLStrictDocumentdoc.Closef = DirLoopEnd Sub
Altere os caminhos das pastas para corresponder ao seu ambiente.
Método 2: Converter Usando PowerShell e Open XML SDK
Este método não requer o Word instalado. Ele usa o namespace DocumentFormat.OpenXml.Packaging para alterar o formato do arquivo programaticamente. O SDK lê o documento, altera seu tipo de pacote para Strict e o salva.
- Instale o Open XML SDK
Execute este comando em um console PowerShell elevado:Install-Package OpenXmlSdk -ProviderName NuGet
Alternativamente, baixe o SDK da Microsoft e instale manualmente. - Crie o script de conversão
Salve o seguinte comoConvertToStrict.ps1:Add-Type -Path "C:\Program Files\Open XML SDK\V2.5\lib\DocumentFormat.OpenXml.dll"$source = "C:\Docs\report.docx"$destination = "C:\Docs\report_strict.docx"$doc = [DocumentFormat.OpenXml.Packaging.WordprocessingDocument]::Open($source, $false)$doc.ChangeDocumentType([DocumentFormat.OpenXml.WordprocessingDocumentType]::Strict)$doc.SaveAs($destination)$doc.Dispose() - Execute o script
Abra o PowerShell como Administrador e execute:powershell -ExecutionPolicy Bypass -File ConvertToStrict.ps1
O arquivo de saída é salvo no caminho de destino. - Converter em lote todos os arquivos .docx de uma pasta
Envolva a conversão em um loop:$files = Get-ChildItem "C:\Docs" -Filter docxforeach ($f in $files) {$doc = [DocumentFormat.OpenXml.Packaging.WordprocessingDocument]::Open($f.FullName, $false)$doc.ChangeDocumentType([DocumentFormat.OpenXml.WordprocessingDocumentType]::Strict)$out = Join-Path "C:\Docs\Strict" $f.Name$doc.SaveAs($out)$doc.Dispose()}
Método 3: Converter Usando o Modelo de Objeto COM (Word Não Visível)
Este método usa a interface COM do Word, mas mantém o aplicativo oculto. É adequado para automação baseada em servidor onde você precisa dos recursos completos de renderização do Word, mas não deseja uma janela visível.
- Crie um script PowerShell usando COM
Salve o seguinte comoConvertViaCOM.ps1:$word = New-Object -ComObject Word.Application$word.Visible = $false$doc = $word.Documents.Open("C:\Docs\report.docx")$doc.SaveAs2("C:\Docs\report_strict.docx", [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLStrictDocument)$doc.Close()$word.Quit() - Execute o script
Execute no PowerShell:powershell -ExecutionPolicy Bypass -File ConvertViaCOM.ps1
O Word abre brevemente em segundo plano, converte o arquivo e fecha. - Conversão em lote com COM
Faça um loop por todos os arquivos .docx:$word = New-Object -ComObject Word.Application$word.Visible = $false$files = Get-ChildItem "C:\Docs" -Filter docxforeach ($f in $files) {$doc = $word.Documents.Open($f.FullName)$out = Join-Path "C:\Docs\Strict" $f.Name$doc.SaveAs2($out, [Microsoft.Office.Interop.Word.WdSaveFormat]::wdFormatXMLStrictDocument)$doc.Close()}$word.Quit()
Erros Comuns de Conversão e Limitações
Erro “O formato do arquivo não é suportado” no método PowerShell SDK
Isso ocorre quando o arquivo de origem não é um arquivo .docx válido. O SDK só pode abrir pacotes baseados em OPC. Arquivos corrompidos ou salvos no formato .doc falharão. Verifique a extensão do arquivo e repare o documento primeiro usando o recurso Abrir e Reparar do Word.
Macro VBA falha com “Permissão negada”
A macro não pode gravar em um local somente leitura ou em uma pasta onde o usuário não tem permissões de gravação. Certifique-se de que a pasta de saída permita acesso de gravação. Use um caminho absoluto como C:\Users\SeuNome\Documents\Strict\ em vez de uma pasta protegida pelo sistema.
Método COM deixa processos Word.exe em execução
Se o script falhar antes de chamar $word.Quit(), um processo do Word permanece na memória. Sempre envolva as operações COM em um bloco try-catch-finally, ou use Stop-Process -Name WINWORD após a conclusão do script. Para scripts de produção, use o método System.Runtime.InteropServices.Marshal.ReleaseComObject para liberar corretamente o objeto COM.
Arquivos OOXML Strict abrem em versões antigas do Word
Word 2007 e anteriores não suportam OOXML Strict nativamente. Usuários com essas versões verão um aviso de compatibilidade ou podem não conseguir abrir o arquivo. Se a compatibilidade com versões anteriores for necessária, mantenha o formato .docx transitório.
VBA vs PowerShell vs COM: Comparação de Métodos de Automação
| Item | Macro VBA | PowerShell + SDK | Objeto COM |
|---|---|---|---|
| Requer Word instalado | Sim | Não | Sim |
| Requer Open XML SDK | Não | Sim | Não |
| Executa headless (sem GUI) | Não (Word visível) | Sim | Sim |
| Velocidade de conversão em lote | Lenta (abre cada doc) | Rápida (sem carregar Word) | Moderada |
| Lida com formatação complexa | Fidelidade total | Pode perder alguns recursos | Fidelidade total |
| Melhor para | Arquivos únicos ad-hoc | Automação em servidor | Servidor com licença do Word |
Agora você pode converter documentos do Word para o formato OOXML Strict programaticamente usando VBA, PowerShell com o Open XML SDK ou o modelo de objeto COM. Escolha o método que se adequa ao seu ambiente: VBA para uso interativo, SDK para servidores headless e COM quando a fidelidade total do Word for necessária em um servidor. Como próximo passo, teste cada método em um único arquivo antes de executar um lote. Uma dica avançada: use o método SDK para validar a saída verificando a propriedade DocumentType — ela deve retornar Strict após a conversão.