Tüm grafik dosyalarını bir Word belgesinden dışa aktarın

Womanne

Member
Bağlam menüsü aracılığıyla çağırdığınız bir PowerShell betiğiyle, Word DOCX’teki tüm grafikleri içeren bir klasörü hızla alırsınız.


Yazılım mimarı, danışman ve öğretim görevlisi olarak asıl işime ek olarak, çeşitli dergilerde (örn. iX, dotnetpro ve Windows Developer) ve kitap yayıncıları (örn. Carl Hanser, O’Reilly ve apress). Bazı yayıncılar, tüm çizimler zaten Word belgesinde yer alsa bile, bir Word belgesi olarak metne ek olarak çizimleri (çizimler ve ekran görüntüleri) ayrı bir grafik dosyası olarak teslim etmenizi ister.

Grafikleri dosya sistemine ayrı ayrı kaydederdim. Yarı zamanlı işimde daha verimli olmaya yönelik artan baskıyla, artık bu adımı da PowerShell kullanarak otomatikleştirdim. VBA ve Word nesne modelini kullanmıyorum, ancak modern Word dosyalarında (.docx) ancak grafikler zaten ayrı olarak kaydedilmiştir. DOCX biçimi, kendi alt klasöründe yalnızca bir ZIP dosyasıdır / kelime | ortalama grafikler mevcut, ancak grafikleri örneğin SnagIt veya Microsoft Visio ekran görüntüsü programından kopyalayıp yapıştırdım.

Aşağıdaki PowerShell komut dosyası, komut dosyasına ilk komut satırı parametresi olarak iletilen bir DOCX dosyasına başvuruyor. PowerShell kodu, DOCX dosyasını kopyalayarak ona bir .ZIP dosya adı uzantısı verir. Ardından bu .ZIP dosyası geçici bir klasöre ve klasöre çıkarılır /temp//kelime/ortalama hedef klasörde olacak /img kopyalandı. Ardından, .ZIP dosyası ve / sıcaklıkklasörler silinir.

Write-Host "Extract all images from a Word document into folder /img"
Write-Host "Author: Dr. Holger Schwichtenberg, wwww.IT-Visions.de, 2018"
try
{
$ErrorActionPreference = "Stop"; #Make all errors terminating
$path = $args[0] # Get path to .DOCX from Script arguments
Write-Host "DOCX: $path"
$file = Get-Item $path
$filezipname = $file.Name + ".zip"
$filezippath = "$($file.Directory)$filezipname"
Write-host "Copy $path to ZIP..." -ForegroundColor Yellow
Copy-Item $path $filezippath
Write-host "Extract ZIP to temp folder..." -ForegroundColor Yellow
if (test-path "$($file.Directory)temp") { Write-Error "Temp exists!"; }
Expand-Archive $filezippath -DestinationPath "$($file.Directory)temp"
Write-host "Create img folder and copy images..." -ForegroundColor Yellow
md "$($file.Directory)Img" -Force
Copy-Item "$($file.Directory)tempwordmedia*" "$($file.Directory)Img" -verbose
Write-host "Cleanup..." -ForegroundColor Yellow
rd $filezippath -ErrorAction Stop
rd "$($file.Directory)temp" -Recurse
Write-host "Done!" -ForegroundColor Green
}
catch{
Write-Host "Error: $($_.Exception.Message)" -ForegroundColor red
Read-Host "Press ENTER to exit"
}


DOCX dosyasına giden uygun yolla komut satırında komut dosyasını her seferinde çağırmak mümkündür, ancak eğlenceli değildir. Öyleyse, Windows Gezgini’nde bir günlük dosyasıyla bir bağlam menüsü girişi oluşturalım. bulunduğu yeri bilmeniz gerekir. .ps1-Dosyayı son satıra ekleyin.

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTWord.Document.12shellExtract Images using PowerShell]
[HKEY_CLASSES_ROOTWord.Document.12shellExtract Images using PowerShellcommand]
@="powershell.exe -File "C:ScriptsExtractImgesFromDOCX.ps1" "%1""

Elbette, daha da iyi otomatikleştirebilirsiniz. Komut dosyası, “yükseltilmiş” olarak adlandırıldığında kendisini kayıt defterine ekleyebilir. Bunu yapmak için yukarıdaki PowerShell betiğini biraz genişletmelisiniz.


Write-Host "Extract all images from a Word document into folder /img"
Write-Host "Author: Dr. Holger Schwichtenberg, wwww.IT-Visions.de, 2018"
Write-Host "Script: $PSScriptRoot$($MyInvocation.MyCommand.Name)"
# Register "Extract Images" command for DOCX
if ((New-Object
Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
{
Write-Host "Registering this script in Registry..."
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
md "HKCR:Word.Document.12shellExtract Images using PowerShell" -Force
md "HKCR:Word.Document.12shellExtract Images using PowerShellcommand" -Force
$registryPath = "HKCR:Word.Document.12shellExtract Images using PowerShellCommand"
$Name = "(Default)"
$value = 'powershell.exe -File "' + $PSScriptRoot +"" + $MyInvocation.MyCommand.Name + '" "%1"'
New-ItemProperty -Path $registryPath -Name $name -Value $value -PropertyType String -Force | Out-Null
Write-Host "Run script as normal user for processing DOCX!"
return
}

try
{
$ErrorActionPreference = "Stop"; #Make all errors terminating
$path = $args[0] # Get path to .DOCX from Script arguments
Write-Host "DOCX: $path"
$file = Get-Item $path
$filezipname = $file.Name + ".zip"
$filezippath = "$($file.Directory)$filezipname"
Write-host "Copy $path to ZIP..." -ForegroundColor Yellow
Copy-Item $path $filezippath
Write-host "Extract ZIP to temp folder..." -ForegroundColor Yellow
if (test-path "$($file.Directory)temp") { Write-Error "Temp exists!"; }
Expand-Archive $filezippath -DestinationPath "$($file.Directory)temp"
Write-host "Create img folder and copy images..." -ForegroundColor Yellow
md "$($file.Directory)Img" -Force
Copy-Item "$($file.Directory)tempwordmedia*" "$($file.Directory)Img" -verbose
Write-host "Cleanup..." -ForegroundColor Yellow
rd $filezippath -ErrorAction Stop
rd "$($file.Directory)temp" -Recurse
Write-host "Done!" -ForegroundColor Green
}
catch{
Write-Host "Error: $($_.Exception.Message)" -ForegroundColor red
Read-Host "Press ENTER to exit"
}


()






Haberin Sonu
 
Üst