Dotazování a aktualizace dat aplikace Excel pomocí ADO z ASP

Souhrn

Tento článek ukazuje, jak dotazovat a aktualizovat informace v excelové tabulce pomocí datových objektů ActiveX (ADO) ze stránky ASP (Active Server Pages). Článek také popisuje omezení, která jsou přidružena k tomuto typu aplikace.

Důležité

I když aplikace ASP/ADO podporují přístup více uživatelů, excelová tabulka ne. Proto tato metoda dotazování a aktualizace informací nepodporuje souběžný přístup více uživatelů.

Další informace

Pokud chcete získat přístup k datům v excelové tabulce pro tuto ukázku, použijte ovladač Microsoft ODBC pro Excel. Vytvořte tabulku pro přístup k datům vytvořením pojmenované oblasti v excelové tabulce.

Postup vytvoření ukázkové aplikace

  • Vytvořte excelový soubor ADOtest.xls s následujícími daty na listu List1:

    sloupec 1 sloupec2 sloupec 3
    Rr Tento 15
    Bb Test 20
    Ee Funguje 25

    Poznámka

    Pokud sloupec v excelové tabulce obsahuje text i čísla, ovladač ODBC aplikace Excel nedokáže správně interpretovat datový typ sloupce. Ujistěte se, že všechny buňky ve sloupci jsou stejného datového typu. K následujícím třem chybám může dojít v případě, že každá buňka ve sloupci není stejného typu nebo máte typy smíšené mezi textem a obecnými typy:

    1. Chyba 80040e21 Zprostředkovatel Microsoft OLE DB pro ovladače ODBC: Tento ovladač ODBC nepodporuje vlastnosti požadavku.
    2. Chyba zprostředkovatele Microsoft OLE DB pro ovladače ODBC 80004005 Dotaz není aktualizovatelný, protože neobsahuje žádné sloupce, které by se použily jako klíč naděje.
    3. Chyba zprostředkovatele Microsoft OLE DB pro ovladače ODBC 80004005 selhala aktualizace založená na dotazech. Řádek, který chcete aktualizovat, nebyl nalezen.
  • Vytvořte v tabulce pojmenovanou oblast myRange1:

    1. Zvýrazněte řádky a sloupce, ve kterých se nacházejí vaše data.
    2. V nabídce Insert (Vložit) přejděte na Name (Název) a klikněte na Define (Definovat).
    3. Jako název pojmenované oblasti zadejte název myRange1.
    4. Klikněte na OK.

    Pojmenovaná oblast myRange1 obsahuje následující data:

    sloupec 1 sloupec2 sloupec 3
    Rr Tento 15
    Bb Test 20
    Ee Funguje 25

    Poznámka

    • ADO předpokládá, že první řádek excelového dotazu obsahuje záhlaví sloupců. Proto musí pojmenovaná oblast obsahovat záhlaví sloupců. Toto chování se liší od dao.
    • Záhlaví sloupců nesmí být číslo. Ovladač aplikace Excel je nemůže interpretovat a místo toho vrátí odkaz na buňku. Například záhlaví sloupce "F1" by bylo nesprávně interpretováno.
  • Vytvořte název zdroje dat ODBC (DSN) odkazující na soubor ADOTest.xls.

    1. V Ovládací panely otevřete správce ROZHRANÍ ODBC.
    2. Na kartě System DSN (Systémový název DSN) klikněte na Add (Přidat).
    3. Vyberte Ovladač Aplikace Microsoft Excel (*.xls) a klikněte na Dokončit. Pokud tato možnost neexistuje, musíte ovladač Microsoft ODBC pro Excel nainstalovat z instalačního programu Excelu.
    4. Jako název zdroje dat zvolte ADOExcel.
    5. Ujistěte se, že je verze nastavená na správnou verzi Excelu.
    6. Klikněte na Vybrat sešit, přejděte do souboru ADOTest.xls a klikněte na OK.
    7. Klikněte na tlačítko Možnosti>> a zrušte zaškrtnutí políčka Jen pro čtení.
    8. Klikněte na OK a potom znovu klikněte na OK.
  • Nastavte oprávnění pro soubor ADOTest.xls.

Pokud se k vaší stránce active serverového serveru přistupuje anonymně, musíte se ujistit, že anonymní účet (IUSR_<MachineName>) má alespoň přístup pro čtení a zápis (RW) k tabulce. Pokud chcete odstranit informace z tabulky, musíte příslušná oprávnění udělit.

Pokud ověřujete přístup ke stránce Active Server, musíte zajistit, aby všichni uživatelé přistupující k aplikaci měli příslušná oprávnění.

Pokud v tabulce nenastavíte příslušná oprávnění, zobrazí se chybová zpráva podobná následující:

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. Vytvořte novou stránku ASP a vložte následující kód:

       <!-- 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. Uložte a pojmenujte stránku Active Server a zobrazte ji v prohlížeči. Uvidíte následující:

    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|
    

Poznámka

Na prvním řádku pojmenované oblasti (za nadpisy) byla provedena aktualizace.