becker1234
Goto Top

Doc Dokumente leicht in .docx umwandeln

Hallo zusammen,

im Zuge einer Sicherheitsanpassung unserer Firewall, müssen alle Office Dokumente der Mitarbeiter künftig im DOCX Format abgespeichert werden.

Ab Office 2007 werden diese das ja standardmäßig, jedoch hatten wir vor geraumer Zeit noch Office 2003 im Einsatz, welches dies nicht konnte...somit haben wir viele alte Dateien im DOC Format.

Die User sollen nun (da es sich um X-viele Dateien handelt), selbständig die Dateien, die nach Extern versendet werden, konvertieren.

Derzeit haben wir Office 2010 im Einsatz. Es gibt ja die tolle Möglichkeit, in der Datei unter "Datei" -> "Konvertieren" direkt eine DOCX-Datei aus der DOC-Datei zu erstellen.

Unter Excel klappt das perfekt! Man klickt auf "Konvertieren", kann die Datei schließen und automatisch wird die alte DOC-Datei gelöscht und die Datei wird als DOCX-Datei gespeichert...ein Traum!

Natürlich wäre es scheinbar zu einfach und bequem, wenn es ebenfalls problemlos für Word und Power Point gelten würde...

Bei den beiden Programmen hat man zwar auch den Button "Konvertieren", jedoch muss man dort nach der Umwandlung ein "Speichern unter" Dialogfenster bestätigen und die alte DOC-Datei nachher von Hand löschen...

Sicher ist dies machbar, jedoch reden wir von teils sehr unerfahrenen Usern, denen ich jeden Klick ersparen möchte...außerdem haben einige Kollegen vermutlich sehr viele DOC-Dateien, da machen ein paar Klicks pro Dokument eine Menge aus...

Frage:
Muss man unter Word und Power Point etwas einstellen, damit es genauso reibungslos wie bei Excel funktioniert?
Warum ist es nicht möglich bei allen drei Office Produkten den gleichen Ablauf zu haben *seufzer Richtung Microsoft*

Ich suche parallel schon überall, aber scheinbar hat außer mir keiner das Problem oder es stört keinen so wie mich.

Vielen Dank im Voraus für Tipps!

Content-Key: 365694

Url: https://administrator.de/contentid/365694

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 22.02.2018 aktualisiert um 09:53:34 Uhr
Goto Top
Wie wäre es mit einem Macro?

Sub DOCXspeichernAlteDOCloeschen()
ActiveDocument.SaveAs FileName:=sDocName, _
  FileFormat:=wdFormatDocument

sFileToDelete = sDocName

'***Alternative 1***  
sDocName = Left(sOrigName, Len(sOrigName) - 4)
sDocName = sDocName & ".docx"  
ActiveDocument.SaveAs FileName:=sDocName, _
  FileFormat:=wdFormatDocument

'***Alternative 2***  
sNameParts = Split(sOrigName, ".")  
sDocName = sNameParts(0) & ".docx"  
ActiveDocument.SaveAs FileName:=sDocName, _
  FileFormat:=wdFormatDocument


'*** alte Datei löschen ***  
If FileExists(sFileToDelete) Then 'See above            
      ' First remove readonly attribute, if set  
      SetAttr sFileToDelete, vbNormal          
      ' Then delete the file  
      Kill sFileToDelete
End Sub

Ich habe zwei Alternativen eingebaut. Entscheide Dich, welche Du nehmen willst und kommentiere die andere vollständig aus oder entferne den entsprechenden Block.

Ich habe das Macro auf die Schnelle zusammengebaut und NICHT getestet!
Also teste in einer gesicherten Umgebung!

Wenn es funktioniert, kannst Du das Macro als Schaltfläche in WORD in einer eigenen Leiste einrichten.
So mache ich das bei uns auch.
Mitglied: em-pie
em-pie 22.02.2018 um 09:57:07 Uhr
Goto Top
Moin,

hätte es auch als Makro/ Batch umgesetzt:
https://www.google.de/search?q=word+batch+convert+doc+to+docx

Hier findest du einiges dazu...

Gruß
em-pie
Mitglied: colinardo
colinardo 22.02.2018, aktualisiert am 31.01.2019 um 10:29:15 Uhr
Goto Top
Servus @Becker1234 ,
ich mach das immer mit meinem Powershell-Skript für alte Office-Dokumente:

Das Skript verarbeitet die folgende alten Office-Dateierweiterungen für Excel, Word und Powerpoint
'*.xls','*.xlt','*.doc','*.dot','*.ppt','*.pot','*.pps'
und wandelt sie in Ihre entsprechenden neuen Verwandten um (unter Beachtung ob mit oder ohne Makroprojekt). Ein installiertes Office ist Voraussetzung.

Als Parameter anzugeben sind Quellordner (wird rekursiv durchsucht) und ein Zielordner in dem die konvertierten Dateien mit der gleichen Ordnerstruktur wie in der Quelle abgelegt werden.

Beispiel:
.\OfficeDocumentConverter.ps1 "D:\Dokumente" "D:\Konvertiert"

Viel Spaß.
<# 
    Office Document-Format Converter
#>

param(
    [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$foldersource,
    [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()][string]$foldertarget
)

if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}  

# ==== GLOBAL VARS ====
$valid_extensions = '*.xls','*.xlt','*.doc','*.dot','*.ppt','*.pot','*.pps'  
$mpar = [System.Reflection.Missing]::Value
# =====================

# Create output directory
if(!(Test-Path $foldertarget)){md $foldertarget -Force | out-null}

# enum all office files in source with recursive search
$files = gci $foldersource -Recurse -Force -File -Include $valid_extensions
$files_excel = $files | ?{$_.Extension -match '\.(xls|xlt)$'}  
$files_word = $files | ?{$_.Extension -match '\.(doc|dot)$'}  
$files_powerpoint = $files | ?{$_.Extension -match '\.(ppt|pot|pps)$'}  

# ====== EXCEL ========

if ($files_excel){
    write-host "Processing EXCEL Workbooks:" -F White -B Green  
    
    # Prepare Excel for conversion
    $xl = New-Object -Com Excel.Application
    $xl.DisplayAlerts = $false
    $xl.Screenupdating = $false
    $xl.Visible = $false

    
    # For each file
    foreach($file in $files_excel){
        write-host "Converting '$($file.Fullname)' ... " -NoNewline -F Green  
        # generate and create targetfolder for file
        $targetfolder = $file.Directory.Fullname -replace "^$([regex]::escape($foldersource))",$foldertarget  
        if(!(Test-Path $targetfolder)){md $targetfolder -Force | out-null}
        try{
            $wb = $xl.Workbooks.Open($file.Fullname,$false,$true)
            # file has macroproject ?
            $macroproject = $wb.HasVBProject
            $targetformat = '.xlsx'  
            $format = 51
            # determine file extension and set format number
            switch($file.Extension){
                '.xls' {  
                    $targetformat = @{$true='.xlsm';$false='.xlsx'}[$macroproject]  
                    $format = @{$true=52;$false=51}[($targetformat -like '*m')]  
                }
                '.xlt' {  
                    $targetformat = @{$true='.xltm';$false='.xltx'}[$macroproject]  
                    $format = @{$true=53;$false=54}[($targetformat -like '*tm')]  
                }
            }
            # new filename in targetdirecory
            $targetfile = Join-Path $targetfolder ($file.Basename + $targetformat)
                    
            # Save file as new format
            $wb.SaveAs($targetfile,$format) | out-null
            if (Test-Path $targetfile){write-host 'OK.' -F Green}  
        }catch{
            # Error occured
            write-error "Error converting file '$($file.Fullname)': $($_.Exception.Message)"  
        }finally{
            # close workbook
            if ($wb){$wb.Close($false) | out-null}
        }
    }
    # Quit Excel and tidy up
    $xl.DisplayAlerts = $true
    $xl.Screenupdating = $true
    $xl.Quit() | out-null
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($xl) | out-null
}

# ====== WORD ========

if ($files_word){
    write-host "Processing WORD documents:" -F White -B Green  
    # Prepare Word for conversion
    $word = New-Object -Com Word.Application
    $word.DisplayAlerts = 0
    $word.Screenupdating = $false
    $word.Visible = $false
    
    # For each file
    foreach($file in $files_word){
        write-host "Converting '$($file.Fullname)' ... " -NoNewline -F Green  
        # generate and create targetfolder for file
        $targetfolder = $file.Directory.Fullname -replace "^$([regex]::escape($foldersource))",$foldertarget  
        if(!(Test-Path $targetfolder)){md $targetfolder -Force | out-null}
        try{
            $doc = $word.Documents.Open($file.Fullname,$false,$true)
            # file has macroproject ?
            $macroproject = $doc.HasVBProject
            $targetformat = '.docx'  
            $format = 12
            # determine file extension and set format number
            switch($file.Extension){
                '.doc' {  
                    $targetformat = @{$true='.docm';$false='.docx'}[$macroproject]  
                    $format = @{$true=13;$false=12}[($targetformat -like '*m')]  
                }
                '.dot' {  
                    $targetformat = @{$true='.dotm';$false='.dotx'}[$macroproject]  
                    $format = @{$true=15;$false=14}[($targetformat -like '*tm')]  
                }
            }
            # new filename in targetdirecory
            $targetfile = Join-Path $targetfolder ($file.Basename + $targetformat)
            # Convert to new format and enable all features
            $doc.Convert()
            # Save file as new format
            $doc.SaveAs2([ref][system.object]$targetfile,[ref]$format)
            if (Test-Path $targetfile){write-host 'OK.' -F Green}  
        }catch{
            # Error occured
            write-error "Error converting file '$($file.Fullname)': $($_.Exception.Message)"  
        }finally{
            # close document
            if ($doc -ne $null){$doc.Close($false)}
        }
    }
    # Quit Word and tidy up
    $word.DisplayAlerts = -1
    $word.Screenupdating = $true
    $word.Quit() | out-null
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($word) | out-null
}

# ====== POWERPOINT ========

if ($files_powerpoint){
    write-host "Processing POWERPOINT presentations:" -F White -B Green  
    # Prepare Word for conversion
    $pp = New-Object -Com Powerpoint.Application
    $pp.DisplayAlerts = 1
    
    # For each file
    foreach($file in $files_powerpoint){
        write-host "Converting '$($file.Fullname)' ... " -NoNewline -F Green  
        # generate and create targetfolder for file
        $targetfolder = $file.Directory.Fullname -replace "^$([regex]::escape($foldersource))",$foldertarget  
        if(!(Test-Path $targetfolder)){md $targetfolder -Force | out-null}
        try{
            $presentation = $pp.Presentations.Open($file.Fullname,$true,$mpar,0)
            # file has macroproject ?
            $macroproject = $presentation.HasVBProject
            $targetformat = '.pptx'  
            $format = 12
            # determine file extension and set format number
            switch($file.Extension){
                '.ppt' {  
                    $targetformat = @{$true='.pptm';$false='.pptx'}[$macroproject]  
                    $format = @{$true=25;$false=24}[($targetformat -like '*m')]  
                }
                '.pot' {  
                    $targetformat = @{$true='.potm';$false='.potx'}[$macroproject]  
                    $format = @{$true=27;$false=26}[($targetformat -like '*tm')]  
                }
                '.pps' {  
                    $targetformat = @{$true='.ppsm';$false='.ppsx'}[$macroproject]  
                    $format = @{$true=29;$false=28}[($targetformat -like '*sm')]  
                }
            }
            # new filename in targetdirecory
            $targetfile = Join-Path $targetfolder ($file.Basename + $targetformat)
                    
            # Save file as new format
            $presentation.SaveAs([ref][system.object]$targetfile,[ref]$format)
            if (Test-Path $targetfile){write-host 'OK.' -F Green}  
        }catch{
            # Error occured
            write-error "Error converting file '$($file.Fullname)': $($_.Exception.Message)"  
        }finally{
            # close presentation
            if ($presentation){$presentation.Close() | out-null}
        }
    }
    # Quit Powerpoint and tidy up
    $pp.DisplayAlerts = 2
    $pp.Quit() | out-null
    [System.Runtime.InteropServices.Marshal]::ReleaseComObject($pp) | out-null
}
Grüße Uwe

-edit- 31.01.2019 - Fehlerkorrektur damit Kompatibilitätsmodus nach der Konvertierung nicht mehr besteht.
Mitglied: Becker1234
Becker1234 27.02.2018 um 08:12:25 Uhr
Goto Top
Hallo zusammen,

erstmal danke für die schnelle und Ausführliche Hilfe!

Ich teste das mit dem Makro mal, muss allerdings schauen wann ich dazu kommen.

In der Zwischenzeit vll. auch ein Lösungsansatz von mir:

Es gibt ein tolles kostenloses Tool namens b2xtranslator.

Das Tool ist klasse, die .msi Datei kann man per Softwareverteilung an alle Rechner geben, ohne das der User was davon merkt. Nachher hat er (wenn er rechtsklick auf eine Datei macht) ein Menü, welches Ihm die Möglichkeit gibt Word, Excel und PP Dateien zu konvertieren.

Leider klappt das Tool nicht immer 100%tig...wäre sonst auch zu schön.

Ich teste aber das Tool noch ein wenig und auch eure Vorschläge!
Mitglied: nobi
nobi 29.01.2019 um 19:51:38 Uhr
Goto Top
Hallo Uwe, super Script es geht prima.
Ich habe da noch ne Frage zum Kopiervorgang in die Neue Struktur, was mus ich anpassen damit auch schon konvertierte Dateien sich in der neuen Struktur kopieren.

Des weiteren möchte ich auch in den neuen Dateien den Kompatibilitätsmodus bereinigen.
Geht das ??

Gruß
Norbert