Så här frågar och uppdaterar du Excel data med ADO från ASP
Anteckning
Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.
Sammanfattning
Den här artikeln visar hur du frågar och uppdaterar information i ett Excel-kalkylblad med hjälp ActiveX ADO (Data Objects) från en ASP-sida (Active Server Pages). I artikeln beskrivs också de begränsningar som är associerade med den här typen av program.
Viktigt
Även om ASP/ADO-program har stöd för åtkomst med flera användare, Excel ett kalkylblad inte. Den här metoden för att fråga och uppdatera information har därför inte stöd för samtidig åtkomst med flera användare.
Mer information
Om du vill komma åt data i Excel-kalkylblad för det här exemplet använder du Microsoft ODBC-drivrutinen för Excel. Skapa en tabell för att komma åt data genom att skapa ett namngivet område i Excel kalkylblad.
Steg för att skapa exempelprogram
Skapa Excel filen ADOtest.xls med följande data i blad1:
kolumn1 kolumn2 kolumn3 rr det här 15 bb test 20 ee fungerar 25 Anteckning
Om en kolumn i Excel-kalkylbladet innehåller både text och tal kan odbc Excel drivrutinen inte tolka vilken datatyp kolumnen ska vara. Kontrollera att alla celler i en kolumn har samma datatyp. Följande tre fel kan uppstå om varje cell i en kolumn inte har samma typ eller om typerna är blandade mellan "text" och "allmänt":
- Microsoft OLE DB-provider för ODBC-drivrutinersfel '80040e21'. Egenskaperna för begäran stöds inte av den här ODBC-drivrutinen.
- Microsoft OLE DB-provider för ODBC-drivrutinerna felmeddelandet "80004005" Frågan kan inte uppdateras eftersom den inte innehåller några sökbara kolumner att använda som förhoppningsvis en nyckel.
- Microsoft OLE DB-providern för ODBC-drivrutinerna felmeddelandet "80004005" Vid frågebaserad uppdatering misslyckades. Det gick inte att hitta raden som ska uppdateras.
Skapa ett namngivet område, myRange1, i kalkylbladet:
- Markera de rader och kolumner där dina data finns.
- Peka på Namn på Infoga-menyn och klicka på Definiera.
- Ange namnet myRange1 för det namngivna områdets namn.
- Klicka på OK.
Det namngivna intervallet myRange1 innehåller följande data:
kolumn1 kolumn2 kolumn3 rr det här 15 bb test 20 ee fungerar 25 Anteckning
- ADO förutsätter att den första raden i Excel frågan innehåller kolumnrubrikerna. Därför måste det namngivna området innehålla kolumnrubrikerna. Det här beteendet skiljer sig från DAO.
- Kolumnrubriker får inte vara tal. Den Excel kan inte tolka dem och returnerar i stället en cellreferens. Till exempel kan en kolumnrubrik i "F1" bli felstavad.
Skapa ett ODBC-system med namnet på datakällan (DSN) som pekar ADOTest.xls filen.
- Öppna ODBC-administratören från Kontrollpanelen.
- Klicka på Lägg till på fliken System-DSN.
- Välj Microsoft Excel drivrutin (*.xls) och klicka på Slutför. Om det här alternativet inte finns måste du installera Microsoft ODBC-drivrutinen för Excel från Excel installationen.
- Välj ADOExcel som namn på datakällan.
- Kontrollera att versionen är inställd på rätt version av Excel.
- Klicka på Välj arbetsbok, bläddra till filen ADOTest.xls och klicka på OK.
- Klicka på knappen ">>" och avmarkera kryssrutan "Skrivskyddade".
- Klicka på OK och sedan på OK igen.
Ange behörigheter för ADOTest.xls filen.
Om active serversidan har åtkomst anonymt måste du kontrollera att det anonyma kontot (IUSR_ ) har minst <MachineName> läs-/skrivåtkomst (RW) till kalkylbladet. Om du vill ta bort information från kalkylbladet måste du tilldela behörigheterna i enlighet med detta.
Om du autentiserar åtkomsten till din Active Server-sida måste du se till att alla användare som öppnar ditt program har rätt behörigheter.
Om du inte anger rätt behörigheter för kalkylbladet visas ett felmeddelande som liknar följande:
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.
Skapa en ny ASP-sida och klistra in i följande kod:
<!-- 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 -->Spara och namnge din Active Server-sida och visa den i webbläsaren. Du kommer att se följande:
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|
Anteckning
En uppdatering utfördes på den första raden i det namngivna området (efter rubrikerna).