从 MS Word 文档批量导出图像

从 MS Word 文档批量导出图像

我有超过 900 个 MS Word 文件需要导出其中的图片。我已将一些文件导出为 HTML,但对于 900 多个文件来说,这是一个缓慢而漫长的过程。

我之前在这里找到了一个 Powershell 脚本,但它不起作用。我有 Windows 10 和 Office 365,所以我不确定脚本是否需要更新。

这是 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();

我从命令提示符调用以下命令:

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

有没有更好的方法,或者什么?这些文件位于大约 60 个文件夹中,因此理想情况下,我可以指向顶部文件夹,它将创建输出文件夹和子文件夹并递归导出。

答案1

虽然 Powershell 是完成这项任务的一个有用工具,但有关您当前代码的问题尚不清楚。

正如评论所建议的,如果您的文件是 .docx(而不是 .doc),您可以将文件扩展名重命名为 .zip。打开 zip 文件后,您会找到一个包含文档中使用的图像的文件夹。我们可以使用 Powershell 将文档重命名为 .zip,提取每个 zip 文件,然后获取所有图像文件。

以下解决方案涉及创建/删除临时目录,虽然不是理想的解决方案,但却是一个不错的简单解决方案。在使用此解决方案之前,请务必备份您的文件。-WhatIf包含该参数是为了安全措施,以防有人错误地使用此代码。您可以自行决定是否删除它。

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

相关内容