Obtenha o “tempo total de edição” do lote de documentos do Word

1

Oi eu gostaria de coletar automaticamente o tempo total de edição de muitos documentos Word .docx localizados na pasta especificada. É mesmo possível, e. através do Powershell para ler essas propriedades do documento do Word?

    
por Dominik Roszkowski 01.12.2016 / 22:23

1 resposta

3

Sim, e se você estiver disposto a cutucar os arquivos internos, você não precisa nem instalar o Word no computador que está cutucando! Documentos do Word são na verdade arquivos ZIP com um monte de pequenos arquivos dentro. Na pasta docProps , há um arquivo app.xml que contém várias propriedades do documento. O tempo total de edição (em minutos) está no elemento <TotalTime> dentro do elemento <Properties> .

Escrevi este script do PowerShell para adicionar os tempos de cada arquivo DOCX no diretório atual:

Add-Type -AssemblyName System.IO.Compression.FileSystem
$totalmins = 0
dir -File | ? {$_.Extension -like '.docx'} | % {
    $zip = [System.IO.Compression.ZipFile]::Open($_.FullName, 'Read')
    $propsentry = $zip.GetEntry('docProps/app.xml')
    If ($propsentry -ne $null) {
        $stream = $propsentry.Open()
        $reader = New-Object System.IO.StreamReader $stream
        $content = $reader.ReadToEnd()
        $xmldoc = [xml]$content
        $totalmins += $xmldoc.Properties.TotalTime
    }
    $zip.Dispose()
}
$totalmins

As partes interessantes usam apenas o % do .NETZipFile classe para pesquisar dentro do documento, então ele converte o conteúdo do arquivo de destino em um documento XML, obtém o número e o adiciona à variável $totalmins , que é impressa no final.

    
por 06.12.2016 / 23:01