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

Создать файл из картинок каждой страницы Word

03.04.2025, 14:27. Показов 4166. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть исходный файл, необходимо создать новый файл, из картинок каждой страницы. Подскажите как можно это сделать ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2025, 14:27
Ответы с готовыми решениями:

Выборка из текста (файл ms word) предложений и копирование в новый файл (ms word) с определенным форматом
Добрый день. Очень нужна помощь в создании макроса. Есть файлы в которых содержатся вопросы и ответы разделенные знаками...

Создаем файл Word из Excel. Как вставить схему из шейпов из Excel в Word в виде рисунка
В excel нарисовал схему. Ее нужно вставлять в документы Word макросом. Как? Схема хитрая. В ней 62 шейпа. 31 шейп изменяет свои размеры,...

Создаем файл Word из Excel. Как вставить схему из шейпов из Excel в Word в виде рисунка продолжаем разговор
Сделал файл excel. В нём создана схема из шейпов, которые сгруппированы. При группировке рисунку автоматически присвоено имя "Group...

32
Модератор
Эксперт MS Access
 Аватар для shanemac51
12219 / 5061 / 813
Регистрация: 07.08.2010
Сообщений: 14,920
Записей в блоге: 4
03.04.2025, 15:12
как-то делала
- примерно 200 страниц
- надо было альбомные страницы повернуть на 90 градусов
- все напечатать в книжном формате со штампами
0
912 / 286 / 57
Регистрация: 01.06.2023
Сообщений: 807
03.04.2025, 17:29
Сохраните как PDF. Если этого мало конвертером преобразуйте PDF в PNG, затем макросом картинки вставьте в документ
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
03.04.2025, 18:21  [ТС]
Есть необходимость это автоматизировать, потому что это не один файл.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12219 / 5061 / 813
Регистрация: 07.08.2010
Сообщений: 14,920
Записей в блоге: 4
03.04.2025, 23:53
Цитата Сообщение от shanemac51 Посмотреть сообщение
как-то делала
- примерно 200 страниц
поищу завтра, может найду код VBA-word
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,244
05.04.2025, 21:05
Лучший ответ Сообщение было отмечено hub2002 как решение

Решение

Цитата Сообщение от hub2002 Посмотреть сообщение
необходимо создать новый файл, из картинок каждой страницы.
Вот примерный код на VBA:
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
32
33
34
35
36
37
38
39
40
41
42
Sub CopyPages2Pics()
       
    Dim rng As Range
    Dim i As Integer, nPages as Integer
    Dim oDoc As Document, nDoc As Document
       
    Set oDoc = ActiveDocument  'исходный документ, в который впендюрен макрос
    Set nDoc = Documents.Add   'новый документ
        
    nPages = oDoc.BuiltInDocumentProperties(wdPropertyPages) 'число страниц
    For i = 1 To nPages Step 1            'создадим в новом документе столько же 
        nDoc.Range.Paragraphs.Add         ' параграфов, сколько страниц в исходном
        With nDoc.Paragraphs.Item(i)      ' причём каждый параграф
          .Range = " "                    ' содержит пустой пробел
          .PageBreakBefore = True        ' и начинается с новой страницы
        End With
    Next
       
    For i = nPages To 1 Step -1 'Идём по исходным страницам снизу
       
         Set rng = oDoc.GoTo(what:=wdGoToPage, which:=wdGoToAbsolute, Count:=i)
         rng.Select  'эта часть кода стырена в сети
       
         Set rng = Selection.Bookmarks("\page").Range
         rng.Select
         rng.Copy
       
         nDoc.Paragraphs(i).Range.Characters.First.Select
         Selection.PasteSpecial , , , , 3 'Вставляем то что в буфере, как КАРТИНКУ
    Next i
    For Each pic In nDoc.Shapes 'для всех вставленных картинок
      pic.WrapFormat.Type = 4   'включим обтекание текстом сверху и снизу
    Next
    nDoc.SaveAs oDoc.Path & "\" & Replace(oDoc.Name, ".doc", "") & "-NEW" 'сохраним новый файл с новым имененм
       
    nDoc.Close
       
    Set rng = Nothing
    Set nDoc = Nothing
    Set oDoc = Nothing
       
End Sub
Цитата Сообщение от hub2002 Посмотреть сообщение
Есть необходимость это автоматизировать, потому что это не один файл.
Если вышеприведённый код подойдёт - надо будет его попробовать на разных вариантах файлов, и довести до ума, с учётом вашей специфики. После чего результат можно перевести в VBS-скрипт, и уже не мыкаться с запихиванием макроса в каждый файл, а класть все в определённую папку и запускать скрипт, получая на выходе набор сконвертированных файлов. Но сначала отладить под ваши особенности.
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
05.04.2025, 23:10  [ТС]
Добрый вечер.
Очень круто.
Спасибо.

Единственно можно пару вопросов:
1) То есть, получается что мы выделяем по страницам, и копируем в буфер каждую страницу, а вставляем эту страницу как картинку? - Я правильно понимаю?
2) А где можно найти как преобразовать макрос в скрипт?
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,244
06.04.2025, 15:22
Цитата Сообщение от hub2002 Посмотреть сообщение
получается что мы выделяем по страницам, и копируем в буфер каждую страницу, а вставляем эту страницу как картинку? - Я правильно понимаю?
Именно так.
Цитата Сообщение от hub2002 Посмотреть сообщение
А где можно найти как преобразовать макрос в скрипт?
И то и то = VB, что сильно облегчает перевод. В VBS надо только открывать файлы Word/Excel, поскольку они изначально не открыты. И надо используемые именованные константы типа wdPropertyPages менять на их значения (в данном случае 14). А в остальном просто копируете код.
Вот например
Или вот

Вышеприведённый код если переписать на VBS получится что-то типа:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
option explicit
  dim wrd, FSO, wDir, wFiles, WF, DocPic, ArhDir
  Set FSO = CreateObject("Scripting.FileSystemObject") 
  wDir = FSO.GetAbsolutePathname("") ' здесь можно написать прямой путь к папке  исходных файлов
  Arhdir = fso.BuildPath(wDir,"ARH") 'либо пишите сюда вашу папку для перемещения обработанных исходных файлов
  DocPic = fso.BuildPath(wDir,"NEW") 'либо пишите сюда вашу папку для файлов с картинками на страницах
  IF NOT fso.FolderExists(ArhDir) Then FSO.CreateFolder ArhDir
  IF NOT fso.FolderExists(DocPic) Then FSO.CreateFolder DocPic
  Set wFiles = CreateObject("Shell.Application").NameSpace(wDir).Items() 'всё что есть в нашей папке
  wFiles.Filter 64, "*.doc*" 'смотрим только на файлы doc*
  if wFiles.Count < 1 Then  wsh.echo "Не *.doc* in: " & wDir:  wsh.quit
  Set wrd = CreateObject("Word.Application")
  wrd.Visible = True'после отладки можно поставить False, чтобы Word запускался в невидимом режиме
  for each WF in wFiles
    MakeDocPic WF.Path
    FSO.MoveFile wf.Path, ArhDir & "\"
  next
  wrd.quit
  Set FSO=Nothing: Set wFiles = Nothing: Set wrd = Nothing
  wsh.echo "Finished"
  wsh.quit
 
Sub makeDocPic(fPath)
  dim oDoc, nDoc, i, npages, pic, rng, tm
  Set oDoc = wrd.Documents.open(fPath)  'исходный документ, в который впендюрен макрос
  Set nDoc = wrd.Documents.Add   'новый документ
        
  nPages = oDoc.BuiltInDocumentProperties(14) 'число страниц
  For i = 1 To nPages Step 1            'создадим в новом документе столько же 
      nDoc.Range.Paragraphs.Add         ' параграфов, сколько страниц в исходном
      With nDoc.Paragraphs.Item(i)      ' причём каждый параграф
        .Range = " "                    ' содержит пустой пробел
        .PageBreakBefore = True        ' и начинается с новой страницы
      End With
  Next
       
  For i = nPages To 1 Step -1 'Идём по исходным страницам снизу
       
       Set rng = oDoc.GoTo(1, 1, i)
       rng.Select  'эта часть кода стырена в сети
       
       Set rng = wrd.Selection.Bookmarks("\page").Range
       rng.Select
       rng.Copy
       tm = NOW+1/86400
       do WHILE NOW() < tm ' могут быть сбои: в момент вставки ещё антивирь не отпустил буфер и надо ждать секунду.
'         doEVENTS
       loop
       nDoc.Paragraphs(i).Range.Characters.First.Select
       wrd.Selection.PasteSpecial , , , , 3 'Вставляем то что в буфере, как КАРТИНКУ
  Next 
    For Each pic In nDoc.Shapes 'для всех вставленных картинок
      pic.WrapFormat.Type = 4   'включим обтекание текстом сверху и снизу
    Next
    nDoc.SaveAs FSO.BuildPath(docPic, FSO.GetBasename(fPath)) 'сохраним новый файл в новую папку
    nDoc.Saved = True   
    nDoc.Close
    oDoc.Saved = True
    oDoc.Close
    Set oDoc = Nothing: Set nDoc = Nothing: Set pic = Nothing: Set rng = Nothing
end sub
1. Сохранить код в отдельную папку на диске в файл с кодировкой ANSI и расширением .vbs
2. Отредактировать переменные wDir, ArhDir, DocPic (если необходимо)
3. Рядом положить doc/docx-файлы
4. Запускать простым тыком по файлу .vbs
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,244
07.04.2025, 09:05
P.S. Но все же советую сначала отладить макрос под вашу специфику. Поскольку та картинка, которая вставляется в word документ через PasteSpecial является картинкой только для Word. Если же у вас планируется потом пересохранять полученный файл в PDF, вы увидите, что текст в нем всё ещё доступен для выделения и копирования. Если же ваше ТЗ не заканчивается на создании нередактируемых word-файлов, а требует, чтобы и в производных от них файлах исходный текст тоже был гедоступен - надо будет включить в цикл ещё и перенос получкнной картинки в Paint, сохранение в JPEG, с последующей вставкой полученного файла на место этой картинки (которая картинка только для Word), и только потом сохранение в PDF. Также при использовании на рабочем месте различных программ, контролирующих передачу данных через буфер обмена, может потребоваться настроить таймауты между копированием в буфер и вставкой из него, чтобы проверка успела завкршиться. Могут быть нюансы с общим доступом к файлам на сетевых ресурсах и т.д. и т.п.
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
04.05.2025, 13:51  [ТС]
Добрый день.
Все это необходимо только в Word. И все работало, но
на файле во вложении возникает ошибка.
И я не понимаю почему?

или там был файл текста, а тут в файле есть картинки ( точнее объекты текста, куда вставлен текст), и из-за этого он не работает?

Хотелось бы понять в чем ошибка?


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Sub aaa1()
'
' aaa1
'
'
 
 
 
       
    Dim rng As Range
    Dim i As Integer, nPages As Integer
    Dim oDoc As Document, nDoc As Document
       
    Set oDoc = ActiveDocument
    Set nDoc = Documents.Add 
        
    nPages = oDoc.BuiltInDocumentProperties(wdPropertyPages) 
    For i = 1 To nPages Step 1         
        nDoc.Range.Paragraphs.Add         '
        With nDoc.Paragraphs.Item(i)      ' 
          .Range = " "                    ' 
          .PageBreakBefore = True         '
        End With
    Next
       
    For i = nPages To 1 Step -1 ' Èäåì ïî èñõîäíûì ñòðàíèöàì ñíèçó
       
         Set rng = oDoc.GoTo(what:=wdGoToPage, which:=wdGoToAbsolute, Count:=i)
         rng.Select  
       
         Set rng = Selection.Bookmarks("\page").Range
         rng.Select
         rng.Copy   ' error
       
         nDoc.Paragraphs(i).Range.Characters.First.Select
         Selection.PasteSpecial , , , , 3 '
    Next i
    For Each pic In nDoc.Shapes '
      pic.WrapFormat.Type = 4   ' 
    Next
'    nDoc.SaveAs oDoc.Path & "" & Replace(oDoc.Name, ".doc", "") & "-NEW" '
       
'    nDoc.Close
       
    Set rng = Nothing
    Set nDoc = Nothing
    Set oDoc = Nothing
       
 
End Sub
Вложения
Тип файла: rar Брюханов в печать.rar (4.98 Мб, 18 просмотров)
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
04.05.2025, 13:52  [ТС]
во вложении, файл в архиве, потому что большой и не убирается. а в макросе помечена строка - на которой возникает ошибка.

мне надо понять - ошибка из-за формата?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12219 / 5061 / 813
Регистрация: 07.08.2010
Сообщений: 14,920
Записей в блоге: 4
04.05.2025, 16:16
Цитата Сообщение от hub2002 Посмотреть сообщение
во вложении, файл в архиве, потому что большой и не убирается
меня удивило другое как вы реализовали печать брошюры
я бы имела нормальный документ формата а5, с нормальным последовательным расположением текста
перевод в брошюру делала бы при печати

в любом случае не вижу слеша в пути файла перед именем
Visual Basic
1
nDoc.SaveAs oDoc.Path & "\" & Replace(oDoc.Name, ".doc", "") & "-NEW" '
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
04.05.2025, 19:40  [ТС]
формат документа должен быть А4.
Проблема не в сохранении файла, а в обработке.
Причем эта обработка работала, я вот не могу понять - почму не работает тут.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12219 / 5061 / 813
Регистрация: 07.08.2010
Сообщений: 14,920
Записей в блоге: 4
04.05.2025, 21:13
Цитата Сообщение от hub2002 Посмотреть сообщение
Причем эта обработка работала, я вот не могу понять - почму не работает тут.
этот файл уже состоит из надписей, остальные видимо имели гладкий текст
Миниатюры
Создать файл из картинок каждой страницы Word  
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
04.05.2025, 22:22  [ТС]
Да, этот документ состоит из надписей, поэтому так не получится его обработать?
А как его можно обоработать?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12219 / 5061 / 813
Регистрация: 07.08.2010
Сообщений: 14,920
Записей в блоге: 4
04.05.2025, 22:40
Цитата Сообщение от hub2002 Посмотреть сообщение
документ состоит из надписей
может преобразовать надписи в рамки
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
04.05.2025, 22:46  [ТС]
если надписи преобразовать в рамки, тогда я так понимаю, изменится форматирование текста?
0
1313 / 527 / 112
Регистрация: 29.03.2016
Сообщений: 1,283
04.05.2025, 22:55
Как сделал я:
1. Распечатал в PDF
2. Пользуя сервис типа https://stirlingpdf.io/ преобразовал PDF в картинки.
3. Разархивировал. (36 картинок)
4. Создал новый WORD документ, настроил страницу, поля.
5. Добавил процедуру в файл WORD и выполнил.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
Sub Макрос1()
    Dim i As Integer
    For i = 1 To 36
        Selection.InlineShapes.AddPicture FileName:="R:\Брюханов в печать_" & i & ".png", _
            LinkToFile:=False, SaveWithDocument:=True
    Next i
End Sub

Получился файлик весом 48+ Mb, сюдой не лезет.
0
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 72
04.05.2025, 23:15  [ТС]
Да, спасибо, я об этом знаю.
Весь смысл в том, чтобы сделать это с помощью макроса, средствами Word.
Результат нужен такой же как Вы написали. с помощью PDF и сервиса, но условно говоря с помощью макроса, который все это сделает.
До, этого мне прислали прям работающий механизм, но в исходном файле не было надписей. И там результат был.
Но теперь в файле есть надписи, и стает вопрос - можно ли сделать это когда в файле есть надписи?
0
1313 / 527 / 112
Регистрация: 29.03.2016
Сообщений: 1,283
04.05.2025, 23:55
Цитата Сообщение от hub2002 Посмотреть сообщение
чтобы сделать это с помощью макроса, средствами Word.
Первые 4 перечисленные мной пункта можно сделать кодом VBA из Word документа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2025, 23:55
Помогаю со студенческими работами здесь

Поиск строк в шаблоне в word и вывод в таблицу в другой файл word
Здравствуйте, требуется помощь! Имеется шаблон документа в word в котором есть три строки, которые нужно кинуть в таблицу в другой файл...

Как написать макрос для автоматической пронумеровки картинок в Word
Никак не получается написать макрос( В документ вставленно несколько картинок, нужно чтобы под каждой из картинок создалась подпись(в...

Поиск картинок в документе Word
1)Как получить список всех картинок что есть в документе? 2)Как бы перетащить такой найденный объект-картинку в PowerPoint презентацию?...

Работа с презентацией (размещение картинок) через Word
Привет всем!Подскажите пожалуйста, у меня задание: надо &quot;Cоздать презентацию PowerPoint на основе набора JPG-картинок, которые лежат в...

Изменить обтекание всех картинок в документе word 2007
Собственно, быть может, кому-то известно, как его массово сменить на &quot;вокруг рамки&quot;? Нашел это, но так и не понял, как сделать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru