--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Нужно вставить в .docx случайно генерируемое число...

Нужен совет (поиск решения проблемы. не для купли-продажи)
4188
49
С друзьями на NN.RU
В социальных сетях
Поделиться
Dr.Re
16.05.2018
Задача: имеется шаблонный текст. Необходимо, чтобы при печати в текст вставлялось случайное число (в заданном диапазоне, конечно). Диапазон в простейшем случае задается либо жестко в самом тексте, либо при помощи диалогового окна.
VBA я не касался лет 15, давно и прочно забыл способ осуществления этого, прошу простить за довольно простой вопрос. Да, и в гугле меня забанили:о)
MonitoR
16.05.2018
а например вставить лист excel, в котором чтото типа СЛУЧМЕЖДУ(0;100)
Dr.Re
16.05.2018
Так, спасибо, сейчас попробую...
Dr.Re
16.05.2018
...к сожалению, число генерируется однократно, при открытии документа заново появляется одно и то же((
Esik
16.05.2018
Странно.
Если бы это было поле Word, то его действительно нужно было бы обновлять для нового расчёта формулы. Лист же должен считаться нормально. В нём же можно просить выставить диапазон.
Dr.Re
16.05.2018
При закрытии и открытии .docx изменений не вижу, при копировании поля оно копируется тоже с тем же значением. Обновление происходит, если открыть объект и затем его закрыть. Пока не могу установить точных закономерностей и понять, что же надо.
Инстинктивно хочется нажать кнопку "обновить страницу" или открыть диспетчер кода по F12, но это Word...(((
997
16.05.2018
Дык не поле надо копировать, а объект вставлять.
Dr.Re
17.05.2018
Вставлял объект, ессно. Что уж я...:)
K0IIIAK
16.05.2018
Dr.Re писал(а)
Инстинктивно хочется нажать кнопку "обновить страницу"

в экселе была горячая клавиша на "Произвести вычисления в книге" вроде F9, для одного листа шифт+F9
Dr.Re писал(а)
...к сожалению, число генерируется однократно, при открытии документа заново появляется одно и то же(( ...

гуглите метод document.open() и там вставляйте макрос.
если подождете до вечера, могу написать готовый
kemy
16.05.2018
там вопрос в другом, что rnd реально каждый раз заново начинает последовательность - те закрыл документ, открыл - тоже число
об этом и речь. каждый раз при открытии будет новое число
kemy
16.05.2018
в чем разница для рнд? у ворда есть стандартное имя макроса autoopen - срабатывает при открытии
проверил - каждый раз генерится одно и тоже число
Dr.Re
16.05.2018
вот сделал я DocOpen.vbs, с содержимым типа

Sub OpenDoc()
Documents.Open FileName:="C:\Documents and Settings\user\Мои документы\UC.docx"
End Sub

Чего-то тут не хватает, ибо не работает. Не пойму только чего.
kemy
16.05.2018
Sub AutoOpen()
'
' AutoOpen Макрос
'
'
b = Timer()
For i = 1 To b
c = Rnd
Next
Selection.TypeText Text:=CStr(Rnd * 1000) + " "
Selection.TypeText Text:=CStr(Rnd * 1000) + " "
Selection.TypeText Text:=CStr(Rnd * 1000)
End Sub

прямо в ворде создайте макрос с именем AutoOpen

вот срабатывание при печати тут уже геморнее
Dr.Re
16.05.2018
Э... ну, дает это при открытии добавление перед текстом документа набор чисел, а надо чтобы эти числа вставлялись туда, куда нужно...
Иными словами, каким же образом вставляется в текст динамическое содержимое? А может быть, нужно не к ворду прикреплять этот скрипт, а к полям из эксел? Только это совсем уж ппц путаница. Почему нет способа просто вставить в текст что-то вроде

Lorem {int(rnd(100,200,5)} Ipsum

и это будет давать текст типа

Lorem 125 Ipsum
kemy
16.05.2018
текста то нет, условий вставки нет
я дал пример - как работает
уж определить место вставки и допилить макрос уже минимальная проблема
нельзя потому что это текстовый редактор
можно вставлять поля всякие, но на них макросы все равно придется вешать
в колонтитулах можно покрутить формулами, но там набор ограничен
Dr.Re
16.05.2018
Ну да, главное - направить:) Придется вспомнить основы.
Вообще, я на самом деле думал, что все намного проще...
997
16.05.2018
Dolorem ipsum пробовал? Подробности тут: www.artlebedev.ru/kovodstvo/sections/67/
Dr.Re
17.05.2018
А как же! Как говорится, linua latina non est penis canina - in manus non recipe!
kemy писал(а)
аждый раз генерится одно и тоже число

а рандомайз кто будет делать?
kemy
16.05.2018
не знал - раньше не требовались случайные числа :)
Dr.Re
16.05.2018
даже если и не случайные, то сам вопрос (как вставить в текст вычисляемую переменную) пока не снят.
ну не может такого быть, чтобы отсутствовали простые средства реализации такой элементарной вещи!
kemy
16.05.2018
самое простое - в места вставок вставить набор уникальный - который помимо не встретится точно в тексте
тогда поиском находятся такие и заменяются - проблем мало
вот если пытаться привязаться к началу абзацей тогда надо точно уверенным надо быть что разделение есть - внимательно структуру документа проверить
но тогда тоже можно пробежаться по структуре и вствить
Dr.Re
17.05.2018
э... ну, вот сделаю паузу в изучении html/css, может и vba на досуге припомню...)
Dr.Re
16.05.2018
т.е., открывать док через скрипт, в котором будет задан параметр для этого метода? а какой параметр надо задавать? и действительно, работает ли генератор псевдослучайных чисел корректно - тоже вопрос..
Ты напиши, что тебе надо, я вечером гляну, тут, похоже, делов на 1.5 минуты
Dr.Re
16.05.2018
Есть текст стандартного такого содержания. Он состоит из абзацев, в каждом из которых требуют проставлять число (скажем, в рамках от 100 до 180 с шагом в 5 ед.). Фантазии вписывать потом в распечатку от руки уже не хватает, то же самое и впечатывать.
Необходимо сделать так, чтобы при каждой печати документа (или хотя бы при его закрытии-открытии) эти числа генерировались по RND и вставлялись в основной текст.
В общем, это всё.
kemy
16.05.2018
запустите генерацию в цикле - получив какой нибудь параметр - типа числа тиков
VooDoo
17.05.2018
а оно и будет одно и то же. нужна соль, чтобы оно реально регенироль случайно
Private Sub Document_Open()

'
' Макрос1 Макрос
'
'
Randomize
Selection.TypeText ("Число : ")
Selection.TypeText Rnd()

End Sub


суть ясна?
vladmir
17.05.2018
Вставляйте текущую дату, включая секунды.
Dr.Re
17.05.2018
К вопросу, который лежит в основе...
КАК в документе word можно предусмотреть вставку заранее неизвестной величины?
В обычных языках программирования, да и в скриптах vba это проще простого. Но вот как вставить в текст сам скрипт - это вопрос. Он же не должен сам по себе занимать место на странице, только его результат.
VeSnaip
17.05.2018
Меню-Вставка-Гиперсылка.... или Меню-Вставка-Объект....
Не то?
Dr.Re
18.05.2018
Объект чёт не обновляется. Href можно попробовать вставить, только надо скрипт написать. Возникает вопрос, а неужели ж все так сложно, что средствами ВБА не реализуется...
FreeCat
18.05.2018
просто VBA на это явно не рассчитан :) .
VeSnaip
17.05.2018
Вот пример
К сообщению прикреплен файл:
205691642-slcislo.doc   (31 Kb)   Скачать файл
Я бы подошёл к проблеме с другой стороны: вставить где должны быть числа метки-плейсхолдеры, например {RANDOM}, а документ уже модифицировать скриптом извне, заменяя метки {RANDOM} на числа. Тут плюс в том что реализовать можно почти на любом скриптовом языке какой знаешь, без необходимости разбираться с макросами.
Теоретически можно документ и на печать сразу же отправлять из скрипта.
Dr.Re
18.05.2018
Так что, Word все-таки имеет возможность вставлять метки? Фигурные скобочки, значит? Надо попробовать на досуге.
Меткой может быть любая уникальная последовательность символов, например
$birthdate
Есть куча средств, которые осуществляют поиск и замену определённого набора символов в потоке (файле).

Другое дело, что некоторые форматы файлов используют упаковщики (архиваторы).

Подробнее по форматам и их обработке можно посмотреть здесь: habr.com/post/69417/
Ну так docx это просто директория, сжатая zip'ом. Распаковать, пропатчить внутренний файл document.xml кажется он, и упаковать зипом обратно. Шаблон кстати можно даже хранить уже распакованным, чтобы лишний раз не распаковывать.
Free Cat
18.05.2018
BrainFucker писал(а)
директория, сжатая zip'ом.

я бы сказал что файл документа с дополнительными подфайлами. идиотская система.
Норм система, удобная. Идиотская это когда был раньше бинарный файл в проприетарном формате.
FreeCat
19.05.2018
BrainFucker писал(а)
Норм система, удобная.

*no*
FreeCat
19.05.2018
BrainFucker писал(а)
бинарный файл

текстовая инфа так текстовой и была :-D .
Хрень полная. Обрабатывать нормальный формат типа XML гораздо удобнее чем разбирать проприетарную дичь.
FreeCat
20.05.2018
а "приблудные" ;-) :-D ?
Так что, Word все-таки имеет возможность вставлять метки? Фигурные скобочки, значит? Надо попробовать на досуге.

Встроенными макросами-то думаю много чего можно сделать, если уметь. Но я не это имел в виду.

Я имел в виду просто вручную в нужных местах, где должно быть рандомное число, проставить такие метки плейсхолдеры. А внешним скриптом эти метки уже заменять на рандомные числа. Просто прописать вручную метки типа {RANDOM}, где должны быть числа, таким же образом как я это прописал в этом посте. Я хз как понятней объяснить. Не обязательно именно фигурные скобки, просто чтобы был уникальный набор символов, который легко скриптом найти в документе и заменить. Можно хоть хер прописать, если он в документе сам по себе не встречается. :D
Dr.Re
19.05.2018
Нет, в этом не встречается) принцип понял))
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Принтер лазерный Avision AP30A

Avision AP30A лазерный принтер черно-белая печать формат A4, 33 стр/мин, 128 Мб, дуплекс, лоток 250 листов и многоцелевой лоток с...
Цена: 9 900 руб.

Дорого куплю новые картриджи от лазерных и струйных

РЕАЛЬНО Дорого куплю новые картриджи от лазерных и струйных принтеров и копиров (НР, Canon, Samsung, Xerox, OCE и др.) всех моделей....
Цена: 7 777 руб.

Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.

Продаю факс (ы) Panasonic– FT932/982

Продаю факс (ы) Panasonic– FT932/982: термоперенос, термобумага, А4
Цена: 350 руб.