Abfragen und Aktualisieren von Excel-Daten mithilfe von ADO aus ASP
Zusammenfassung
In diesem Artikel wird veranschaulicht, wie Sie Informationen in einer Excel-Kalkulationstabelle mithilfe von ActiveX Data Objects (ADO) von einer ASP-Seite (Active Server Pages) abfragen und aktualisieren. In diesem Artikel werden auch die Einschränkungen beschrieben, die mit diesem Anwendungstyp verbunden sind.
Wichtig
ASP/ADO-Anwendungen unterstützen zwar den Zugriff auf mehrere Benutzer, ein Excel-Arbeitsblatt hingegen nicht. Daher unterstützt diese Methode zum Abfragen und Aktualisieren von Informationen keinen gleichzeitigen Zugriff mit mehreren Benutzern.
Weitere Informationen
Verwenden Sie den Microsoft ODBC-Treiber für Excel, um auf die Daten in Ihrem Excel-Arbeitsblatt für dieses Beispiel zuzugreifen. Erstellen Sie eine Tabelle, um auf die Daten zuzugreifen, indem Sie einen benannten Bereich in Ihrer Excel-Kalkulationstabelle erstellen.
Schritte zum Erstellen einer Beispielanwendung
Erstellen Sie die Excel-Datei ADOtest.xls mit den folgenden Daten in sheet1:
column1 column2 spalte3 Rr das 15 Bb test 20 Ee Funktioniert 25 Hinweis
Wenn eine Spalte in Ihrer Excel-Tabelle sowohl Text als auch Zahlen enthält, kann der Excel-ODBC-Treiber den Datentyp der Spalte nicht richtig interpretieren. Stellen Sie sicher, dass alle Zellen in einer Spalte denselben Datentyp aufweisen. Die folgenden drei Fehler können auftreten, wenn jede Zelle in einer Spalte nicht denselben Typ aufweist oder wenn Sie die Typen zwischen "text" und "allgemein" gemischt haben:
- Fehler "80040e21" des Microsoft OLE DB-Anbieters für ODBC-Treiber. Die Anforderungseigenschaften können von diesem ODBC-Treiber nicht unterstützt werden.
- Fehler "80004005" des Microsoft OLE DB-Anbieters für ODBC-Treiber: Die Abfrage kann nicht aktualisiert werden, da sie keine durchsuchbaren Spalten enthält, die als hoffnungsvoller Schlüssel verwendet werden können.
- Fehler "80004005": Fehler beim abfragebasierten Update des Microsoft OLE DB-Anbieters für ODBC-Treiber. Die zu aktualisierende Zeile konnte nicht gefunden werden.
Erstellen Sie einen benannten Bereich, myRange1, in Ihrer Kalkulationstabelle:
- Markieren Sie den Zeilen- und Spaltenbereich, in dem sich Ihre Daten befinden.
- Zeigen Sie im Menü Einfügen auf Name, und klicken Sie auf Definieren.
- Geben Sie als Benannter Bereichsname den Namen myRange1 ein.
- Klicken Sie auf OK.
Der benannte Bereich myRange1 enthält die folgenden Daten:
column1 column2 spalte3 Rr das 15 Bb test 20 Ee Funktioniert 25 Hinweis
- ADO geht davon aus, dass die erste Zeile in einer Excel-Abfrage die Spaltenüberschriften enthält. Daher muss der benannte Bereich die Spaltenüberschriften enthalten. Dies unterscheidet sich von DAO.
- Spaltenüberschriften dürfen keine Zahl sein. Der Excel-Treiber kann sie nicht interpretieren und gibt stattdessen einen Zellbezug zurück. Beispielsweise würde eine Spaltenüberschrift von "F1" falsch interpretiert.
Erstellen Sie einen ODBC-Systemdatenquellennamen (DSN), der auf die ADOTest.xls-Datei verweist.
- Öffnen Sie im Systemsteuerung den ODBC-Administrator.
- Klicken Sie auf der Registerkarte System DSN auf Hinzufügen.
- Wählen Sie Microsoft Excel-Treiber (*.xls) aus, und klicken Sie auf Fertig stellen. Wenn diese Option nicht vorhanden ist, müssen Sie den Microsoft ODBC-Treiber für Excel über das Excel-Setup installieren.
- Wählen Sie ADOExcel als Datenquellenname aus.
- Stellen Sie sicher, dass die Version auf die richtige Version von Excel festgelegt ist.
- Klicken Sie auf "Arbeitsmappe auswählen...", navigieren Sie zur ADOTest.xls Datei, und klicken Sie auf OK.
- Klicken Sie auf die Schaltfläche "Optionen>>", und deaktivieren Sie das Kontrollkästchen "Schreibgeschützt".
- Klicken Sie auf OK und dann erneut auf OK.
Legen Sie Berechtigungen für die ADOTest.xls-Datei fest.
Wenn anonym auf Ihre Active Server-Seite zugegriffen wird, müssen Sie sicherstellen, dass das anonyme Konto (IUSR_<MachineName>) mindestens Über Lese-/Schreibzugriff (RW) auf das Arbeitsblatt verfügt. Wenn Sie Informationen aus dem Arbeitsblatt löschen möchten, müssen Sie die Entsprechenden Berechtigungen erteilen.
Wenn Sie den Zugriff auf Ihre Active Server-Seite authentifizieren, müssen Sie sicherstellen, dass alle Benutzer, die auf Ihre Anwendung zugreifen, über die entsprechenden Berechtigungen verfügen.
Wenn Sie nicht die entsprechenden Berechtigungen für das Arbeitsblatt festlegen, erhalten Sie eine Fehlermeldung ähnlich der folgenden:
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.
Erstellen Sie eine neue ASP-Seite, und fügen Sie den folgenden Code ein:
<!-- 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 -->
Speichern Und benennen Sie Ihre Active Server-Seite, und zeigen Sie sie im Browser an. Folgendes wird angezeigt:
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|
Hinweis
Für die erste Zeile ihres benannten Bereichs (nach den Überschriften) wurde eine Aktualisierung durchgeführt.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für