Вопрос или проблема
У меня есть MS-Word и Excel (MS Office 2019, если это имеет значение). Я использую Word для создания листов красивых ярлыков, которые буду наклеивать на календарь. Ярлыки являются изображениями, а не текстом. Страница содержит 6 × 15 ярлыков. Ранее я делал это, painstakingly вставляя изображение на каждый ярлык, но мне это надоело. Поэтому теперь я использую слияние почты в Word.
Теперь каждый ярлык имеет поле (в смысле, в котором термин поле использует Quick Parts) вот такого вида:
{ INCLUDEPICTURE { IF TRUE "{ MERGEFIELD Filename }" } \d}
Затем я использую ODBC-соединение с файлом Excel, чтобы получить значение Filename
для каждого ярлыка из таблицы слияния почты и подставляю его в поле INCLUDEPICTURE
, так чтобы соответствующее изображение отобразилось на ярлыке. Это может показаться неэлегантным, но работает хорошо.
Word получает список имен файлов из Excel, используя оператор SQL ODBC
SELECT * FROM `'Public Holidays$'`
и Public Holidays — это название вкладки в таблице Excel.
Если я хочу предоставить другой список имен файлов для слияния почты, я могу сделать
Mailings | Select Recipients | Use an existing list... | +Connect to a New Data Source.odc
| Open data source: OLE DB Database Files (OK)
| What kind of data source?: ODBC DSN (Next)
| Excel Files (Next) | Select the database: (path to Excel file),
☑ Connect to a specific table:
и в списке таблиц я вижу несколько имен вида 'Public Holidays$'
, которые указывают на вкладки с таким же названием в электронной таблице (без завершающего знака $
).
Затем я добавил новую вкладку в ту же электронную таблицу.
Что я ожидал, так это что новая вкладка появится (после закрытия как MS-Word, так и Excel и перезапуска) в этом списке таблиц. Но этого не случилось. После того, как я провозился с этим целое утро, я обнаружил, что иногда она появляется, а иногда нет.
Исходное соединение с электронной таблицей Excel было настроено с помощью мастера MS-Word. Я бродил в замешательстве и не могу точно вспомнить, как это все заработало. Я не могу воспроизвести то, что я сделал.
Что я хочу знать, так это то, как вкладка в электронной таблице Excel, являющаяся таблицей ODBC DSN, появляется в списке таблиц ODBC с добавленным $
, и почему это происходит иногда, а иногда нет? Что особенного мне нужно сделать, чтобы новая вкладка появилась в списке? Я подозреваю, что это связано с вкладкой, потому что вкладка, которую я создаю, дублируя исходную, появляется в списке таблиц, но если я просто вставляю новую вкладку, эта вкладка не появляется в списке таблиц. Так, по крайней мере, кажется.
Я уже выяснил, что если я настраиваю именованный диапазон в электронной таблице Excel, это имя появляется в списке таблиц (без добавленного $
) и это решает практическую проблему.
Но я хочу понять, как некоторые вкладки Excel появляются в списке как таблицы с $
в конце имени, а другие — нет. Долгий опыт работы с Windows заставляет меня ожидать, что имена ресурсов, заканчивающиеся на $
, имеют магию. В этом случае, какая это магия?
(Изменено с моего оригинального поста)
Насколько я могу судить, эта проблема возникает из-за ошибки Microsoft, связанной со специфическим маршрутом, который вы используете для подключения к источнику данных Excel.
Самое простое решение, вероятно, заключается в том, чтобы выбрать .xls (или .xlsx) напрямую в диалоговом окне Select Data Source
, а не нажимать кнопку New Source… в этом диалоговом окне. Это означает, что вам нужно будет найти .xls, если он не находится в вашей папке My Data Sources
.
Если вы это сделаете, как только вы выберете .xls/.xlsx, что произойдет, зависит от того, проверили ли вы опцию Word->File->Options->Advanced->General->Confirm file format conversion on open
.
Если вы не проверяли ее, Word попытается открыть книгу, используя соответствующий провайдер OLEDB. Провайдер OLEDB был стандартным провайдером Windows Word для файлов Excel более 20 лет и обычно с ним проще работать, чем с любым из вариантов ODBC. Однако могут быть причины, по которым вам нужно использовать драйвер ODBC (например, два провайдера/драйвера форматируют числа по-разному), в этом случае есть еще одна процедура подключения, которую вы можете использовать.
Если вы проверили это, Word отобразит диалоговое окно Confirm Data Source
. Если файл является файлом .xlsx, вы должны увидеть только один вариант, OLE DB Database Files
. Выберите его, и Word должен представить список листов и именованных диапазонов. Если файл является файлом .xls, вы можете увидеть один или несколько вариантов ODBC, а также вариант DDE. Но все же выберите вариант OLE DB и продолжайте с этого момента.
Существуют, по существу, как минимум 3 различных маршрута, которые вы можете использовать для подключения через ODBC/OLEDB.
Маршрут OLEDB просто использует соответствующий провайдер OLEDB, у которого есть диалог, отображающий объекты, которые этот провайдер «видит».
Существует еще один аналогичный маршрут, который просто использует соответствующий ODBC-драйвер. У него более запутанный диалог, где вам (а) возможно, нужно будет повторно выбрать имя файла, или диалог может выбрать неправильный файл, и (б) вам нужно будет нажать кнопку его Options… и ВЫБРАТЬ флажок SYSTEM TABLES, чтобы убедиться, что диалог отображает все объекты, которые он может видеть. Я могу объяснить это, если вам действительно нужно продолжать использовать ODBC.
Эти диалоги OLEDB и ODBC отображают разные списки друг от друга и также могут отображать разные вещи в зависимости от того, открыта ли книга в Excel или нет. (например, драйвер ODBC отображает имена скрытых листов, если книга открыта в Excel, но не отображает, если нет).
Маршрут, который вы использовали, делает еще одно — он открывает книгу, используя OLE DB Provider для ODBC Drivers, и это использует соответствующий ODBC-драйвер для Excel. Этот маршрут отображает свой собственный список объектов, которые он может видеть. Но я думаю, что здесь есть ошибка, потому что он, похоже, может «видеть» только имена листов, в которых есть пробелы. (Я подозреваю, что на самом деле это «имена листов, которые заставляют драйвер окружать имя одиночными кавычками»). Поэтому это действительно не самый полезный маршрут в общем случае.
Ответ или решение
ODBC (Open Database Connectivity) – это стандартный интерфейс для доступа к базам данных из различных программных приложений. Для того чтобы в Microsoft Word удачно интегрировать таблицы из Excel с использованием ODBC, необходимо понимать, как Excel зарегистрирует свои таблицы, особенно те, которые соответствуют листам (вкладкам).
Определение и наименование ODBC таблиц в Excel
Когда вы создаете новый лист в Excel, он становится частью книги, и, как правило, каждый лист представляет собой отдельную таблицу для ODBC. Каждой таблице (листву) Excel автоматически присваивается имя, основанное на наименовании листа, и к этому имени добавляется символ $
. Например, если вы создаете лист с именем "Public Holidays", он будет доступен как 'Public Holidays$'
.
1. Правила именования:
- Имена листов: Имена листов в Excel должны соответствовать определенным требованиям: они не могут содержать символы, такие как
:
,/
,\
,?
, и не должны начинаться с пробела. - Добавление символа
$
: Это символ важен для ODBC, так как он указывает на таблицы (вклады) в Excel. Когда имя листа корректно распознается, он отображается в ODBC с добавленным знаком$
.
2. Понимание проблемы видимости:
Ваша проблема кроется в том, что не все листы могут отображаться в ODBC. Использование ODBC в сочетании с Excel может зависеть от нескольких факторов:
- Открытие/закрытие книги: Иногда, когда книга Excel открыта в Excel, ODBC может отображать разные наборы листов по сравнению с теми, которые видны, когда книга закрыта.
- Обновление ODBC метаданных: Важно обновлять данные ODBC после создания нового листа. Убедитесь, что вы обновляете соединение или перезапускаете приложение, чтобы увидеть изменения.
Решение проблемы с новым листом
Если новый лист не отображается в ODBC, попробуйте следующие шаги:
- Проверьте, что лист не скрыт: Скрытые листы могут не отображаться, поэтому убедитесь, что ваш лист виден.
- Создайте лист с уникальным именем: Постарайтесь избежать наименований, повторяющих уже существующие имена.
- Проверьте настройки ODBC: В диалоговом окне выбора источника данных убедитесь, что выбрана правильная база данных.
- Используйте именованные диапазоны: Как вы уже упомянули, именованные диапазоны хорошо отображаются в ODBC, поэтому это может быть хорошим решением.
Заключение
Чтобы выделять новые листы Excel в ODBC, следите за условиями их создания и именования. Помните, что правильная регистрация нового листа не всегда происходит автоматически, и чаще всего зависит от программной среды, в которой вы работаете. Изучая аспекты ODBC и настройки подключения, помимо текущих способов, вы сможете оптимизировать работу и избегать подобных проблем в будущем.