Excel-gegevens opvragen en bijwerken met behulp van ADO van ASP

Samenvatting

In dit artikel ziet u hoe u gegevens in een Excel-spreadsheet opvraagt en bijwerkt met behulp van ActiveX Data Objects (ADO) vanaf een ASP-pagina (Active Server Pages). In het artikel worden ook de beperkingen beschreven die zijn gekoppeld aan dit type toepassing.

Belangrijk

Hoewel ASP/ADO-toepassingen toegang voor meerdere gebruikers ondersteunen, doet een Excel-spreadsheet dat niet. Daarom biedt deze methode voor het opvragen en bijwerken van gegevens geen ondersteuning voor gelijktijdige toegang voor meerdere gebruikers.

Meer informatie

Gebruik het Microsoft ODBC-stuurprogramma voor Excel om toegang te krijgen tot de gegevens in uw Excel-spreadsheet voor dit voorbeeld. Maak een tabel voor toegang tot de gegevens door een benoemd bereik te maken in uw Excel-spreadsheet.

Stappen voor het maken van een voorbeeldtoepassing

  • Maak het Excel-bestand ADOtest.xls met de volgende gegevens in blad1:

    kolom1 kolom2 kolom3
    Rr Dit 15
    Bb Test 20
    Ee Werkt 25

    Opmerking

    Als een kolom in uw Excel-werkblad zowel tekst als getallen bevat, kan het ODBC-stuurprogramma van Excel niet goed interpreteren welk gegevenstype de kolom moet zijn. Zorg ervoor dat alle cellen in een kolom van hetzelfde gegevenstype zijn. De volgende drie fouten kunnen optreden als elke cel in een kolom niet van hetzelfde type is of als u de typen 'tekst' en 'algemeen' hebt gemengd:

    1. Microsoft OLE DB-provider voor ODBC-stuurprogramma's fout '80040e21' De aanvraageigenschappen kunnen niet worden ondersteund door dit ODBC-stuurprogramma.
    2. Microsoft OLE DB-provider voor ODBC-stuurprogramma's fout '80004005' De query kan niet worden bijgewerkt omdat deze geen doorzoekbare kolommen bevat om te gebruiken als een hoopvolle sleutel.
    3. Microsoft OLE DB-provider voor ODBC-stuurprogramma's fout '80004005' Update op basis van query is mislukt. De rij die moet worden bijgewerkt, kan niet worden gevonden.
  • Maak een benoemd bereik, myRange1, in uw spreadsheet:

    1. Markeer de rij(en) en kolom(s) gebied waarin uw gegevens zich bevinden.
    2. Wijs in het menu Invoegen de optie Naam aan en klik op Definiëren.
    3. Voer de naam myRange1 in als naam benoemd bereik.
    4. Klik op OK.

    Het benoemde bereik myRange1 bevat de volgende gegevens:

    kolom1 kolom2 kolom3
    Rr Dit 15
    Bb Test 20
    Ee Werkt 25

    Opmerking

    • ADO gaat ervan uit dat de eerste rij in een Excel-query de kolomkoppen bevat. Daarom moet het benoemde bereik de kolomkoppen bevatten. Dit is een ander gedrag dan DAO.
    • Kolomkoppen kunnen geen getal zijn. Het Excel-stuurprogramma kan ze niet interpreteren en retourneert in plaats daarvan een celverwijzing. Een kolomkop van 'F1' wordt bijvoorbeeld verkeerd geïnterpreteerd.
  • Maak een ODBC System Data Source Name (DSN) die verwijst naar het ADOTest.xls-bestand.

    1. Open de ODBC-beheerder in de Configuratiescherm.
    2. Klik op het tabblad Systeem-DSN op Toevoegen.
    3. Selecteer Microsoft Excel-stuurprogramma (*.xls) en klik op Voltooien. Als deze optie niet bestaat, moet u het Microsoft ODBC-stuurprogramma voor Excel installeren vanuit Excel setup.
    4. Kies ADOExcel als gegevensbronnaam.
    5. Zorg ervoor dat de versie is ingesteld op de juiste versie van Excel.
    6. Klik op Werkmap selecteren..., blader naar het ADOTest.xls bestand en klik op OK.
    7. Klik op de knop Opties>> en schakel het selectievakje Alleen-lezen uit.
    8. Klik op OK en klik vervolgens nogmaals op OK.
  • Stel machtigingen in voor het ADOTest.xls-bestand.

Als uw active-serverpagina anoniem wordt geopend, moet u ervoor zorgen dat het anonieme account (IUSR_<MachineName>) ten minste rw-toegang (lezen/schrijven) heeft tot het spreadsheet. Als u gegevens uit het werkblad wilt verwijderen, moet u de machtigingen dienovereenkomstig verlenen.

Als u de toegang tot uw Active Server-pagina wilt verifiëren, moet u ervoor zorgen dat alle gebruikers die toegang hebben tot uw toepassing, over de juiste machtigingen beschikken.

Als u niet de juiste machtigingen voor het werkblad instelt, krijgt u een foutbericht dat er ongeveer als volgt uitziet:

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.
  1. Maak een nieuwe ASP-pagina en plak de volgende code:

       <!-- 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. Sla de pagina Active Server op en geef deze een naam en bekijk deze in de browser. U ziet het volgende:

    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|
    

Opmerking

Er is een update uitgevoerd op de eerste rij van uw benoemd bereik (na de koppen).