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远非如此简单。 我们得到Activesheet
的UsedRange
属性,select它的Rows
属性,然后使用指定$LastRow
的Item()
方法。 我们设置了该范围的单元格颜色和文本颜色,然后我们完成了。
$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
与$()