Exportação em lote de imagens de documentos do MS Word

0

Tenho mais de 900 arquivos do MS Word dos quais preciso exportar as imagens. Eu exportei alguns arquivos para HTML, mas esse é um processo lento / longo para mais de 900 arquivos.

Encontrei um script do Powershell aqui há algum tempo, mas não está funcionando. Eu tenho o Windows 10 e o Office 365, por isso não tenho certeza se o script precisa ser atualizado.

Aqui está o script do Powershell convertdoc.ps1

param([string]$docpath,[string]$htmlpath = $docpath)

$srcfiles = Get-ChildItem $docPath -filter "*.doc"
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatFilteredHTML");
$word = new-object -comobject word.application
$word.Visible = $False

function saveas-filteredhtml
    {
        $opendoc = $word.documents.open($doc.FullName);
        $opendoc.saveas([ref]"$htmlpath\$doc.fullname.html", [ref]$saveFormat);
        $opendoc.close();
    }

ForEach ($doc in $srcfiles)
    {
        Write-Host "Processing :" $doc.FullName
        saveas-filteredhtml
        $doc = $null
    }

$word.quit();

Estou ligando com o seguinte em um prompt de comando:

powershell -ExecutionPolicy RemoteSigned -File "c:\convertdoc.ps1" "c:" "c:-output"

Existe um método melhor, ou o que? Os arquivos estão em 60 ou mais pastas, então, idealmente, eu poderia apontar para a pasta principal e criar a pasta de saída e as subpastas e exportar recursivamente.

    
por Dizzy49 15.08.2018 / 07:33

1 resposta

1

A pergunta sobre o seu código atual não é clara, embora o Powershell seja uma ferramenta útil para essa tarefa.

Como os comentários sugerem, se seus arquivos forem .docx (não .doc), você poderá renomear as extensões de arquivo para .zip. Quando você abre o zip, você encontrará uma pasta de imagens que são usadas dentro do documento. Podemos usar o Powershell para renomear os documentos para .zip, extrair o zip de cada um e depois obter todos os arquivos de imagem.

A solução abaixo envolve a criação / exclusão de diretórios temporários, o que não é ideal, mas é uma solução simples e agradável. Certifique-se de fazer um backup dos seus arquivos antes de usar isso. O parâmetro -WhatIf é incluído como uma medida de segurança, no caso de alguém usar incorretamente este código. Remova isso a seu critério.

# put your documents here
$documents = "C:\documents\"
# your images will be stored here
$images = "C:\images\"

Set-Location $documents

# rename all docx files to zip files, then extract the zips to directories
Get-ChildItem $documents *.docx | % { 
    Rename-Item $_ ($_.BaseName + ".zip")
    Expand-Archive ($_.BaseName + ".zip")
}

# get the images from the directories, then delete each directory
Get-ChildItem -Directory | ForEach-Object {
    Copy-Item "$documents$_\word\media\*" $images
    Remove-Item $documents$_ -Recurse -WhatIf
}

# restore the docx files
Get-ChildItem $documents *.zip | % { 
    Rename-Item $_ ($_.Basename + ".docx")
}
    
por 15.08.2018 / 15:04