Вот один из подходов, который не использует VBA. Предполагается, что вы используете Windows Word (он не будет работать на Mac Word) и
- количество элементов, которые вы хотите в своем документе, является фиксированным (т.е. не изменяется случайным образом)
- Ваш "Банк элементов" представляет собой табличный лист Excel, т.е. все строки содержат одинаковые столбцы, а первая строка содержит имена столбцов.
- либо данные для вашего шаблона должны поступать только из одной случайно выбранной строки, или если вам нужны данные из нескольких строк, не имеет значения, иногда они совпадают.
Предположим, ваша рабочая книга Excel находится в каталоге c:\xl\rnd.xlsx, а данные - в Sheet1.
Вызовите первый столбец k и введите в него номер строки, чтобы
k
1
2
3
...
Назовите второй столбец r.
В ячейку B2 поместите следующую формулу
=COUNT(A:A)
В ячейки B3, B4 и т.д. Положить следующую формулу
=RANDBETWEEN(2,$B$2)
Не используйте строку 2 (где k = 1) для ваших данных.
Создайте и заполните столько дополнительных столбцов, сколько вам нужно (всего до 255). Если у вас есть столбцы с текстами заметок (длиной более 255 символов), убедитесь, что вы поместили текст заметки в строку 2. Это должно гарантировать, что Word получит полный текст любых последующих полей memo.
В Word для каждого элемента, который вы хотите вставить, вставьте следующие вложенные поля, используя имя столбца элемента данных, который вы хотите вставить, вместо "mycolumn"
{ DATABASE \d "c:\\xl\\rnd.xlsx" \s "SELECT mycolumn FROM [Sheet1$] WHERE k = { DATABASE \d "c:\\xl\\rnd.xlsx" \s "SELECT r FROM [Sheet1$] WHERE k = 2" }" }
(убедитесь, что вы удвоили обратную косую черту в имени пути и убедитесь, что обе пары {} являются специальными фигурными скобками кода поля, которые вы можете вставить с помощью ctrl-F9 в Windows Word.
Если вы хотите, чтобы в одной строке Excel было более одного элемента, используйте одну и ту же строку индекса (т. Е. K = 2). Если вы хотите элементы из другой записи, используйте другой индекс (например, k = 3).
Сохраните свой шаблон.
Когда вы хотите создать новый тест (или что-то еще),
- Откройте файл Excel и добавьте все новые данные, которые вам нужны, а затем пересчитайте. Сохраните файл Excel, но не закрывайте его.
Лист. Это должно обновить значения RANDBETWEEN
- Сделайте копию вашего шаблона (если это обычный .docx/m) или откройте новый документ на его основе (если это .dotx/m) и сохраните его
- Выберите тело документа (ctrl-A) и нажмите F9, чтобы обновить все поля
- Предполагая, что вы довольны результатами, "исправьте" их, выбрав тело документа и нажав ctrl-shift-F9.
- Сохранить документ
Есть недостатки этого подхода, в том числе
- Как упоминалось ранее, если вам нужны данные, поступающие из разных строк, это не гарантирует, что они будут разными, поскольку r может иметь одно и то же значение для нескольких значений k. Я полагаю, что если у вас мало данных, вы можете повторять шаги (1) и (3), пока не получите удовлетворительный результат. В противном случае было бы необходимо подумать о том, как избежать дублирования строк, и это, вероятно, потребовало бы использования VBA, и в этом случае вы могли бы сделать все это по-другому.
- Кроме того, в наши дни Word бесполезно вставляет метку абзаца в начало каждого результата поля DATABASE. Это может быть удалено для числовых результатов и результатов с использованием переключателя форматирования числового значения / даты-времени, но не для текста. Если вам нужно удалить эти отметки абзаца, вам понадобится либо надежный механизм, использующий Find / Replace, либо (опять же) немного VBA.
- Поля базы данных не работают в таблицах Word (и, возможно, в других местах). Если вам нужно поместить данные в эти места, вам нужно будет использовать поле SET, чтобы установить закладку для результата, а затем использовать поле REF, в котором вы хотели получить данные.