Имя: Пароль:
1C
1С v8
Word.Application - сжатие рисунков
,
0 Necessitudo
 
26.03.15
12:21
Всем привет! Через ком-объект делаю документ, сохраняю его как docx. Проблема в том что в нем много картинок и файлик на выходе получается большой. Если интерактивно сохранять документ, то там есть кнопочки в подменю "Сжатие рисунков":
https://www.dropbox.com/s/p0kzjul8gf4rrj3/картинка1.png?dl=0
https://www.dropbox.com/s/pyancv8goml2qc5/картинка2.png?dl=0

Как достучаться до этих методов программно?
1 Cube
 
26.03.15
12:24
1). Начать запись макроса.
2). Сделать всё вручную.
3). Остановить запись макроса.
4). Скопипастить и подкорректировать.
5). Отхлебнуть чая, откусить булку.
2 sFAQer
 
26.03.15
12:28
(1) 5. повторять пока не получится...
3 Necessitudo
 
26.03.15
13:23
(1) Черт, я про макросы забыл. Спасибооооо!
4 dk
 
26.03.15
13:49
достал попкорн
5 Necessitudo
 
26.03.15
14:18
(4) Ага, нифига не взлетает.

Получил макрос
ChangeFileOpenDirectory "C:\Users\odubrovin\AppData\Local\Temp\"
    ActiveDocument.SaveAs2 FileName:="????? ?.?. ??????? ????222.docx", _
        FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=14

Выполняю его - все хорошо, все сжимается.
Продублировал для 1С:

ПутьКФайлу = КаталогВременныхФайлов()+РаботаСФайлами.УдалитьЗапрещенныеСимволыИмени(Строка(Контрагент))+".docx";
NewDoc.SaveAs2(ПутьКФайлу, 12, False, "", True, "", False,False, False, False, False, 14);
6 Necessitudo
 
26.03.15
14:18
(5)+ Все равно получается как и раньше несжатый файл.
7 ЧеловекДуши
 
26.03.15
14:29
(6) А где код вызова макроса?
Я чет заметил только запись :)
8 dk
 
26.03.15
14:39
не ловится макросом это <....> сжатие (
9 ЧеловекДуши
 
26.03.15
14:42
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
10 ЧеловекДуши
 
26.03.15
14:43
11 dk
 
26.03.15
14:46
(10) это для 2003-го наверно
в 2010 поменяли все
12 dk
 
26.03.15
14:49
к сожалению так и не победил программное сжатие
более менее сжимает если в бинарный вариант сохранять
13 Necessitudo
 
26.03.15
15:49
(10) Я так и сделал кстати.
(11) В 2010 тоже работает, правда показывает диалоговое окно, которое я побороть не смог.
14 Necessitudo
 
26.03.15
15:54
(13)+ для потомков
WordApplication.CommandBars.ExecuteMso("PicturesCompress");
15 dk
 
03.04.15
15:12
вернемся к теме таки кто нить победил полностью программное сжатие картинок на 2010 офисе?
16 dk
 
07.04.15
14:07
пишу простой код

Sub BatchCompress()
Dim od As Workbook

      Set od = Workbooks.Open("C:\Прайсы\2\Образец.xls")
      SendKeys "оИ~"                                            'устанавливаем опции компрессии
      od.Application.CommandBars.ExecuteMso "PicturesCompress"  'выполняем сжатие рисунков
      od.Save                                                   'сохраняем файл
      od.Close                                                  'закрываем файл
  
End Sub

и нифига не сжимает в 2010
открывает тупит но результата нет
даже окно сжатия вроде как открывается но ....
17 ЧеловекДуши
 
07.04.15
14:19
(16) Ваш вариант, Данила?
18 dk
 
07.04.15
14:21
пока нет варианта - просто народ пишет что решение есть, но пока не вижу (
19 ЧеловекДуши
 
07.04.15
14:24
(18) Может оно сжимает BMP, а вы еще раз JPG сжать пытаетесь :)
20 ЧеловекДуши
 
07.04.15
14:25
(18) Так то вариант есть. Разобрать файл, сжать картинки. И собрать его обратно :)
21 Гёдза
 
07.04.15
14:27
может проще самому сжать до ставки в ворд, чтоб наверняка
22 Гёдза
 
07.04.15
14:27
юзать имэйдж мэджик
23 Гёдза
 
07.04.15
14:28
А в макросе то какая функция?
24 Necessitudo
 
07.04.15
14:29
(23) А в макросе это не записывалось.
25 Necessitudo
 
07.04.15
14:30
(16) У меня окно было доступно - и при максимальном варианте сжималось с 36 мегов до 2.9. Все картинки изначально в jpg конечно.
26 ЧеловекДуши
 
07.04.15
14:30
(21) Скорей всего, тогда придется нанимать сжимальщика. Либо работать по сжатию файлов Word на той же ставке :)
27 dk
 
07.04.15
14:30
если вручную сжать то сжимает будь здоров
28 ЧеловекДуши
 
07.04.15
14:31
(23) Её нет. 1С не соизволила сей момент автоматизировать :)
29 Necessitudo
 
07.04.15
14:31
(28) Чуть что - сразу 1С виновата?)
30 ЧеловекДуши
 
07.04.15
14:31
(27) Вот оно как. Т.е. если сжатие и есть, то выполняется оно под другой команде :)
31 dk
 
07.04.15
14:33
еще заметил, что нумлок на клаве отключается после макроса
странно
32 ЧеловекДуши
 
07.04.15
14:33
(29) А ведь, что за мание преследования. Сколько версий клиента 1С. И ни в одной нет функции "Пайза" (Sleep)
33 Гёдза
 
07.04.15
14:34
Я имел ввиду, что если записать макрос на сжатие, а потом посмотреть его одержимое, то что там внутри?
34 dk
 
07.04.15
14:38
попробуй )
35 Гёдза
 
07.04.15
14:39
Я попробуй?????
36 Necessitudo
 
07.04.15
14:40
Да пустой макрос будет, чем вы слушаете?
37 dk
 
07.04.15
14:41
сам спрашиваешь сам и попробуй
38 ЧеловекДуши
 
07.04.15
15:12
(35) Мы уже попробовали. Если вы соизволите прочесть весь пост, то поймете, что из этого вышло :)
39 ЧеловекДуши
 
07.04.15
15:24
Нашел интересный вариант.

http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=18073

Sub Compress_PIX()

Dim octl As CommandBarControl

With Selection
Set octl = Application.CommandBars.FindControl(ID:=6382)

Application.SendKeys "{TAB}"
Application.SendKeys "{UP}"
Application.SendKeys "~"
octl.Execute
End With

End Sub
40 dk
 
07.04.15
15:49
это 2003-й офис