Запрос и обновление данных Excel с помощью ADO из ASP
Сводка
В этой статье показано, как запрашивать и обновлять сведения в электронной таблице Excel с помощью объектов данных ActiveX (ADO) со страницы Active Server Pages (ASP). В этой статье также описываются ограничения, связанные с этим типом приложений.
Важно!
Хотя приложения ASP/ADO поддерживают многопользовательский доступ, электронная таблица Excel этого не делает. Таким образом, этот метод запроса и обновления сведений не поддерживает одновременный доступ для нескольких пользователей.
Дополнительные сведения
Чтобы получить доступ к данным в электронной таблице Excel для этого примера, используйте Microsoft ODBC Driver for Excel. Создайте таблицу для доступа к данным, создав именованный диапазон в электронной таблице Excel.
Действия по созданию примера приложения
Создайте файл Excel ADOtest.xls со следующими данными на листе 1:
column1 column2 column3 Rr Это 15 Bb test 20 Ee Работает 25 Примечание.
Если столбец в электронной таблице Excel содержит как текст, так и цифры, драйвер ODBC для Excel не может правильно интерпретировать тип данных, который должен быть в столбце. Убедитесь, что все ячейки в столбце имеют один тип данных. Следующие три ошибки могут возникнуть, если каждая ячейка в столбце не относится к одному типу или типы смешаны между "text" и "general":
- Ошибка поставщика Microsoft OLE DB для драйверов ODBC "80040e21" Свойства запроса не поддерживаются этим драйвером ODBC.
- Ошибка поставщика Microsoft OLE DB для драйверов ODBC "80004005" Запрос не может быть обновлен, так как он не содержит столбцов с возможностью поиска для использования в качестве ключа надежды.
- Ошибка поставщика Microsoft OLE DB для драйверов ODBC "80004005" сбой обновления на основе запроса. Не удалось найти обновляемую строку.
Создайте именованный диапазон myRange1 в электронной таблице:
- Выделите области строк и столбцов, в которых находятся данные.
- В меню Вставка наведите указатель мыши на пункт Имя и нажмите кнопку Определить.
- Введите имя myRange1 в поле Имя именованного диапазона.
- Нажмите кнопку ОК.
Именованный диапазон myRange1 содержит следующие данные:
column1 column2 column3 Rr Это 15 Bb test 20 Ee Работает 25 Примечание.
- ADO предполагает, что первая строка запроса Excel содержит заголовки столбцов. Таким образом, именованный диапазон должен включать заголовки столбцов. Это поведение отличается от DAO.
- Заголовки столбцов не могут быть числами. Драйвер Excel не может интерпретировать их и вместо этого возвращает ссылку на ячейку. Например, заголовок столбца "F1" будет неправильно истолкованы.
Создайте имя системного источника данных ODBC (DSN), указывающее на файл ADOTest.xls.
- В панель управления откройте администратора ODBC.
- На вкладке Системный DSN нажмите кнопку Добавить.
- Выберите Драйвер Microsoft Excel (*.xls) и нажмите кнопку Готово. Если этот параметр не существует, необходимо установить драйвер Microsoft ODBC для Excel из программы установки Excel.
- Выберите ADOExcel в качестве имени источника данных.
- Убедитесь, что для значения Version задана правильная версия Excel.
- Щелкните "Выбрать книгу...", перейдите к файлу ADOTest.xls и нажмите кнопку ОК.
- Нажмите кнопку "Параметры>>" и снимите флажок "Только для чтения" проверка.
- Нажмите кнопку ОК, а затем снова нажмите кнопку ОК.
Задайте разрешения для файла ADOTest.xls.
Если доступ к странице активного сервера осуществляется анонимно, необходимо убедиться, что анонимная учетная запись (IUSR_<MachineName>) имеет по крайней мере доступ на чтение и запись (RW) к электронной таблице. Если вы хотите удалить сведения из электронной таблицы, необходимо предоставить соответствующие разрешения.
При проверке подлинности доступа к странице активного сервера необходимо убедиться, что все пользователи, обращаюющиеся к приложению, имеют соответствующие разрешения.
Если вы не задали соответствующие разрешения на электронную таблицу, появится сообщение об ошибке следующего вида:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Excel Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.
Создайте страницу ASP и вставьте следующий код:
<!-- Begin ASP Source Code --> <%@ LANGUAGE="VBSCRIPT" %> <% Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "ADOExcel" Set objRS = Server.CreateObject("ADODB.Recordset") objRS.ActiveConnection = objConn objRS.CursorType = 3 'Static cursor. objRS.LockType = 2 'Pessimistic Lock. objRS.Source = "Select * from myRange1" objRS.Open %> <br> <% Response.Write("Original Data") 'Printing out original spreadsheet headings and values. 'Note that the first recordset does not have a "value" property 'just a "name" property. This will spit out the column headings. Response.Write("<TABLE><TR>") For X = 0 To objRS.Fields.Count - 1 Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>") Next Response.Write("</TR>") objRS.MoveFirst While Not objRS.EOF Response.Write("<TR>") For X = 0 To objRS.Fields.Count - 1 Response.write("<TD>" & objRS.Fields.Item(X).Value) Next objRS.MoveNext Response.Write("</TR>") Wend Response.Write("</TABLE>") 'The update is made here objRS.MoveFirst objRS.Fields(0).Value = "change" objRS.Fields(1).Value = "look" objRS.Fields(2).Value = "30" objRS.Update 'Printing out spreadsheet headings and values after update. Response.Write("<br>Data after the update") Response.Write("<TABLE><TR>") For X = 0 To objRS.Fields.Count - 1 Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>") Next Response.Write("</TR>") objRS.MoveFirst While Not objRS.EOF Response.Write("<TR>") For X = 0 To objRS.Fields.Count - 1 Response.write("<TD>" & objRS.Fields.Item(X).Value) Next objRS.MoveNext Response.Write("</TR>") Wend Response.Write("</TABLE>") 'ADO Object clean up. objRS.Close Set objRS = Nothing objConn.Close Set objConn = Nothing %> <!-- End ASP Source Code -->
Сохраните и присвойте имя странице Active Server и просмотрите ее в браузере. Отобразится следующее:
Original Data: |column1|column2|column3| |------------|------------|------------| |rr|this|30| |bb|test|20| |tt|works|25| Data after the update: |column1|column2|column3| |------------|------------|------------| |change|look|30| |bb|test|20| |tt|works|25|
Примечание.
Обновление было выполнено в первой строке именованного диапазона (после заголовков).
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по