Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/79: Рейтинг темы: голосов - 79, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 5

Пакетная обработка *.doc с рисунками внутри. Уменьшить качество рисунков.

16.03.2012, 16:11. Показов 16013. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поискал на форуме, поискал в Интернете,
Нашёл только пакетную обработку *.Doc и изменение масштабов рисунка.

А задача такая:
Есть примерно 2000 целевых файлов в папке. Там в *.doc файлах есть рисунки, которые необходимо сжать без сильной потери качества. Вручную это делается легко, но рисунков слишком много.

Word 2007. Или 2010.

Поможете?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2012, 16:11
Ответы с готовыми решениями:

Плохое качество рисунков в TImageList
Собственно я недоволен компонентом TImageList . Точнее его ограничениями на размеры хранимых в нем рисунков а) однотипность размеров...

Есть книга которую я отсканировал, но после сканирования качество рисунков пропадает
Есть книга который я сканировал, но после сканирование качество рисунки пропадает то есть немножко серовата. Хочу создать прогу который...

Пакетная обработка
Привет всем ! У меня созрел вопрос следующего характера: во время пакетной обработки в Fhotoshop, ну допустим изменения размера, во время...

37
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
16.03.2012, 16:21
corvus_ukhta,
а как вручную сжимаете?
Надо будет писать тогда код на VBA.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 01:25
Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Вручную это делается легко
Цитата Сообщение от Busine2012 Посмотреть сообщение
а как вручную сжимаете?
присоединяюсь к вопросу...

как вариант:

.doc -> .docx -> .zip -> unzip\word\media\*.jpg -> [пакетная обработка] -> .zip -> .docx
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 5
19.03.2012, 09:29  [ТС]
Простите за долгий ответ, был занят.

Надо открыть каждый документ и щёлкнуть на замечательную кнопочку "Сжать документ".

Скрин из 10-го, но смысл тот же. Находится во вкладке "Работа с рисунками"



Выделено красным квадратом.

Там есть опции
- применить ко всем рисункам документа
- для печати (200 dpi)
-Сжать рисунки
-Удалить обрезанные области
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 10:47
возможно, существует и более простой способ, но приведённый мною вполне рабочий:
  1. с помощью макроса VBA осуществляем пакетную конвертацию .doc -> .docx;
  2. групповое переименование .docx -> .zip (.docx – это на самом деле zip-файл);
  3. архиватором распаковываем каждый архив в отдельную папку;
  4. любым скриптом собираем данные о файлах изображений в папках word\media;
  5. информацию о путях к графическим файлам собираем в текстовый документ;
  6. текстовый документ подаём на вход пакетной обработки файлов IrfanView;
  7. в параметрах указываем перезапись оригинальных файлов;
  8. результаты архивируем в отдельные архивы (тоже понадобится скрипт);
  9. групповое переименование .zip -> .docx;
не элементарно, но вполне реализуемо... весь процесс, по сути, представляет из себя один большой скрипт...
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 11:19
Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Надо открыть каждый документ и щёлкнуть на замечательную кнопочку "Сжать документ".
а где находится кнопка Сжать документ?


Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Там есть опции
- применить ко всем рисункам документа
- для печати (200 dpi)
-Сжать рисунки
-Удалить обрезанные области
и какую опцию нужно применить?

Напишите от А до Я, как вы делаете вручную, например:
  1. открываю документ;
  2. вкладка такая-то, группа такая-то, кнопка такая-то.


Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Есть примерно 2000 целевых файлов в папке.
а что значит целевых, какие ещё бывают файлы?


Цитата Сообщение от Buckminster Посмотреть сообщение
.doc -> .docx -> .zip -> unzip\word\media\*.jpg -> [пакетная обработка] -> .zip -> .docx
что за [пакетная обработка]?
Вроде вопрос темы и заключается в том, что нужно эту пакетную обработку сделать.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 11:40
Цитата Сообщение от Busine2012 Посмотреть сообщение
что за [пакетная обработка]?
Вроде вопрос темы и заключается в том, что нужно эту пакетную обработку сделать.
пакетная обработка графических файлов из папок word\media zip-архивов docx-файлов...
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 11:41
Цитата Сообщение от Buckminster Посмотреть сообщение
пакетная обработка графических файлов из папок word\media zip-архивов docx-файлов...
так человек и спрашивает, как сделать эту пакетную обработку.
0
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 5
19.03.2012, 12:11  [ТС]
Наверно тороплюсь и непонятно выражаюсь.
Входные данные

Есть структура папок которая называется "Архив". В ней много подпапок. В них находятся различные файлы, например *.pdf, *.dwg, *.doc
Файлы кроме *.doc нас не интересуют.

В файлах *.doc, зачастую (почти во всех), много фото и сканированных протоколов. Они иногда обрезаны(т.е. отображена только часть рисунка).

Задача:
Прошерстить всё дерево подпапок и сжать документы *.doc(Т.е. просто сжать рисунки в них).

Если вручную это делать, то выглядит это так:
1) Открываем документ
2) выделяем рисунок, кликнув на него
3) Щёлкаем на ленту меню(вкладку) "Работа с рисунками"
4) Щёлкаем на кнопку "Сжать рисунки"
и выбираем опции, как на скриншоте




* Там на фото ошибка. Нужно применять сжатие для всех рисунков в документе...
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 13:49
Цитата Сообщение от Busine2012 Посмотреть сообщение
так человек и спрашивает, как сделать эту пакетную обработку.
возможно, я тоже не совсем ясно выразился: после конвертации имеющихся doc-файлов в docx-формат и разархивирования docx-файлов осуществляется пакетная обработка (например, с помощью IrfanView) графических файлов, хранящихся на диске в папках word\media, соответствующих конкретным исходным документам... такая пакетная обработка сама по себе осуществляется элементарно, но требует предварительной подготовки и последующей обработки полученных результатов (обратное запаковывание в docx-файлы)... впрочем, я согласен с тем, что я описал саму идею, но не предложил конкретной реализации в виде готовых скриптов... также я неявно предполагал, что все исходные ("целевые") doc-файлы уже имеются (например, лежат в одной папке)...

p.s. впрочем, реализация через ExecuteMso "PicturesCompress" и SendKey, наверное, действительно проще... без лишней мороки с конвертацией... например, такой код:

Visual Basic
1
2
3
4
5
6
Sub CompressPic()
 
SendKeys "оп~"
Application.CommandBars.ExecuteMso "PicturesCompress"
 
End Sub
применяет сжатие ко всем рисункам документа в разрешении для печати (200 точек на дюйм)...

осталось только
Цитата Сообщение от corvus_ukhta Посмотреть сообщение
Прошерстить всё дерево подпапок
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 14:08
Buckminster,
просматривать все папки можно только с помощью рекурсивной процедуры.
Я сейчас буду код писать.
У меня только не совпадает диалоговое окно, рисунок которого выложен автором темы, с диалоговом окном, которое у меня на компьютере.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 14:12
Цитата Сообщение от Busine2012 Посмотреть сообщение
не совпадает диалоговое окно, рисунок которого выложен автором темы, с диалоговом окном, которое у меня на компьютере
в режиме совместимости (doc) окно отличается от стандартного (docx)...
1
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 14:15
Цитата Сообщение от Buckminster Посмотреть сообщение
в режиме совместимости (doc) окно отличается от стандартного (docx)...
да, точно.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 14:20
Цитата Сообщение от Busine2012 Посмотреть сообщение
просматривать все папки можно только с помощью рекурсивной процедуры
не только... например, dir "path\*.doc" /s /b генерирует список имён файлов с учётом всех подкаталогов... или FileSearch с SearchSubFolders
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 14:28
Цитата Сообщение от Buckminster Посмотреть сообщение
например, dir "path\*.doc" /s /b
напишите пример кода на VBA.
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 15:03
Цитата Сообщение от Busine2012 Посмотреть сообщение
напишите пример кода на VBA

Code
1
2
3
  ChDir SearchPath
  cmd = " /c dir *.doc /s /b > dir.txt"
  Shell Environ("ComSpec") & cmd
или

Visual Basic
1
2
3
4
5
6
7
8
9
With Application.FileSearch
  .LookIn = SearchPath
  .SearchSubFolders = True
  .FileType = msoFileTypeWordDocuments
   List = ""
   For i = 1 To .FoundFiles.Count
      List = List & .FoundFiles(i)
   Next i
End With
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 15:13
Цитата Сообщение от Buckminster Посмотреть сообщение
With Application.FileSearch
а что за Application?
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
19.03.2012, 15:21
Цитата Сообщение от Busine2012 Посмотреть сообщение
а что за Application?
хм, т.е. как это что за Application? вот:
Application Object: Represents the Microsoft Word application
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
19.03.2012, 15:30
Buckminster,
а вы тестировали код?
0
 Аватар для Buckminster
1032 / 703 / 66
Регистрация: 30.01.2012
Сообщений: 714
20.03.2012, 09:49
Цитата Сообщение от Busine2012 Посмотреть сообщение
а вы тестировали код?
согласен, это рабочий код под Word 2003 и начиная с Word 2007 у объекта Application действительно отсутствует свойство FileSearch...
приведённый код для Shell прекрасно решает ту же задачу...

p.s. эскиз кода:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Sub BatchCompress()
  
  dirpath = "С:\Temp\"                                          'целевой каталог
  driveletter = Left(dirpath, 1)                                'диск
  ChDrive driveletter                                           'устанавливаем диск
  ChDir dirpath                                                 'устанавливаем путь
  cmd = " /c dir *.doc /s /b > dir.txt"                         'формируем строку для dir
  Shell Environ$("comspec") & cmd, vbHide                       'получаем список doc-файлов
 
  MsgBox "Dir List Created!"
 
  dirfile = dirpath & "dir.txt"                                 'путь к списку файлов (DOS CP866)
  Set dirlist = Documents.Open(dirfile, , , , , , , , , , msoEncodingOEMCyrillicII) 'открываем список
  For i = 1 To dirlist.Paragraphs.Count                         'перебираем строки списка
    With dirlist.Paragraphs(i).Range            
      fn = .Text
      fn = Replace(fn, vbCr, "")                                'удаляем CR/LF
      fn = Replace(fn, vbLf, "")
      Set od = Documents.Open(fn)                               'открываем doc-файл
      SendKeys "оп~"                                            'устанавливаем опции компрессии
      od.Application.CommandBars.ExecuteMso "PicturesCompress"  'выполняем сжатие рисунков
      od.Save                                                   'сохраняем файл
      od.Close                                                  'закрываем файл
    End With
  Next
 
  MsgBox "Compressing Finished!"
 
  dirlist.Close                                                 'закрываем список файлов
  
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2012, 09:49
Помогаю со студенческими работами здесь

Пакетная обработка
Ребят задумка такая....открываю файл docx, запускаю макрос. Он копирует в буфер картинки с листа, затем запускает...

Пакетная обработка треков
Всем привет. Нужно ПО, которое будет накладывать нужный мне звуковой файл на MP3 файлы. Допустим: имеется 20 MP3 песен (до 5 минут),...

Пакетная обработка файлов
Нужно переводить большие группы файлов *.txt *.hmtl *.php и т.д. из кодировки ANSI в UTF-8 с сохранением оригинальных файлов (скажем с...

Кроп и пакетная обработка
Привет форумчане, с прошедшим праздником :) Учусь делать HDR панорамы. Нужно выравнять и кадрировать фотки, снятые с эксповилкой. В...

Пакетная конвертация PDF в DOC и печать любых документов на PDF-принтере
В первую очередь извините, если создал тему в неположенном разделе, но к сожалению найти близкий по тематике раздел мне не удалось =(. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru