如何查询和更新 Excel 使用 ASP 来自 ADO 的数据

文章翻译 文章翻译
文章编号: 195951 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文演示了如何查询和更新在从活动服务器页面 (ASP) 页中使用 ActiveX 数据对象 (ADO) Excel 电子表格中的信息。本文还介绍与这种类型的应用程序相关联的限制。

注意: 尽管 ASP/ADO 应用程序支持多用户访问,Excel 电子表格没有。 因此,这种查询和更新信息的方法不支持多用户并发访问。

更多信息

若要进行此示例的 Excel 电子表格中数据的 Excel 中使用 Microsoft ODBC 驱动程序。创建访问 Excel 电子表格中创建一个命名范围的数据的表。

创建示例应用程序的步骤

  • 创建包含下列数据在 sheet1 中的 Excel 文件 ADOtest.xls 执行以下操作:

    收起该表格展开该表格
    列 1列 2column3
    rr15
    bb测试20
    下一页工作原理25

    注意如果您的 Excel 电子表格中的一列包含文本和数字,Excel ODBC 驱动程序不能正确解释哪些列应该是的数据类型。请确保在列中的所有单元格属于同一数据类型。如果某一列中的每个单元格不是相同的类型,或者您具有类型混合之间"文本"和"常规",则会发生以下三个错误:
    1. Microsoft OLE DB 提供程序的 ODBC 驱动程序错误"80040e21"
      申请属性不受此 ODBC 驱动程序。
    2. Microsoft OLE DB 提供程序的 ODBC 驱动程序错误"80004005"
      查询不可更新,因为它包含要用作 hopeful 键可搜索的列。
    3. Microsoft OLE DB 提供程序的 ODBC 驱动程序错误"80004005"
      查询基于更新失败。找不到要更新行。
  • 创建命名范围 myRange1,电子表格中执行以下操作:

    1. 突出显示您的数据所在的行和列区域。
    2. 在插入菜单上指向名称,,然后单击定义。
    3. 输入名称 myRange1 命名范围的名称。
    4. 单击确定。
    命名范围 myRange1 包含以下数据:

    收起该表格展开该表格
    列 1列 2column3
    rr15
    bb测试20
    下一页工作原理25


    注意ADO 会假设在 Excel 查询中的第一行包含列标题。因此,命名范围必须包含列标题。 这是从 DAO 的不同行为。

    注意列标题不能是数字。Excel 驱动程序不能对其进行解释,并改,返回单元格引用。例如对于"f1"的列标题将被误解。
  • 创建一个 ODBC 系统数据源名称 (DSN) 指向 ADOTest.xls 文件。
    1. 从控件面板中打开 ODBC 管理器。
    2. 在系统 DSN 选项卡上单击添加。
    3. 选择 Microsoft Excel 驱动程序 (*.xls),然后单击完成。 如果不存在此选项,则需要安装用于 Excel 的 Microsoft ODBC 驱动程序,从 Excel 安装程序。
    4. 选择数据源名称 ADOExcel。
    5. 请确保该版本设置为正确的版本的 Excel。
    6. 单击"选择工作簿...",浏览到该 ADOTest.xls 文件,然后单击确定。
    7. 单击在"选项 >>"按钮,然后清除"只读"复选框。
    8. 单击确定,然后再次单击确定。
  • ADOTest.xls 文件上设置权限。
如果匿名访问您的活动服务器页面,则需要确保匿名帐户 (IUSR_ <machinename>) 至少拥有读/写 (读写) 访问电子表格。如果要从电子表格中删除信息则需要相应地授予的权限。

如果您活动服务器页面对访问进行身份验证,则需要确保访问您的应用程序的所有用户都有适当的权限。

注意如果不在电子表格上设置适当的权限,将得到一条错误消息类似于以下内容:

Microsoft OLE DB 提供程序的 ODBC 驱动程序错误"80004005"

[] Microsoft[ODBC Excel 驱动程序]Microsoft Jet 数据库引擎无法打开文件 (未知)。它已经被另一个的用户以独占方式打开,或者您需要查看其数据的权限。
  1. 创建一个新的 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 -->
    					
  2. 保存并命名您的活动服务器页面并在浏览器中查看它。您将看到以下:
          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
    					
注意更新您的命名范围中的第一行上执行 (之后标题)。

参考

有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
190195如何从 Excel 工作表使用 DAO 的 ExtractInformation

属性

文章编号: 195951 - 最后修改: 2004年7月1日 - 修订: 5.2
这篇文章中的信息适用于:
  • Microsoft ActiveX Data Objects 1.0
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft Active Server Pages 4.0
  • Microsoft Data Access Components 2.5
关键字:?
kbmt kbcode kbhowto kbmdacnosweep KB195951 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 195951
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com