Войти

Показать полную графическую версию : doc в docx


Страниц : [1] 2

Sisin
01-06-2017, 12:26
Существует ли возможность командой для Microsoft Word конвертировать doc в docx?

Цель - Сделать bat-файл, помещая который в папку, все файлы doc, находящиеся в папке, конвертировались бы в в docx с удалением исходных doc в корзину.
Необходимость - Файлы docx занимают заметно меньше места.

Iska
01-06-2017, 14:02
Существует ли возможность командой для Microsoft Word конвертировать doc в docx? »
Нет. Но можно попробовать сделать скрипт. Какой версии Office?

Необходимость - Файлы docx занимают заметно меньше места. »
Это сильно зависит от содержимого и используемого форматирования. Если это единственная цель — то лучше не стоит.

Sisin
01-06-2017, 14:38
Какой версии Office? » 2010.

Это сильно зависит от содержимого и используемого форматирования. Если это единственная цель — то лучше не стоит. »
В моем случае стоит. Одну папку вручную переделал 220 Мб -> 23 Мб. Большинство документов однотипные.

greg zakharov
01-06-2017, 15:04
Sisin, doc и docx - принципиально разные форматы. docx - это zip-архив, содержащий файлы стилей, содержимого и так далее, представленные xml-файлами, в то время как doc - не является архивом; это бинарный файл с довольно-таки сложной структурой данных, разобрать которую на "голом" командном языке представляется возможным только в теории. А вот гибридная техника - CMD+WSH - вполне может сослужить службу конвертера doc в docx посредством COM, насколько помню, Word.Application.

yurfed
01-06-2017, 15:35
Это сильно зависит от содержимого и используемого форматирования. »
Да это так, но попробуйте сохранить *.docx в ZIP, RAR по расширению и тд. Вы там увидите кучу xml файликов и прочего мусора. Это окажется обычный архив.
Вот и думайте сами, архивировать свою нужду или оставить всё, как оно есть.

megaloman
01-06-2017, 22:10
Sisin, BoxIn = "Z:\Box_In"
BoxOut = "Z:\Box_Out"

Set RegMaska = New RegExp
RegMaska.Pattern = "^.*\.doc$"
RegMaska.IgnoreCase = True

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Folds = FSO.GetFolder(BoxIn)
Set Files = Folds.Files

Set WD = CreateObject("Word.Application")

With WD

.Visible = True

For Each jF In Files
If RegMaska.Test(jF) Then
FileIn = BoxIn + "\" + FSO.GetBaseName(jF) + ".doc"
FileOut = BoxOut + "\" + FSO.GetBaseName(jF) + ".docx"
If Not FSO.FileExists(FileOut) Then
Call .Documents.Open(FileIn, False, False, False, "", "", False, "", "", 0, "")
Call .ActiveDocument.SaveAs2(FileOut, 12, False, "", True, "", False, False, False, False, False, , , , , , 14)
.ActiveWindow.Close
If FSO.FileExists(FileOut) Then FSO.DeleteFile (FileIn)
Else
MsgBox "Файл" + vbCrLf + FileOut + vbCrLf + "Уже существует" + vbCrLf + vbCrLf + "поэтому файл" + vbCrLf + FileIn + vbCrLf + "Не преобразовываем"
End If
End If
Next
.Quit

End With
Пропишите свои пути для папок. Входная и выходная папки могут совпадать.

Sisin
02-06-2017, 11:40
Пропишите свои пути для папок. Входная и выходная папки могут совпадать. »
Благодарю. А подскажите, пожалуйста, как его сделать, так чтобы скрипт класть в папку с doc, запускать, и все бы doc в папке со скриптом конвертировались в docx с удалением doc?

megaloman
02-06-2017, 14:55
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

Set Arg = WScript.Arguments

If Arg.Count <> 0 Then
BoxIn = Arg(0)
Else
BoxIn = Shell.CurrentDirectory
End If

If Right(BoxIn,1) <> "\" Then BoxIn=BoxIn+"\"

If Not FSO.FolderExists(BoxIn) Then
MsgBox "Папка" + vbCrLf + vbCrLf + BoxIn + vbCrLf + vbCrLf + "не найдена"
WScript.Quit
End If

BoxOut = BoxIn

Set RegMaska = New RegExp
RegMaska.Pattern = "^.*\.doc$"
RegMaska.IgnoreCase = True

Set Folds = FSO.GetFolder(BoxIn)
Set Files = Folds.Files

Set WD = CreateObject("Word.Application")

With WD

.Visible = True

For Each jF In Files
If RegMaska.Test(jF) Then
FileIn = BoxIn + FSO.GetBaseName(jF) + ".doc"
FileOut = BoxOut + FSO.GetBaseName(jF) + ".docx"
If Not FSO.FileExists(FileOut) Then
Call .Documents.Open(FileIn, False, False, False, "", "", False, "", "", 0, "")
Call .ActiveDocument.SaveAs2(FileOut, 12, False, "", True, "", False, False, False, False, False, , , , , , 14)
.ActiveWindow.Close
If FSO.FileExists(FileOut) Then FSO.DeleteFile (FileIn)
Else
MsgBox "Файл" + vbCrLf + FileOut + vbCrLf + "Уже существует" + vbCrLf + vbCrLf + "поэтому файл" + vbCrLf + FileIn + vbCrLf + "Не преобразовываем"
End If
End If
Next
.Quit

End With Этот вариант скрипта также работает, если путь папки передать при вызове скрипта как параметр (если в пути есть пробелы - путь передавать в "кавычках")

Iska
02-06-2017, 15:19
как его сделать, так чтобы скрипт класть в папку с doc, запускать, »
Не делайте так. Это неправильный путь. Правильный путь — передавать путь к папке параметром скрипта. В том числе это подразумевает возможность просто перетащить папку на скрипт в Проводнике.

megaloman
02-06-2017, 15:25
Iska, "В лоб" у меня не получилось: создал на раб столе ярлык на скрипт, пытаюсь затянуть на него папку - попытка копирования.
Получилось по другому: создал ярлык на
C:\Windows\System32\wscript.exe
затем изменил его - добавил параметр - полный путь скрипта
C:\Windows\System32\wscript.exe "Z:\Soft_In\я170602.vbs"
и уже когда затягиваю папку на этот ярлык - всё прекрасно работает.
Может быть можно сделать прямее?

Iska
02-06-2017, 15:25
megaloman, можете посмотреть в своей версии Office в Браузере объектов, остался ли у класса Document метод .Save() (может быть и в скрытых), или же он «deprecate»?

megaloman
02-06-2017, 15:33
Iska, Вы этого хотели?

Iska
02-06-2017, 15:48
Ага, спасибо.

Я, балбес, к сожалению, ошибся в методе. Я хотел спросить про старый метод .SaveAs(). Сделайте ПКМ на правом списке Members of… и выберете Show hidden members. Есть он там?

megaloman
02-06-2017, 16:02
Смотрите :)
У меня Office 2010

Iska
02-06-2017, 22:10
megaloman, большое спасибо! Таки не совсем deprecate, не совсем… Оставили пока в скрытых :). А .SaveAs2000, видимо, псевдоним к нему, что ли?! Ладно, если у меня когда-нибудь появится Office >=2007 — пощщупаю :).

Iska
03-06-2017, 13:10
Iska, "В лоб" у меня не получилось: создал на раб столе ярлык на скрипт, пытаюсь затянуть на него папку - попытка копирования. »
Создал скрипт .vbs. Создал ярлык на него на Рабочем столе. Перетаскиваю папку из Проводника — скрипту нормально передаётся полный путь к ней. Перетаскивание нескольких папок зараз, ярлык на скрипт не на Рабочем столе — всё работает по-прежнему. Windows 7 x64.

Sisin
05-06-2017, 11:13
Этот вариант скрипта также работает, если путь папки передать при вызове скрипта как параметр (если в пути есть пробелы - путь передавать в "кавычках") »

Господа, этот скрипт работает.

Не делайте так. Это неправильный путь. Правильный путь — передавать путь к папке параметром скрипта. В том числе это подразумевает возможность просто перетащить папку на скрипт в Проводнике. »

Эта фраза относится к нему (скрипту)???

Iska
05-06-2017, 11:27
Эта фраза относится к нему (скрипту)??? »
Эта фраза относится к процитированному там. Могу повторить ту цитату (ключевое выделил):
как его сделать, так чтобы скрипт класть в папку с doc, запускать, »

Sisin
05-06-2017, 11:47
Этот вариант скрипта также работает, если путь папки передать при вызове скрипта как параметр (если в пути есть пробелы - путь передавать в "кавычках") »

Прошу прощения за навязчивость, но можно ли сделать так, чтобы скрипт еще изменял в исходящем docx поля автор, ключевые слова, название (эти поля показываются, если вызвать окно "сохранить как")?

Iska
05-06-2017, 13:09
Можно. Опишите, что на что, по каким принципам изменять.




© OSzone.net 2001-2012