![]() |
![]() |
|
|
| ||
Бертыш 27.09.18 - 18:52 | Стоит задача обработать DOC овский и/или DOCX овский документ и перебирая все страницы в нём вставить на каждую строницу обтекаемое текстовое поле с надписью. Собственно тупо прошу примера кода. Пробовал через OpenXML дабы не обязательно было заказчику иметь WinWord для вставки текстового поля, но что то пошло не так. Теперь вот прошу подсказки в части связи 1С с WinWord по COM/OLE | ||
Cyberhawk 1 - 27.09.18 - 18:57 | "задача обработать DOC овский" + "Пробовал через OpenXML" = ? | ||
Бертыш 2 - 27.09.18 - 19:08 | (1) Ну до DOC овского тупо не добрался.
Вот наёшл в сети константу с помощью которой вроде бы можно подцепить у документа количество страниц. wdActiveEndPageNumber Однако пока не понятно как её юзать с документом из 1С Вообще в старых версиях WinWord и VBA как-то всё было более понятно - запустил запись макросов и на выходе получил практически работающий через OLE кусок кода. А сейчас записал макрос. Открыл его в VBA и хрен чего поймёшь как это использовать из стороннего приложения | ||
Cyberhawk 3 - 27.09.18 - 20:58 | Покажи на картинке, что и куда вставить надо | ||
Бертыш 4 - 27.09.18 - 21:34 | Не знаю как показать на картинке. Есть документ а в нём текст по всем листам. Далее в документ в каждую страницу нужно вставить стандартную обтекаемую надпись с текстом. На схеме А. Эта надпись должна появиться на каждом листе файла. Для этого надобно перебрать как то как я понимаю все страницы файла и тупо на каждую программно вставить область А
|-------------------| | |
| ,,, |
| .... |
| !!!! |
| |-----| |
| | А | |
| |-----| |
| |
|-------------------| | ||
Cyberhawk 5 - 27.09.18 - 21:36 | Так если так делать, то и количество страниц изменится | ||
Сияющий в темноте 6 - 27.09.18 - 21:40 | Можно сделать макрос на VbScript и запускать его как приложение.
можно макроч сохранить в одном документк Word и подписать,а из макроса открывать другие документы и обрабатывать,тогда нужно будет просто открыть шаблон. просто,из 1с в word,это через обмен данными между процессами,очень медленная хрень. | ||
Бертыш 7 - 27.09.18 - 21:49 | (5) Так вроде бы там у ворда есть возможность что бы текст проходил через область А насквозь, то есть наложение как два слоя. Тогда количество страниц то не поменяется | ||
Cyberhawk 8 - 27.09.18 - 21:55 | Обтекание текстом - это не про это | ||
Бертыш 9 - 28.09.18 - 15:49 | (8) Но оно для моих целей и задач вполне подходит. А насчет обработки документа мне нужно как при удалении строк из таблицы значений действовать с хвоста. Разобраться бы как перебрать все станицы последовательно с последней. Фактически в каждую страницу нужно вставлять надпись с прозрачностью и режимом обтекания перед текстом | ||
Cyberhawk 10 - 28.09.18 - 17:19 | Слова "обтекание" и "перед" несовместимы, с таким подходом к мыслеизъяснению далеко не уедешь Рекламное место пустует | ||
Бертыш 11 - 28.09.18 - 20:10 | (10) Можно Вам один вопрос задать? Как через Word.Application получить номер последней страницы и перебрать их все программно с начала до конца стучась из 1С в WinWord по OLE. Вы как знаток раскажите, а дальше я уж как-нибудь сам | ||
Cyberhawk 12 - 28.09.18 - 21:46 | МСДН в помощь | ||
Бертыш 13 - 28.09.18 - 23:12 | (12) То есть даже Вы ничего не знаете. Что ж я Вас услышал | ||
palsergeich 14 - 28.09.18 - 23:38 | (13) Зря Вы так. Я когда решал нетривиальную задачу с Вордом - единственное что помогло - курение MSDN. Да решения в сети были, но они или вообще не работали или работали не совсем так как надо. | ||
antndr 15 - 29.09.18 - 00:06 | (4) Может попробовать колонтитулами поиграться, идея конечно такая себе, но как минимум ими можно программно управлять. | ||
palsergeich 16 - 29.09.18 - 00:13 | (15) Колонтитулы не обтекаются текстом | ||
antndr 17 - 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 |
|
Список тем форума |
Правила | Описание | Реклама на форуме | Волшебные решения | Поиск | Секции | Рейтинг | Книга знаний | Вики-миста (КЗ2) | Мобильная | Архив | Модераторы | Галерея | Регистрация | 18+ |