Powershell Excel单元格未按预期颜色显示

时间:2015-05-20 14:47:20

标签: excel powershell

我通过指定

动态地将文本添加到行末尾的Excel电子表格中
$excel = New-Object -Com Excel.Application
$excel.Visible = $True
$wb = $Excel.Workbooks.Add()
$ws = $wb.Worksheets.Add()
$lastRow = $ws.UsedRange.rows.count + 1

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

enter image description here

这是我的代码

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

这是输出

enter image description here

如何使用"计算机数量"?

格式化单元格

2 个答案:

答案 0 :(得分:1)

因此,您的问题的根源是PowerShell认为您正在确定您的变量,因为您有一个美元符号,后跟文本,然后是冒号。例如:

$global:LastRow
$script:LastRow

简单的解决方案?转义冒号,使其按字面意思而不是PowerShell,假设它是变量的一部分。简单回答:

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

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

假设您希望整个行具有相同的颜色方案,可以使用工作表的UsedRange属性更简单,然后选择所需的行,并为其设置颜色。要设置一个示例,我启动了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()

好的,这只是为了设置所以我可以复制这个问题。实际的解决方案远比这简单得多。我们获取Activesheet的{​​{1}}属性,选择它的UsedRange属性,然后使用指定Rows的{​​{1}}方法}。我们设置了该范围的单元格颜色和文本颜色,我们已经完成了。

Item()

在您的示例中,您可以轻松使用$LastRow

答案 1 :(得分:0)

我将A与$lastRow

连接起来
$acell = "A" + $lastRow
$bcell = "B" + $lastRow

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

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