Не вижу, где там показывает сразу у нескольких документов.
Попробовал способ через колонку "Число страниц" на MS Office 2019, Windows 10 x64,
система корректно показывает кол-во страниц только у документов, созданных этим же Office 2019 (как doc, так и docx),
у других doc, например, созданных в Office 2003, показывает всегда число 1.
А еще часто бывают rtf, там вообще не отображается.
Попробовал способ через vbs, считает долго (т.к. открывает в скрытом виде каждый документ), но посчитало правильно.
Для docx тебе ничего исправлять в скрипте не надо, т.к. во первых проверяются только первые 3 буквы после последней точки в имени файла,
во-вторых, документ открывается точно также как и doc, не смотря на другую его структуру, ведь скрипт берёт значение от самого Word-а,
не анализируя внутренности файла самостоятельно.
Сделал обобщённый вариант vbs, с подсчетом раздельно и в сумме DOC*, XLS*, RTF со сканом рекурсивно (с подкаталогами):
Dim numXDocs, sumXSheets, sumXPages, numWDocs, sumWPages
set oExcel = CreateObject("excel.application")
set oWord = CreateObject("word.application")
set root = CreateObject("scripting.filesystemobject").getfile(wscript.scriptfullname).parentfolder
Analysis(root)
oExcel.Quit: oWord.Quit
set oExcel = Nothing: set oWord = Nothing: set root = Nothing
wscript.echo _
"DOC*, RTF:" & Chr(13) & _
"Всего страниц: " & sumWPages & Chr(13) & "Документов: " & numWDocs & _
Chr(13) & Chr(13) & "XLS*" & Chr(13) & _
"Всего страниц: " & sumXPages & Chr(13) & "Всего листов: " & sumXSheets & Chr(13) & "Документов: " & numXDocs & _
Chr(13) & Chr(13) & "-----------------" & Chr(13) & "Общее:" & Chr(13) & Chr(13) & _
"Страниц: " & sumXPages + sumWPages & Chr(13) & "Документов: " & numXDocs + numWDocs
Sub Analysis(root)
With oExcel
For Each x In root.Files
If LCase(Mid(x.Name, InStrRev(x.Name, ".") + 1, 3)) = "xls" Then
With .workbooks.open(x.Path, , True) 'ReadOnly
numXDocs = numXDocs + 1
sumXSheets = sumXSheets + .sheets.count
For Each sheet in .sheets
sumXPages = sumXPages + (sheet.HPageBreaks.Count + 1) * (sheet.VPageBreaks.Count + 1)
Next
.Close False 'don't save changes
End With
End If
Next
.Quit
End With
With oWord
For Each x In root.Files
ext = LCase(Mid(x.Name, InStrRev(x.Name, ".") + 1, 3))
if ext = "doc" or ext = "rtf" then
With .documents.open(x.Path, , True) 'ReadOnly
numWDocs = numWDocs + 1
sumWPages = sumWPages + .Content.ComputeStatistics(2) 'wdStatisticPages
.Close False 'don't save changes
End With
end if
Next
End With
For Each x in root.SubFolders: Analysis(x): Next
End Sub