打开word文档并使用PowerShell指定编码
我试图告诉PowerShell打开一个文本文件并选择某个编码选项。默认情况下,在Word中手动打开此文本文件时,它会尝试使用日语编码打开它,因此无法正确显示某些字符 我试过很多不同的方法,但都不管用,所以我完全被卡住了 除其他外,此文本文件需要每天转换为PDF 我当前的脚本如下:打开word文档并使用PowerShell指定编码,powershell,encoding,character-encoding,ms-word,Powershell,Encoding,Character Encoding,Ms Word,我试图告诉PowerShell打开一个文本文件并选择某个编码选项。默认情况下,在Word中手动打开此文本文件时,它会尝试使用日语编码打开它,因此无法正确显示某些字符 我试过很多不同的方法,但都不管用,所以我完全被卡住了 除其他外,此文本文件需要每天转换为PDF 我当前的脚本如下: $wdFormatPDF = 17 $word = New-Object -ComObject Word.Application $word.Visible = $true $folderpath = "C:\Us
$wdFormatPDF = 17
$word = New-Object -ComObject Word.Application
$word.Visible = $true
$folderpath = "C:\Users\smirabile\Downloads\report-testing-destination\*"
$fileTypes = "accepted.spl"
Get-ChildItem -Path $folderpath -Include $fileTypes | ForEach-Object {
$path = ($_.FullName).Substring(0, ($_.FullName).LastIndexOf("."))
$doc = $word.Documents.Open($_.FullName)
$Word.Selection.PageSetup.Orientation = 1
$Word.Selection.PageSetup.LeftMargin = 20
$Word.Selection.PageSetup.RightMargin = 20
$doc.Select()
$Word.Selection.Font.Size = 9
$doc.SaveAs([ref]$path, [ref]$wdFormatPDF)
$doc.Close()
}
$word.Quit()
Stop-Process -Name WINWORD -Force
如有疑问,请阅读:
语法
expression.Open(文件名、ConfirmConversions、只读、AddToRecentFiles、,
PasswordDocument、PasswordTemplate、Revert、WritePasswordDocument、,
WritePasswordTemplate,格式,编码,可见,OpenConflictDocument,
OpenAndRepair、DocumentDirection、NoEncodingDialog)
[…]编码|可选|变体| Microsoft Word在查看保存的文档时使用的文档编码(代码页或字符集)。可以是任何有效常量。[…]默认值是系统代码页 用于要与其默认值一起使用的参数 示例(使用iso-8859-15编码):
忘了提到我已经读过这篇文章了,但是我发现很难理解在哪里或者如何编写代码来实现这一点。到目前为止,我得到了$Word.expression.Open($Encoding:=65001),这不起作用,我尝试过的许多其他变体也不起作用。抱歉,我对powershell不是很有经验,因此非常感谢您的帮助。您不能使用命名参数。所有参数必须以正确的顺序提供,只能省略默认值的后续列表。请看一看我提供的示例。这是有原因的。对不起,因为某种原因,我直到现在才看到你的例子!虽然您的代码可以正常工作,但请您解释为什么行中有多个$def?正如我已经说过的:只有默认值的后续列表可以省略,所有其他参数(直到最后一个非默认值)必须以正确的顺序提供。
$def
参数将参数ConfirmConversions
通过Format
填入各自的默认值。
$def = [Type]::Missing
$doc = $word.Documents.Open(
$_.FullName, $def, $def, $def, $def, $def, $def, $def, $def, $def, 28605
)