|   |   | 
| 
 | Вопрос по взаимодействию 1С и WinWord | ☑ | ||
|---|---|---|---|---|
| 0
    
        Бертыш 27.09.18✎ 18:52 | 
        Стоит задача обработать DOC овский и/или DOCX овский документ и перебирая все страницы в нём вставить на каждую строницу обтекаемое текстовое поле с надписью. Собственно тупо прошу примера кода. Пробовал через OpenXML дабы не обязательно было заказчику иметь WinWord для вставки текстового поля, но что то пошло не так. Теперь вот прошу подсказки в части связи 1С с WinWord по COM/OLE     | |||
| 1
    
        Cyberhawk 27.09.18✎ 18:57 | 
        "задача обработать DOC овский" + "Пробовал через OpenXML" = ?     | |||
| 2
    
        Бертыш 27.09.18✎ 19:08 | 
        (1) Ну до DOC овского тупо не добрался.
 Вот наёшл в сети константу с помощью которой вроде бы можно подцепить у документа количество страниц. wdActiveEndPageNumber Однако пока не понятно как её юзать с документом из 1С Вообще в старых версиях WinWord и VBA как-то всё было более понятно - запустил запись макросов и на выходе получил практически работающий через OLE кусок кода. А сейчас записал макрос. Открыл его в VBA и хрен чего поймёшь как это использовать из стороннего приложения | |||
| 3
    
        Cyberhawk 27.09.18✎ 20:58 | 
        Покажи на картинке, что и куда вставить надо     | |||
| 4
    
        Бертыш 27.09.18✎ 21:34 | 
        Не знаю как показать на картинке. Есть документ а в нём текст по всем листам. Далее в документ в каждую страницу нужно вставить стандартную обтекаемую надпись с текстом. На схеме А. Эта надпись должна появиться на каждом листе файла. Для этого надобно перебрать как то как я понимаю все страницы файла и тупо на каждую программно вставить область А 
 |-------------------| | | | ,,, | | .... | | !!!! | | |-----| | | | А | | | |-----| | | | |-------------------| | |||
| 5
    
        Cyberhawk 27.09.18✎ 21:36 | 
        Так если так делать, то и количество страниц изменится     | |||
| 6
    
        Сияющий в темноте 27.09.18✎ 21:40 | 
        Можно сделать макрос на VbScript и запускать его как приложение.
 можно макроч сохранить в одном документк Word и подписать,а из макроса открывать другие документы и обрабатывать,тогда нужно будет просто открыть шаблон. просто,из 1с в word,это через обмен данными между процессами,очень медленная хрень. | |||
| 7
    
        Бертыш 27.09.18✎ 21:49 | 
        (5) Так вроде бы там у ворда есть возможность что бы текст проходил через область А насквозь, то есть наложение как два слоя. Тогда количество страниц то не поменяется     | |||
| 8
    
        Cyberhawk 27.09.18✎ 21:55 | 
        Обтекание текстом - это не про это     | |||
| 9
    
        Бертыш 28.09.18✎ 15:49 | 
        (8) Но оно для моих целей и задач вполне подходит. А насчет обработки документа мне нужно как при удалении строк из таблицы значений действовать с хвоста. Разобраться бы как перебрать все станицы последовательно с последней. Фактически в каждую страницу нужно вставлять надпись с прозрачностью и режимом обтекания перед текстом     | |||
| 10
    
        Cyberhawk 28.09.18✎ 17:19 | 
        Слова "обтекание" и "перед" несовместимы, с таким подходом к мыслеизъяснению далеко не уедешь     | |||
| 11
    
        Бертыш 28.09.18✎ 20:10 | 
        (10) Можно Вам один вопрос задать? Как через Word.Application получить номер последней страницы и перебрать их все программно с начала до конца стучась из 1С в WinWord по OLE. Вы как знаток раскажите, а дальше я уж как-нибудь сам     | |||
| 12
    
        Cyberhawk 28.09.18✎ 21:46 | 
        МСДН в помощь     | |||
| 13
    
        Бертыш 28.09.18✎ 23:12 | 
        (12) То есть даже Вы ничего не знаете. Что ж я Вас услышал     | |||
| 14
    
        palsergeich 28.09.18✎ 23:38 | 
        (13) Зря Вы так. Я когда решал нетривиальную задачу с Вордом - единственное что помогло - курение MSDN. Да решения в сети были, но они или вообще не работали или работали не совсем так как надо.     | |||
| 15
    
        antndr 29.09.18✎ 00:06 | 
        (4) Может попробовать колонтитулами поиграться, идея конечно такая себе, но как минимум ими можно программно управлять.     | |||
| 16
    
        palsergeich 29.09.18✎ 00:13 | 
        (15) Колонтитулы не обтекаются текстом     | |||
| 17
    
        antndr 29.09.18✎ 00:40 | 
        (16) Вариант опять же теоретический, можно попробовать записать макрос, в котором интерактивно будет добавляться необходимые действия)     | |||
| 18
    
        Бертыш 29.09.18✎ 08:01 | 
        (17) Действия то да. Мысль то здравая. Для записи процесса вставки поля и в поле текста, для записи перехода по страницам тоже ничего. Вот как получить номер последней страницы в документе.     | |||
| 19
    
        Бертыш 29.09.18✎ 08:09 | 
        (14) Такой была моя изначальная идея. Я пытался генерировать и/или корректировать колонтитулы на уровне OpenXML для DOCX. Мало того что походу выяснилсь что у меня не получилось с OpenXML, но и возникла здавая мысль, поскольку я то это делаю не для себя, а для заказчика, у заказчика в документах может быть свой колотитул с каковым моя вставка неизбежно будет конфликтовать     | |||
| 20
    
        Бертыш 29.09.18✎ 08:22 | 
        (14) Я оплачиаю и пользуюсь Office 365/ Сейчас вот попытался попасть в MSDN, но, как в известном анекдоте, "Вышел снова на дерибасовскую". Мне бы очень помогла бы ссылка на свойства метод для получения последней страницы в документе, на получение количества страниц в документе. 
 Мне попалась в сети идея на предмет получения количества страниц на базе которой я попытался наваять следующий код идея выглядела как = selection.information(wdActiveEndPageNumber) поиск дал то что wdActiveEndPageNumber равно 3 Однако в коде wa=Новый COMОбъект("Word.Application"); wa.Documents.Open(ИмяФайла); Сообщить("Страниц="+wa.Selection.Information(3));//ActiveDocument. wa=Неопределено; сообщает что страниц 1 и как я не бился Благно вчера наконец то мне предоставили доступ на компьютер на котором в 1С работает отладчик. Однако моя попытка погулять отладчиком по свойствам wa приводит к тому что 1С тупо виснет. | |||
| 21
    
        Бертыш 29.09.18✎ 08:24 | 
        То есть сообщает что 1 страница хотя страниц тьма тьмущая.     | |||
| 22
    
        Бертыш 29.09.18✎ 11:28 | 
        Урааааа 
 Догуглился до получения количества страниц и прочая http://www.delphikingdom.com/asp/viewitem.asp?catalogid=636 wa.ActiveDocument.ComputeStatistics(2) Теперь будет легче. Остальное дело техники | |||
| 23
    
        Бертыш 02.10.18✎ 11:44 | 
        Выскочила проблема со вставкой надписи  документ (обтекаемой прозрачной)
 То есть на мою версию перевода адресации конструкции VBA Application.Templates( _ "C:\Users\Бертыш\AppData\Roaming\Microsoft\Document Building Blocks\1049\16\Built-In Building Blocks.dotx" _ ).BuildingBlockEntries(" Простая надпись").Insert Where:=Selection.Range, _ RichText:=True На язык 1С система ругается в плане того что (" Простая надпись") не найдена в шаблоне. Толи проблема в кирилце через OLE, толи в руках моих | |||
| 24
    
        Бертыш 08.10.18✎ 15:35 | 
        +23 При чём оно ругается и при переносе макроса из того документа DOCX в другой документ на ActiveDocument.Shapes("Надпись 2").Select
 Всё ещё воюю. А с колонтитулами на уровне архива DOCX неполучилось. Проблемы строго говоря две: 1)Непонимание какие там в XML файле существующего footer-а должны быть идентификаторы при вставке штампа в существующий footer. Если колонтитула изначально нет, то делов то... засунуть файл xml из макета с прописыванием его всюду где это необходимо. Тут конечно есть некий обходной манёвр... Сохранять все файлы для целей вставки штампа в формате HTML с последующей вставкой штампа. Однако тут с точки зрения требования заказчика (штамп на каждой странице) возникает другая проблема. Может быть титульный лист, а может и не быть. Может быть отдельный колонтитул для первой страницы, а может сам документ не иметь дополнительных колонтитулов,а может будет. Может быть отдельный колонтитул для чётных, а отдельный для нечетных страниц (помимо колонтитула для первой страницы). И вот как понять как на всех страницах документа включая титульный отметится штампом не вполне понятно. | |||
| 25
    
        Бертыш 10.10.18✎ 01:20 | 
        В общем вот решение которое в оконцовке найдено и взято за основу. Размещаю исключительно ради всех тех несчастных кто будет страдать и идти моим путём. Просьба к модераторам придумать во что переобозвать мой топик чтобы название более адекватно отражала суть проблемы которую я пытался решить, дабы при поисковой выдаче она отображалась ищущему.
 В общем решение вот http://www.msofficeforums.com/word-vba/19239-add-text-box-each-page-word-doc.html | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |