MS Word Belgelerinden görüntülerin toplu dışa aktarılması


0

Görüntüleri dışa aktarmam gereken 900'den fazla MS Word dosyasına sahibim. Birkaç dosyayı HTML’ye aktardım, ancak bu 900+ dosya için yavaş / uzun bir işlem.

Bir süre önce burada bir Powershell betiği buldum ama işe yaramadı. Windows 10 ve Office 365'e sahibim, bu yüzden komut dosyasının güncellenmesi gerekip gerekmediğinden emin değilim.

İşte Powershell betiği 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();

Komut isteminden aşağıdakileri arıyorum:

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

Daha iyi bir yöntem var mı, yoksa ne? Dosyalar 60 ya da daha fazla klasöre sahiptir, bu nedenle ideal olarak en üstteki klasörü işaret edebilirim ve çıkış klasörü ile alt klasörleri oluşturur ve tekrarlı olarak dışa aktarır.


Bunu VBA'da yapardım. Dokümanları FileSystemObject ile yineleyin, açın ve yineleyin; ayrı ayrı belgenin adı ve dokümanın içindeki resim numarasıyla birlikte saklayan görüntüleri ile yineleyin.
Akina

2
Belki de buradaki yaklaşımı göz önünde bulundurun: gallery.technet.microsoft.com/office/… yani Word belgesini geçici bir zip dosyasına kopyalayın, görüntüleri \ word \ media \ dizinine çıkartın ve bir hedefe taşıyın.
Yardım

Yanıtlar:


1

Geçerli kodunuzla ilgili soru açık değil, ancak Powershell bu görev için faydalı bir araç.

Yorumların önerdiği gibi, dosyalarınız .docx (.doc değil) ise, dosya uzantılarını .zip olarak yeniden adlandırabilirsiniz. Zip'i açtığınızda, belgede kullanılan bir resim klasörü bulacaksınız. Powershell'i, belgeleri .zip olarak yeniden adlandırmak, her bir zip'i çıkarmak, ardından tüm görüntü dosyalarını almak için kullanabiliriz.

Aşağıdaki çözüm, ideal olmayan, ancak güzel ve basit bir çözüm olan geçici dizinlerin oluşturulmasını / silinmesini içerir. Bunu kullanmadan önce dosyalarınızı yedeklediğinizden emin olun. -WhatIfParametre birinin hatalı bu kodu kullanır durumda, bir güvenlik önlemi olarak dahil edilir. Bunu kendi takdirine göre kaldır.

# 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")
}

İlk dosya grubu için önerdiğiniz şeyi yapmak için hızlı ve kirli bir toplu iş dosyası oluşturdum. Bir sonraki yönteminizi deneyeceğim.
Dizzy49
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.