Word при открытии данного документа будет выполнена следующая команда sql
Возможно ли, чтобы Microsoft Word 2010 автоматически обновлял данные SQL, которые были вставлены в документ, с помощью Microsoft Query при открытии файла?
При использовании функции вставки базы данных в Word после настройки источника данных и создания запроса SQL данные вставляются в виде таблицы в текущий открытый документ. Прежде чем данные будут вставлены, вы можете выбрать, следует ли вставлять данные как FIELD.
Если поле выбрано, данные появляются в полях (например, когда вы вставляете - дату / время), и при щелчке правой кнопкой мыши по полям и выборе «поля обновления» в контекстном меню данные должны обновляться автоматически. Это не работает, потому что Word еще раз запрашивает источник данных, поэтому создание отчетов на основе запросов SQL, которые не требуют взаимодействия с пользователем, невозможно.
Является ли VBA (и выполнение ручного труда по созданию таблицы и заполнению ячеек с помощью vba) единственным способом добиться нулевого взаимодействия с пользователем?
2 ответа
Спасибо всем за ваш вклад. В итоге я написал этот VBA:
Добиться такого результата можно разными способами:
- Включите таблицы Excel в Word.
- Используйте VBA или VSTO, как описано выше. Уже есть различные статьи, описывающие, как добавлять код.
- (Бесплатная) версия Invantive Composition в качестве надстройки к Word (но я там работаю).
- Возможно, даже создание RTF на общем ресурсе Samba, которое автоматически заполняет RTF с помощью оператора magic. Извините, это действительно так называется! См. книгу Samba.
Выбранный вариант зависит от некоторых переменных, о которых я могу думать:
- На сколько клиентских компьютеров развернуть?
- Размер в страницах заполненного документа, например 1 страница или 1.500?
- Контролируемая среда или ПК в другом месте в мире с использованием веб-интерфейса?
- Количество настраиваемых шаблонов документов?
- Поддержка как 32-битного, так и 64-битного Word?
- Доступны ли драйверы баз данных на всех ПК?
- Могут ли все пользователи получить доступ к базе данных (учетным данным)?
- Как часто меняется результат SQL?
Я могу дополнительно указать параметры, когда вы предоставите дополнительную информацию или пример того, как должен выглядеть документ?
Important This article contains information that shows you how to help lower security settings or how to turn off security features on a computer. You can make these changes to work around a specific problem. Before you make these changes, we recommend that you evaluate the risks that are associated with implementing this workaround in your particular environment. If you implement this workaround, take any appropriate additional steps to help protect your system.
Symptoms
When you open a mail merge main document in Microsoft Office Word, you experience one of the following symptoms:
You receive the following prompt:
Opening this document will run the following SQL command:
SELECT * FROM your datasource
Data from your database will be placed in the document. Do you want to continue?Note If you click Yes, the mail merge main document opens with the data source attached. If you click No, the mail merge main document opens without the data source attached.
In Microsoft Office Word 2007, perform the following action while the prompt is displayed:
To determine the unique number that is associated with the message that you receive, press CTRL+SHIFT+I. The following number appears in the lower-right corner of this message:
A mail merge main document that is opened by using Microsoft Visual Basic for Applications(VBA) does not have the data source attached.
Note It could be that you are using a program, for example Microsoft Access or Microsoft Visual FoxPro, to programmatically open a mail merge main document file when you experience the symptoms in this article.
Cause
The prompt that is described in the "Symptoms" section is by design.
This prompt exists in all later versions of Microsoft Office and was introduced in Office XP Service Pack 3. This prompt was added in the products listed in the "Applies to" section to make mail merge more secure. If you click Yes when you receive the prompt, you let code run on your computer. A malicious user may be able to craft a SQL query that is designed to steal or to destroy data that you have access to. If you click No when you receive the prompt, you do not let code to run.
Note Setting DisplayAlerts=none through VBA suppresses the prompt when the file is opened by using VBA, but uses the NO option to open the document and no data is attached to the mail merge main document.
Workaround
Warning This workaround may make your computer or your network more vulnerable to attack by malicious users or by malicious software such as viruses. We do not recommend this workaround but are providing this information so that you can implement this workaround at your own discretion. Use this workaround at your own risk.
Important This section, method, or task contains steps that tell you how to modify the registry. However, serious problems might occur if you modify the registry incorrectly. Therefore, make sure that you follow these steps carefully. For added protection, back up the registry before you modify it. Then, you can restore the registry if a problem occurs. For more information about how to back up and restore the registry, click the following article number to view the article in the Microsoft Knowledge Base:
322756 How to back up and restore the registry in Windows
If you read and understand the disclaimers that are provided in this article and if the documents that you open by using mail merge are from a trusted source, you may want to work around the behavior that is described in the “Symptoms” section.
To work around this behavior, disable the security prompt by using the SQLSecurityCheck registry key.
To disable the security prompt by using the SQLSecurityCheck registry key, follow the appropriate steps for your version of Microsoft Word.
Word 2013
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word\Options
Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word\Options
On the Edit menu, point to New, and then click DWORD Value.
Under Name, type:
Double-click SQLSecurityCheck.
In the Value data box, type:
Word 2010
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options
Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options
On the Edit menu, point to New, and then click DWORD Value.
Under Name, type:
Double-click SQLSecurityCheck.
In the Value data box, type:
Word 2007
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Options
Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Options
On the Edit menu, point to New, and then click DWORD Value.
Under Name, type:
Double-click SQLSecurityCheck.
In the Value data box, type:
Word 2003
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Options
Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Options
Click Edit, point to New, and then click DWORD Value.
Under Name, type:
Double-click SQLSecurityCheck.
In the Value data box, type:
Word 2002 Service Pack 3
HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Options
"SQLSecurityCheck"=dword:00000000
To do this, follow these steps:
Start Registry Editor.
Locate and then click the following registry key:
HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Options
Click Edit, point to New, and then click DWORD Value.
Репутация: нет
Всего: нет
Сделал док слияния в ворде, если нажать кнопку "слить", то все сработает. А надо, чтобы при открытии дока слияния тут же автоматом происходило слияние. Можно сделать через макрос, но это неудобно - не везде выставлен уровень безопасности, позволяющий запуск макросов. А вот какую опцию надо выставить, чтобы сливалось автоматом при открытии дока слияния?
Репутация: 15
Всего: 17
Репутация: 1
Всего: 1
Цитата(DedBanzai @ 14.11.2006, 11:23) |
Сделал док слияния в ворде, если нажать кнопку "слить", то все сработает. А надо, чтобы при открытии дока слияния тут же автоматом происходило слияние. Можно сделать через макрос, но это неудобно - не везде выставлен уровень безопасности, позволяющий запуск макросов. А вот какую опцию надо выставить, чтобы сливалось автоматом при открытии дока слияния? |
Смотря что сливаете и как. Что у Вас является источником данных? Если например использовать внешний источник, такой как листы Excel, то гарантированно при открытии вы будет получать то, о чем говорите.
Репутация: 15
Всего: 17
Цитата(Shymep @ 16.11.2006, 21:13) |
Смотря что сливаете и как. Что у Вас является источником данных? Если например использовать внешний источник, такой как листы Excel, то гарантированно при открытии вы будет получать то, о чем говорите. |
Да? Вы сами то хоть пробовали так делать? ;)
При открытии документа Word ничего автоматически не сливается. Все равно нужно щелкать по кнопке Слияние в новый документ.
И не важно, что является источником данных.
И еще, что в Вашем понимании "Внешний источник данных"? Как может источник быть НЕ внешним? Поясните плиз.
PS: при открытии документа слияния выдается диалоговое окно с вопросом о разрешении подключить источник данных. Но и только. Само слияние при этом не происходит.
Репутация: 1
Всего: 1
Цитата(AsIs @ 18.11.2006, 15:42) |
При открытии документа Word ничего автоматически не сливается. Все равно нужно щелкать по кнопке Слияние в новый документ. |
Цитата(AsIs @ 18.11.2006, 15:42) |
И еще, что в Вашем понимании "Внешний источник данных"? Как может источник быть НЕ внешним? Поясните плиз. |
М-да, русский язык многозначен. Напоминает анекдот о том как программист в магазин ходил Я что-то говорил за "невнешний" источник? Странно. Я лишь посоветовал использовать в качестве источника листы Excel (для удобства), можно использовать и др. источники. 3 шаг слияния.
Цитата(AsIs @ 18.11.2006, 15:42) |
PS: при открытии документа слияния выдается диалоговое окно с вопросом о разрешении подключить источник данных. Но и только. Само слияние при этом не происходит. |
Если Вы имеете в виду диалог о поиске источника данных, значит у вас не подключен источник в "Свойствах связи с данными".
Репутация: 15
Всего: 17
Все у меня включено.
При открытии документа слияния, по новой политике MS выдается запрос о подключении к источнику данных (это как раз тот запрос SQL о котором Вы пишите) - разрешать его или нет. Выбирать (искать) файл Word не просит, если он остался лежать на том же месте.
Давайте тогда уточнять: какая версия Word? У меня 2003, и в ней процесс открытия документа слияния немного изменен.
Запрос на выполнение команды SQL выдается, но это еще НЕ результаты слияния.
Результат слияния (это имел ввиду автор), это когда получается много страничек, столько - сколько записей в базе.
И если у Вас эти много страничек получаются просто при открытии основного файла слияния, то это меня удивляет.
Репутация: 1
Всего: 1
Цитата(AsIs @ 18.11.2006, 16:55) |
И если у Вас эти много страничек получаются просто при открытии основного файла слияния, то это меня удивляет. |
В смысле много страничек?
У меня всего одна страница - на ней в таблице отображаются данные из 9 записей листа Excel. Т.е. те 9 из около 300, на которых я остался в прошлый раз перед закрытием документа (точнее в прошлый раз сохранения). Чтобы перейти к другим записям, естественно нужен Поиск (в Слиянии). Чтобы печатать документ, не нужно больше ничего.
Репутация: 15
Всего: 17
Цитата(Shymep @ 18.11.2006, 17:06) |
В смысле много страничек? У меня всего одна страница - на ней в таблице отображаются данные из 9 записей листа Excel. Т.е. те 9 из около 300, на которых я остался в прошлый раз перед закрытием документа (точнее в прошлый раз сохранения). Чтобы перейти к другим записям, естественно нужен Поиск (в Слиянии). Чтобы печатать документ, не нужно больше ничего. |
ок. Проблемы терминологии.
Давайте с начала.
Есть понятие основного документа слияния (бланка документа) и документа с результатами слияния.
Основной документ слияния, это тот, в котором вставлены поля слияния, тот с которым мы работали в мастере слияния. В этом документе, если включен редим просмотра данных (но не полей), то отображается подставленная текущая запись из базы. Конечно можно печатать этот документ, но это еще пока не само слияние. Это предварительный просмотр, в отличие от того, что описывается ниже.
Репутация: 1
Всего: 1
AsIs, я кажется только теперь понимаю, о чем идет речь. Судя по всему, я невнимательно прочел вопрос или не понял автора. Но тут действительно есть некоторая неоднозначность между "слить" и "слить в новый документ"
В таком случае, если автора вопроса не устраивает возможность нажать на Панели слияния кнопку Слияние в новый документ, то для автоматизации необходим макрос.
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Несанкционированная реклама на форуме запрещена
- Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
- Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
- Оставляйте свои записи в "Книге отзывов о работе администрации"
Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Работа с MS Office | Следующая тема » |
[ Время генерации скрипта: 0.1420 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Репутация: нет
Всего: нет
Сделал док слияния в ворде, если нажать кнопку "слить", то все сработает. А надо, чтобы при открытии дока слияния тут же автоматом происходило слияние. Можно сделать через макрос, но это неудобно - не везде выставлен уровень безопасности, позволяющий запуск макросов. А вот какую опцию надо выставить, чтобы сливалось автоматом при открытии дока слияния?
Репутация: 15
Всего: 17
Репутация: 1
Всего: 1
Цитата(DedBanzai @ 14.11.2006, 11:23) |
Сделал док слияния в ворде, если нажать кнопку "слить", то все сработает. А надо, чтобы при открытии дока слияния тут же автоматом происходило слияние. Можно сделать через макрос, но это неудобно - не везде выставлен уровень безопасности, позволяющий запуск макросов. А вот какую опцию надо выставить, чтобы сливалось автоматом при открытии дока слияния? |
Смотря что сливаете и как. Что у Вас является источником данных? Если например использовать внешний источник, такой как листы Excel, то гарантированно при открытии вы будет получать то, о чем говорите.
Репутация: 15
Всего: 17
Цитата(Shymep @ 16.11.2006, 21:13) |
Смотря что сливаете и как. Что у Вас является источником данных? Если например использовать внешний источник, такой как листы Excel, то гарантированно при открытии вы будет получать то, о чем говорите. |
Да? Вы сами то хоть пробовали так делать? ;)
При открытии документа Word ничего автоматически не сливается. Все равно нужно щелкать по кнопке Слияние в новый документ.
И не важно, что является источником данных.
И еще, что в Вашем понимании "Внешний источник данных"? Как может источник быть НЕ внешним? Поясните плиз.
PS: при открытии документа слияния выдается диалоговое окно с вопросом о разрешении подключить источник данных. Но и только. Само слияние при этом не происходит.
Репутация: 1
Всего: 1
Цитата(AsIs @ 18.11.2006, 15:42) |
При открытии документа Word ничего автоматически не сливается. Все равно нужно щелкать по кнопке Слияние в новый документ. |
Цитата(AsIs @ 18.11.2006, 15:42) |
И еще, что в Вашем понимании "Внешний источник данных"? Как может источник быть НЕ внешним? Поясните плиз. |
М-да, русский язык многозначен. Напоминает анекдот о том как программист в магазин ходил Я что-то говорил за "невнешний" источник? Странно. Я лишь посоветовал использовать в качестве источника листы Excel (для удобства), можно использовать и др. источники. 3 шаг слияния.
Цитата(AsIs @ 18.11.2006, 15:42) |
PS: при открытии документа слияния выдается диалоговое окно с вопросом о разрешении подключить источник данных. Но и только. Само слияние при этом не происходит. |
Если Вы имеете в виду диалог о поиске источника данных, значит у вас не подключен источник в "Свойствах связи с данными".
Репутация: 15
Всего: 17
Все у меня включено.
При открытии документа слияния, по новой политике MS выдается запрос о подключении к источнику данных (это как раз тот запрос SQL о котором Вы пишите) - разрешать его или нет. Выбирать (искать) файл Word не просит, если он остался лежать на том же месте.
Давайте тогда уточнять: какая версия Word? У меня 2003, и в ней процесс открытия документа слияния немного изменен.
Запрос на выполнение команды SQL выдается, но это еще НЕ результаты слияния.
Результат слияния (это имел ввиду автор), это когда получается много страничек, столько - сколько записей в базе.
И если у Вас эти много страничек получаются просто при открытии основного файла слияния, то это меня удивляет.
Репутация: 1
Всего: 1
Цитата(AsIs @ 18.11.2006, 16:55) |
И если у Вас эти много страничек получаются просто при открытии основного файла слияния, то это меня удивляет. |
В смысле много страничек?
У меня всего одна страница - на ней в таблице отображаются данные из 9 записей листа Excel. Т.е. те 9 из около 300, на которых я остался в прошлый раз перед закрытием документа (точнее в прошлый раз сохранения). Чтобы перейти к другим записям, естественно нужен Поиск (в Слиянии). Чтобы печатать документ, не нужно больше ничего.
Репутация: 15
Всего: 17
Цитата(Shymep @ 18.11.2006, 17:06) |
В смысле много страничек? У меня всего одна страница - на ней в таблице отображаются данные из 9 записей листа Excel. Т.е. те 9 из около 300, на которых я остался в прошлый раз перед закрытием документа (точнее в прошлый раз сохранения). Чтобы перейти к другим записям, естественно нужен Поиск (в Слиянии). Чтобы печатать документ, не нужно больше ничего. |
ок. Проблемы терминологии.
Давайте с начала.
Есть понятие основного документа слияния (бланка документа) и документа с результатами слияния.
Основной документ слияния, это тот, в котором вставлены поля слияния, тот с которым мы работали в мастере слияния. В этом документе, если включен редим просмотра данных (но не полей), то отображается подставленная текущая запись из базы. Конечно можно печатать этот документ, но это еще пока не само слияние. Это предварительный просмотр, в отличие от того, что описывается ниже.
Репутация: 1
Всего: 1
AsIs, я кажется только теперь понимаю, о чем идет речь. Судя по всему, я невнимательно прочел вопрос или не понял автора. Но тут действительно есть некоторая неоднозначность между "слить" и "слить в новый документ"
В таком случае, если автора вопроса не устраивает возможность нажать на Панели слияния кнопку Слияние в новый документ, то для автоматизации необходим макрос.
1. Публиковать ссылки на вскрытые компоненты
2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
- Несанкционированная реклама на форуме запрещена
- Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
- Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
- Оставляйте свои записи в "Книге отзывов о работе администрации"
Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Работа с MS Office | Следующая тема » |
[ Время генерации скрипта: 0.1731 ] [ Использовано запросов: 21 ] [ GZIP включён ]
Сейчас мы с Вами рассмотрим пример реализации того, как можно выполнить слияние данных Word с данными Microsoft SQL Server, при этом данный процесс будет автоматизирован средствами VBA Access 2003.
Многие, наверное, уже умеют осуществлять слияние документов Word, например, с источником данных Excel или с тем же SQL сервером, но не все знают, как можно автоматизировать данный процесс или внедрить его в какую-нибудь программу.
Однажды у меня встала задача автоматизировать слияние некого шаблона Word с данными расположенными на SQL сервере, при этом все это необходимо было внедрить в программу, разработанную в Access 2003 (ADP проект). И сегодня я покажу пример решения данной задачи.
Исходные данные
И для начала давайте разберем исходные данные, т.е. что мы имеем.
Итак, в качестве клиента, как я уже сказал, у нас будет выступать ADP проект Access 2003. В качестве источника данных для примера будет выступать SQL Server 2012 Express. На компьютере установлен Microsoft Office 2013 (и Access 2003).
Создадим на сервере тестовую таблицу и заполним ее данными (допустим в базе данных Test). Для этого Вы можете запустить следующую SQL инструкцию.
Заметка! Начинающим программистам рекомендую почитать книгу «SQL код», с помощью которой Вы научитесь работать с языком SQL во всех популярных системах управления базами данных.
Заметка! Если Вы не знаете, что делает вышеуказанная инструкция, рекомендую посмотреть мой видеокурс «T-SQL. Путь программиста от новичка к профессионалу. Уровень 1 – Новичок», который предназначен для начинающих. В нем подробно рассмотрены все базовые конструкции языка SQL, включая все вышеперечисленные.
Создаем файл подключения к источнику данных MS SQL Server
Теперь давайте создадим файл подключения (ODC) к нашему источнику данных. Данный файл будет выступать своего рода «шаблоном файла подключения», так как впоследствии мы можем, и будем переопределять и базу данных и сам SQL запрос.
Для создания файла подключения к SQL серверу давайте откроем Word и стандартным способом создадим данный файл, т.е. с помощью функционала «Рассылки». (Кстати пример создания подключения к SQL серверу из Excel мы с Вами уже рассматривали в материале – Excel — Подключение и получение данных с SQL сервера).
Переходим на вкладку рассылки и в меню «Выбрать получателей» выбираем «Использовать существующий список».
Затем в окне выбора источника данных нажимаем кнопку «Создать».
Далее выбираем тип источника данных, т.е. Microsoft SQL Server. Жмем «Далее».
Потом вводим адрес сервера и нажимаем «Далее».
Затем выбираем базу данных и таблицу для подключения, еще раз напомню, это всего лишь шаблон, все эти параметры мы будем переопределять, жмем «Далее».
И в заключение вводим понятное название файла подключения, а также мы можем сразу его сохранить в нужный нам каталог путем кнопки «Обзор», по умолчанию он сохраняется в «C:\Users\Имя_Пользователя\Documents\Мои источники данных». Нажимаем «Готово».
Все, файл создан, Word можем закрыть без сохранения.
Создаем шаблон Word для слияния
Теперь давайте подготовим шаблон Word, т.е. это тот документ, в который мы будем подставлять данные из базы данных SQL сервера.
Вся подготовка сводится к тому, что нам необходимо вставить поля слияния там, где это нам нужно. Это делается следующим образом. Вкладка «Вставка -> Экспресс-блоки -> Поле».
Ищем поле MERGEFIELD и вводим название поля, которое будет соответствовать полю в источнике данных (в моем случае это ProductName и Price). Жмем «ОК».
Так как у меня это тестовый шаблон в нем текста практически не будет, и выводить я буду всего два поля, у Вас скорей всего будет много текста и много полей слияния.
Код VBA Access 2003 для слияния документа Word с источником данных MS SQL Server
Осталось написать код VBA, который будет осуществлять слияние. Для примера давайте добавим на форму кнопку StartMerge и поле Price для фильтрации данных. Затем в редакторе Visual Basic напишем процедуру для слияния, допустим с названием MergeWord, и в обработчик события кнопки StartMerge (нажатие кнопки) вставляем код вызова этой процедуры. Весь код будет выглядеть следующим образом (я его прокомментировал). Сразу поясню, что шаблон Word и файл ODC у меня лежат в каталоге D:\Test\.
Сохраняем и проверяем работу.
После нажатия на кнопку (StartMerge) запустится Word, в котором уже все данные заполнены и документов будет столько, сколько строк в источнике.
Как видим, все работает. На этом у меня все, надеюсь, материал был полезен. Пока!
Читайте также: