2015-01-04 5 views
3

Как cn изменить цвет фона файла Word с помощью PowerShell?Изменение цвета фона файла Word через PowerShell

$wd = New-Object -COM 'Word.Application' 
$wd.Visible = $true # set to $false for production 

Get-ChildItem 'C:\1\*.doc' | % { 
    $doc = $wd.Documents.Open($_.FullName) 

    # Here's the problem 
    $doc.Background.Fill.ForeColor.RGB = RGB(192, 192, 192) 

    # Switch doc view to Online Layout view 
    $doc.ActiveWindow.View.Type = 6 

    $doc.Save($true) 
    $doc.Close() 
} 

$wd.Quit() 
[Runtime.InteropServices.Marshal]::ReleaseComObject($wd) 
[GC]::Collect() 
[GC]::WaitForPendingFinalizers() 

Я получаю 2 ошибки:

* RGB : The term 'RGB' is not recognized as the name of a cmdlet... 
* Cannot find an overload for "Save" and the argument count: "1". 

ответ

3

Так позволяет решить несколько вопросов, которые я знаю о ...

RGB: Термин 'RGB' не распознается как имя командлета ...

Конечно, вы знаете, почему это не работает, поскольку у PowerShell нет командлет RGB. Однако, если вы посмотрите на вход для $doc.Background.Fill.ForeColor.RGB, он ищет целое число. Обращаясь к этому related article, вы можете увидеть, как мы можем сделать переход.

Существует оговорка, которую необходимо решить. Хотя приведенный выше код не вызывает ошибки, вы заметите, что цвет не отображается в документе. Это связано с тем, что цвет фона не отображается по умолчанию. Вам нужно будет включить его.

$doc.Background.Fill.Visible = $true 

Хорошо, что один это делается сейчас, как о ....

Не может найти перегрузку для «Сохранить» и количество аргументов: «1».

Мы используем Get-Member, чтобы увидеть, почему именно

PS C:\users\Cameron\Downloads> $doc | gm 

    TypeName: Microsoft.Office.Interop.Word.DocumentClass 
... 
RunLetterWizard       Method    void RunLetterWizard([ref] System.Object LetterContent, [ref] System.Object WizardMode), void _Document.Ru... 
Save          Method    void Save(), void _Document.Save()                   
SaveAs         Method    void SaveAs([ref] System.Object FileName, [ref] System.Object FileFormat, [ref] System.Object LockComments... 
... 

Он не принимает никаких параметров, поэтому мы просто должны удалить $true. Остальные записи просто показывают, что некоторые другие методы принимают параметры.

$doc.Save() 

.... так .... за последние один

True: Термин 'True' не распознается как имя командлета ...

Я не видел эту ошибку и предполагаю, что это была опечатка, которая не попала в код вашего вопроса.

Пропустить RGB?

Функция сырой PowerShell, которая повторяет функциональность с небольшим количеством проверки данных

Function Get-RGB 
{ 
    Param( 
     [Parameter(Mandatory=$false)] 
     [ValidateRange(0,255)] 
     [Int] 
     $Red = 0, 
     [Parameter(Mandatory=$false)] 
     [ValidateRange(0,255)] 
     [Int] 
     $Green = 0, 
     [Parameter(Mandatory=$false)] 
     [ValidateRange(0,255)] 
     [Int] 
     $Blue = 0 
    ) 
    Process 
    { 
     [long]($Red + ($Green * 256) + ($Blue * 65536)) 
    } 
} 

Пример

PS C:\users\Cameron\Downloads> Get-RGB 129 0 54 
3539073 
+1

Вы также можете использовать предустановленные цветовые перечисления Word, например: '$ doc.Background.Fill.ForeColor.RGB = [Microsoft.Office.Interop.Word.WdColor] :: wdColorViolet' –

0

Просто для уточнения я отправляю окончательный сценарий здесь.

Этот скрипт будет проходить через ВСЕ файлы .doc в выбранном пути. У меня возникла проблема, хотя файлы doc были только для чтения, Так что я изменил save() на SaveAs([ref]$name) в другой папке и устранил проблему.

$wd = New-Object -COM 'Word.Application' 
$wd.Visible = $true # set to $false for production 

Get-ChildItem 'C:\songs\*.doc' | % { 
$doc = $wd.Documents.Open($_.FullName) 

$doc.Background.Fill.ForeColor.RGB = [long](249 + (232* 256) + (163 * 65536)) 
$doc.Background.Fill.Visible = $true 

# Switch doc view to Online Layout view, otherwise the changes won't appear in normal view 
$doc.ActiveWindow.View.Type = 6 

# Replace folder path to solve "read-only" problem 
$Name=($doc.Fullname).replace("songs","songs_edited") 
$doc.SaveAs([ref]$Name) 

$doc.Close() 
} 

$wd.Quit() 
[Runtime.InteropServices.Marshal]::ReleaseComObject($wd) 
[GC]::Collect() 
[GC]::WaitForPendingFinalizers() 
Смежные вопросы