2016-12-02 26 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

相關問題