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:
- Chyba 80040e21 Zprostředkovatel Microsoft OLE DB pro ovladače ODBC: Tento ovladač ODBC nepodporuje vlastnosti požadavku.
- 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.
- 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:
- Zvýrazněte řádky a sloupce, ve kterých se nacházejí vaše data.
- V nabídce Insert (Vložit) přejděte na Name (Název) a klikněte na Define (Definovat).
- Jako název pojmenované oblasti zadejte název myRange1.
- 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.
- V Ovládací panely otevřete správce ROZHRANÍ ODBC.
- Na kartě System DSN (Systémový název DSN) klikněte na Add (Přidat).
- 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.
- Jako název zdroje dat zvolte ADOExcel.
- Ujistěte se, že je verze nastavená na správnou verzi Excelu.
- Klikněte na Vybrat sešit, přejděte do souboru ADOTest.xls a klikněte na OK.
- Klikněte na tlačítko Možnosti>> a zrušte zaškrtnutí políčka Jen pro čtení.
- 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.
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 -->
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.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro