Powershell Excel单元格不按预期着色

我通过指定dynamic添加文本到行末尾的Excel电子表格

$excel = New-Object -Com Excel.Application $excel.Visible = $True $wb = $Excel.Workbooks.Add() $ws = $wb.Worksheets.Add() $lastRow = $ws.UsedRange.rows.count + 1 

我可以添加数据,但现在我想格式化两个标题列

在这里输入图像说明

这是我的代码

 $ws.Range("A$lastRow:B$lastRow").interior.colorindex = 11 $ws.Range("A$lastRow:B$lastRow").Font.colorindex = 6 

这是输出

在这里输入图像说明

如何使用“计算机数量”格式化单元格?

所以你的问题的根源在于PowerShell认为你正在研究variables,因为你有一个美元符号,然后是文本,然后是一个冒号。 例:

 $global:LastRow $script:LastRow 

简单的解决scheme? 退出冒号,以便从字面上取代PowerShell,假定它是variables的一部分。 简单的答案:

 $ws.Range("A$lastRow`:B$lastRow").interior.colorindex = 11 $ws.Range("A$lastRow`:B$lastRow").Font.colorindex = 6 

但我认为这里有更好的答案,也许是一个学习的机会。

假设您希望整行具有相同的配色scheme,可以通过使用UsedRange属性来简化,然后select所需的行并为其设置颜色。 为了设置一个例子,我启动了Excel,抓住我的“我的文档”文件夹中的第一个Excel文档,得到第一个空行。 所以这是我的设置:

 $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $True $Doc = gci "$env:userprofile\Documents\*.xlsx"|select -first 1 -ExpandProperty fullname $WB = $Excel.workbooks.open($doc) $LastRow = $Excel.ActiveSheet.UsedRange.Rows.Count + 1 

然后,我只是抓住我的C:\驱动器的目录列表只是作为垃圾数据粘贴,所以我有额外的行,并格式化标题行。 我将它转换为制表符分隔的CSV,将其复制到剪贴板,然后将其粘贴到列A中的第一个空白单元格中:

 $Data = Get-ChildItem C:\ $Data | ConvertTo-Csv -NoTypeInformation -Delimiter "`t" | Clip [void]$Excel.ActiveSheet.Rows.item($LastRow).cells.item(1).pastespecial() 

好吧,这只是为了设置,所以我可以复制这个问题。 实际的解决scheme远非如此简单。 我们得到ActivesheetUsedRange属性,select它的Rows属性,然后使用指定$LastRowItem()方法。 我们设置了该范围的单元格颜色和文本颜色,然后我们完成了。

 $Excel.ActiveSheet.UsedRange.Rows.Item($LastRow).Interior.ColorIndex = 11 $Excel.ActiveSheet.UsedRange.Rows.Item($LastRow).Font.ColorIndex = 6 

在你的例子中,你可以简单地使用$ws.UsedRange

我用$lastRow连接了A

 $acell = "A" + $lastRow $bcell = "B" + $lastRow $ws.Range("$($acell):$($bcell)").interior.colorindex = 11 $ws.Range("$($acell):$($bcell)").Font.colorindex = 6 

诀窍是围绕$acell$acell$()