Jak wykonywać zapytania i aktualizować dane programu Excel przy użyciu usługi ADO z poziomu usługi ASP

Podsumowanie

W tym artykule pokazano, jak wykonywać zapytania i aktualizować informacje w arkuszu kalkulacyjnym programu Excel przy użyciu obiektów danych ActiveX (ADO) ze strony Active Server Pages (ASP). W tym artykule opisano również ograniczenia skojarzone z tym typem aplikacji.

Ważna

Chociaż aplikacje ASP/ADO obsługują dostęp wielu użytkowników, arkusz kalkulacyjny programu Excel tego nie robi. W związku z tym ta metoda wykonywania zapytań i aktualizowania informacji nie obsługuje współbieżnego dostępu wielu użytkowników.

Więcej informacji

Aby uzyskać dostęp do danych w arkuszu kalkulacyjnym programu Excel dla tego przykładu, użyj sterownika Microsoft ODBC dla programu Excel. Utwórz tabelę, aby uzyskać dostęp do danych, tworząc nazwany zakres w arkuszu kalkulacyjnym programu Excel.

Kroki tworzenia przykładowej aplikacji

  • Utwórz plik programu Excel ADOtest.xls z następującymi danymi w arkuszu1:

    kolumna1 kolumna2 kolumna 3
    Rr 15
    Bb Test 20
    Ee Działa 25

    Uwaga

    Jeśli kolumna w arkuszu kalkulacyjnym programu Excel zawiera zarówno tekst, jak i liczby, sterownik ODBC programu Excel nie może poprawnie interpretować typu danych, jakim powinna być kolumna. Upewnij się, że wszystkie komórki w kolumnie mają ten sam typ danych. Następujące trzy błędy mogą wystąpić, jeśli każda komórka w kolumnie nie ma tego samego typu lub typy są mieszane między "tekstem" i "ogólnym":

    1. Microsoft OLE DB Provider for ODBC Drivers error "80040e21" Właściwości żądania nie mogą być obsługiwane przez ten sterownik ODBC.
    2. Błąd dostawcy usługi Microsoft OLE DB dla sterowników ODBC "80004005" Zapytanie nie jest możliwe do zaktualizowania, ponieważ nie zawiera kolumn z możliwością wyszukiwania do użycia jako klucz z nadzieją.
    3. Błąd "80004005" aktualizacji opartej na zapytaniach dostawcy OLE DB firmy Microsoft dla sterowników ODBC nie powiódł się. Nie można odnaleźć wiersza do zaktualizowania.
  • Utwórz nazwany zakres myRange1 w arkuszu kalkulacyjnym:

    1. Wyróżnij obszar wierszy i kolumn, w którym znajdują się dane.
    2. W menu Wstawianie wskaż pozycję Nazwa, a następnie kliknij pozycję Definiuj.
    3. Wprowadź nazwę myRange1 jako nazwę nazwanego zakresu.
    4. Kliknij przycisk OK.

    Nazwany zakres myRange1 zawiera następujące dane:

    kolumna1 kolumna2 kolumna 3
    Rr 15
    Bb Test 20
    Ee Działa 25

    Uwaga

    • ADO zakłada, że pierwszy wiersz w zapytaniu programu Excel zawiera nagłówki kolumn. W związku z tym nazwany zakres musi zawierać nagłówki kolumn. To jest inne zachowanie niż dao.
    • Nagłówki kolumn nie mogą być liczbą. Sterownik programu Excel nie może ich interpretować, a zamiast tego zwraca odwołanie do komórki. Na przykład nagłówek kolumny "F1" zostanie błędnie zinterpretowany.
  • Utwórz nazwę źródła danych systemu ODBC (DSN) wskazującą plik ADOTest.xls.

    1. W Panel sterowania otwórz administratora ODBC.
    2. Na karcie System DSN kliknij pozycję Dodaj.
    3. Wybierz pozycję Sterownik programu Microsoft Excel (*.xls), a następnie kliknij przycisk Zakończ. Jeśli ta opcja nie istnieje, musisz zainstalować sterownik ODBC firmy Microsoft dla programu Excel z poziomu instalatora programu Excel.
    4. Wybierz pozycję ADOExcel jako nazwę źródła danych.
    5. Upewnij się, że wersja jest ustawiona na poprawną wersję programu Excel.
    6. Kliknij pozycję "Wybierz skoroszyt...", przejdź do pliku ADOTest.xls i kliknij przycisk OK.
    7. Kliknij przycisk "Opcje>>" i wyczyść pole wyboru "Tylko do odczytu".
    8. Kliknij przycisk OK, a następnie kliknij ponownie przycisk OK.
  • Ustaw uprawnienia do pliku ADOTest.xls.

Jeśli dostęp do strony aktywnego serwera jest uzyskiwany anonimowo, musisz upewnić się, że konto anonimowe (IUSR_<MachineName>) ma co najmniej dostęp do odczytu/zapisu (RW) do arkusza kalkulacyjnego. Jeśli chcesz usunąć informacje z arkusza kalkulacyjnego, musisz odpowiednio przyznać uprawnienia.

Jeśli uwierzytelniasz dostęp do strony aktywnego serwera, musisz upewnić się, że wszyscy użytkownicy uzyskujący dostęp do aplikacji mają odpowiednie uprawnienia.

Jeśli nie ustawisz odpowiednich uprawnień w arkuszu kalkulacyjnym, zostanie wyświetlony komunikat o błędzie podobny do następującego:

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. Utwórz nową stronę asp i wklej następujący 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 -->
    
  2. Zapisz i nadaj aktywnej stronie serwera nazwę i wyświetl ją w przeglądarce. Zobaczysz następujące elementy:

    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|
    

Uwaga

Aktualizacja została przeprowadzona w pierwszym wierszu nazwanego zakresu (po nagłówkach).