2016-07-01 64 views
1

我有一個有10個工作表的Excel工作簿。我想使用Power-Shell找出每個excel工作表使用的內存。我試圖加載Com對象並檢查屬性,但沒有運氣!Excel中每個工作表內存使用情況使用powershell

$application = New-Object -ComObject excel.application 
$wb=$application.workbooks.open("C:\Model_Q.xlsx") 
$wb.sheets |gm 

任何想法如何做到這一點?

回答

0

這可能不是您正在尋找的答案,因爲它不在PowerShell中,但我發現了一個在Excel中使用VBA的非常簡單的解決方案,並且看到您現在沒有答案,所以值得一試! (1)在Excel中打開工作表並按Alt + F11,右鍵單擊工作簿並單擊插入>模塊。 (2)在下面的VBA腳本粘貼:

Sub WorksheetSizes() 
Dim xWs As Worksheet 
Dim Rng As Range 
Dim xOutWs As Worksheet 
Dim xOutFile As String 
Dim xOutName As String 
xOutName = "SheetSizesinBits" 
xOutFile = ThisWorkbook.Path & "\TempWb.xls" 
On Error Resume Next 
Application.DisplayAlerts = False 
Err = 0 
Set xOutWs = Application.Worksheets(xOutName) 
If Err = 0 Then 
    xOutWs.Delete 
    Err = 0 
End If 
With Application.ActiveWorkbook.Worksheets.Add(Before:=Application.Worksheets(1)) 
    .Name = xOutName 
    .Range("A1").Resize(1, 2).Value = Array("Worksheet Name", "Size") 
End With 
Set xOutWs = Application.Worksheets(xOutName) 
Application.ScreenUpdating = False 
xIndex = 1 
For Each xWs In Application.ActiveWorkbook.Worksheets 
    If xWs.Name <> xOutName Then 
     xWs.Copy 
     Application.ActiveWorkbook.SaveAs xOutFile 
     Application.ActiveWorkbook.Close SaveChanges:=False 
     Set Rng = xOutWs.Range("A1").Offset(xIndex, 0) 
     Rng.Resize(1, 2).Value = Array(xWs.Name, VBA.FileLen(xOutFile)) 
     Kill xOutFile 
     xIndex = xIndex + 1 
    End If 
Next 
Application.ScreenUpdating = True 
Application.Application.DisplayAlerts = True 
End Sub 

(3)保存工作簿作爲宏Enabled工作簿。 (4)關閉開發人員屏幕,然後按Alt + F8。 (5)選擇我們剛製作的宏並運行它。 這將創建一個新的工作表,並以位爲單位構建每個工作表的大小表。

祝你好運!

+0

感謝您的回答。有沒有什麼辦法可以在PowerShell中使用它 – user2181349