How To Query and Update Excel Data Using ADO From ASP
Resumo
Este artigo demonstra como consultar e atualizar informações numa folha de cálculo do Excel com o ActiveX Data Objects (ADO) a partir de uma página do Active Server Pages (ASP). O artigo também descreve as limitações associadas a este tipo de aplicação.
Importante
Embora as aplicações ASP/ADO suportem o acesso de vários utilizadores, uma folha de cálculo do Excel não. Por conseguinte, este método de consulta e atualização de informações não suporta o acesso simultâneo de vários utilizadores.
Mais Informações
Para aceder aos dados na sua folha de cálculo do Excel para este exemplo, utilize o Controlador Microsoft ODBC para Excel. Crie uma tabela para aceder aos dados ao criar um Intervalo com Nome na sua folha de cálculo do Excel.
Passos para Criar Aplicação de Exemplo
Crie o ficheiro do Excel ADOtest.xls com os seguintes dados na folha1:
coluna1 coluna2 coluna3 rr este 15 bb testar 20 ee funciona 25 Nota
Se uma coluna na sua folha de cálculo do Excel contiver texto e números, o controlador ODBC do Excel não conseguirá interpretar corretamente que tipo de dados deve ser a coluna. Certifique-se de que todas as células numa coluna têm o mesmo tipo de dados. Os três erros seguintes podem ocorrer se cada célula numa coluna não for do mesmo tipo ou se tiver os tipos misturados entre "texto" e "geral":
- Erro "80040e21" do Fornecedor OLE DB para Controladores ODBC: as propriedades do pedido não podem ser suportadas por este Controlador ODBC.
- Erro "80004005" do Fornecedor OLE DB para Controladores ODBC A consulta não é atualizável porque não contém colunas pesquisáveis para utilizar como chave esperançosa.
- Falha na atualização baseada em consultas do Fornecedor OLE DB para Controladores ODBC "80004005". Não foi possível localizar a linha a atualizar.
Crie um Intervalo com Nome, myRange1, na sua folha de cálculo:
- Realce as linhas e colunas onde residem os dados.
- No menu Inserir, aponte para Nome e clique em Definir.
- Introduza o nome myRange1 para o nome do Intervalo Com Nome.
- Clique em OK.
O Intervalo com Nome myRange1 contém os seguintes dados:
coluna1 coluna2 coluna3 rr este 15 bb testar 20 ee funciona 25 Nota
- O ADO pressupõe que a primeira linha numa consulta do Excel contém os cabeçalhos de coluna. Por conseguinte, o Intervalo com Nome tem de incluir os cabeçalhos de coluna. Este é um comportamento diferente do DAO.
- Os cabeçalhos de coluna não podem ser um número. O controlador do Excel não consegue interpretá-los e, em vez disso, devolve uma referência de célula. Por exemplo, um cabeçalho de coluna de "F1" seria mal interpretado.
Crie um Nome de Origem de Dados do Sistema ODBC (DSN) que aponte para o ficheiro de ADOTest.xls.
- No Painel de Controlo, abra o Administrador ODBC.
- No separador DSN do Sistema, clique em Adicionar.
- Selecione Controlador do Microsoft Excel (*.xls) e clique em Concluir. Se esta opção não existir, terá de instalar o controlador Microsoft ODBC para Excel a partir da configuração do Excel.
- Selecione ADOExcel para o Nome da Origem de Dados.
- Certifique-se de que a Versão está definida para a versão correta do Excel.
- Clique em "Selecionar Livro...", navegue para o ficheiro ADOTest.xls e clique em OK.
- Clique no botão "Opções>>" e desmarque a caixa de verificação "Só de Leitura".
- Clique em OK e, em seguida, clique novamente em OK.
Defina permissões no ficheiro ADOTest.xls.
Se a sua Página do Active Server for acedida anonimamente, tem de se certificar de que a Conta Anónima (IUSR_<MachineName>) tem, pelo menos, acesso de Leitura/Escrita (RW) à folha de cálculo. Se quiser eliminar informações da folha de cálculo, tem de conceder as permissões em conformidade.
Se estiver a autenticar o acesso à sua Página do Active Server, tem de garantir que todos os utilizadores que acedem à sua aplicação têm as permissões adequadas.
Se não definir as permissões adequadas na folha de cálculo, receberá uma mensagem de erro semelhante à seguinte:
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.
Crie uma nova página ASP e cole o seguinte código:
<!-- 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 -->
Guarde e atribua um nome à sua Página do Servidor Ativo e veja-a no browser. Verá o seguinte:
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|
Nota
Foi efetuada uma atualização na primeira linha do seu Intervalo com Nome (a seguir aos cabeçalhos).
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários