2016-12-02 50 views
0

我有一个脚本,它将根据它在目录中找到的文件数创建工作表。从那里它将表单的名称更改为文件名。在这个过程中,我试图在每张纸上添加两个Column header值“Hostname”和“IP Address”。我可以通过单独激活每张纸来达到此目的,但是由于纸张数量超过20张,这变得相当麻烦,因此我试图找到一种动态的方式来执行此操作,而不管纸张的数量是多少。将相同列标题名称添加到Excel工作簿中的所有工作表

这是我必须做的一切都交给了列标题部分代码:

$WorksheetCount = (Get-ChildItem $Path\Info*.txt).count 
$TabNames = Get-ChildItem $Path\Info*.txt 
$NewTabNames = Foreach ($file IN $TabNames.Name){$file.Substring(0,$file.Length-4)} 
$Break = 0 

$excel = New-Object -ComObject Excel.Application 
$excel.Visible = $true 
$Workbook = $Excel.Workbooks.Add() 

$null = $Excel.Worksheets.Add($MissingType, $Excel.Worksheets.Item($Excel.Worksheets.Count), 
$WorksheetCount - $Excel.Worksheets.Count, $Excel.Worksheets.Item(1).Type) 
1..$WorksheetCount 
Start-Sleep -s 1 

ForEach ($Name In $NewTabNames){ 
     $Break++ 
     $Excel.Worksheets.Item($Break).Name = $Name 
} 

我试图插入我的代码,例如:

ForEach ($Name In $NewTabNames){ 
     $Break++ 
     $Excel.Worksheets.Item($Break).Name = $Name 

     $cells=$Name.Cells 
     $cells.item(1,1)="Hostname" 
     $cells.item(1,2)="IP Address" 
} 

当我尝试运行脚本,我得到以下错误..

您无法调用空值表达式的方法。

然后前进列出我已经把代码中的每一行我想,既然我在操作过程中创建的变量,它是问题:

$cells=$Name.Cells 

我想也许如果我在ForEach命令之前移动它,它会解决它,但我仍然会收到同样的问题。我已经通过各种方式来查看通过PowerShell选择excel范围内的工作表,但没有发现任何有用的东西。

希望对此有任何帮助。

+0

'$细胞= $ Name.Cells'是问题,但不是因为你创建一个变量,'$ Name'只是一个字符串,它不”没有'.Cells'属性。 –

+0

感谢您的回复。我已经尝试了多种东西...... $ name,$ NewTabNames,任何可以让我得到我想要的东西的东西。但我仍然得到同样的错误。 – kuroikenshi

+0

自从我和excel一起工作以来,已经有好几年了,但很确定您需要循环使用$ Excel.worksheets –

回答

2

这实际上是我在StackOverflow中的第一篇文章,对于最终帮助我感到非常兴奋。我对你的代码做了一些小的修改,似乎工作正常。当我删除被分配的$ null变量时,我注意到了一些奇怪的行为,因为它对我来说似乎很奇怪,为什么它已经完成了,但是在移除该赋值后,我每次运行脚本时自动打开Outlook应用程序。我找到了你从那里得到代码的网站,看看原代码是否有任何改变。我发现this Microsoft documentation对此很有帮助。

This is what I modified

ForEach ($Name In $NewTabNames){ 
    $Break++ 
    $Excel.Worksheets($Break).Name = $Name 

    $Excel.Worksheets($Break).Cells(1,1).Font.Bold = $true 
    $Excel.Worksheets($Break).Cells(1,1) = "Hostname" 
    $Excel.Worksheets($Break).Cells(1,2).Font.Bold = $true 
    $Excel.Worksheets($Break).Cells(1,2) = "IP Address" 

}

+0

就像我希望的那样工作!谢谢!另外我有点傻眼,这很容易!再次感谢文档! – kuroikenshi

相关问题