|
Вопрос по взаимодействию 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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |