Este artigo demonstra como consultar e actualizar informações numa folha de cálculo do Excel utilizando o ActiveX Data Objects (ADO) de uma página ASP (Active Server Pages). O artigo também descreve as limitações associadas a este tipo de aplicação.
Importante: Quando aplicações de ASP/ADO suportar acesso multi-utilizador, uma folha de cálculo do Excel não suporta. Por conseguinte, este método de consulta e actualizar as informações não suporta acesso simultâneo multi-utilizador.
Para aceder aos dados na folha de cálculo do Excel para que este exemplo, utilize o controlador ODBC da Microsoft para o Excel. Crie uma tabela para aceder aos dados criando um intervalo com nome na folha de cálculo da Excel.
Passos para criar a aplicação de exemplo
- Crie o ficheiro do Excel ADOtest.xls com os seguintes dados na Folha1:
Reduzir esta tabelaExpandir esta tabela
| column1 | column2 | column3 |
|---|
| RR | Isto | 15 |
| bb | teste | 20 |
| ee | funciona | 25 |
Nota Se uma coluna na folha de cálculo Excel contiver texto e números, o controlador de ODBC do Excel não é possível interpretar correctamente o tipo de dados deve ser a coluna. Certifique-se que todas as células numa coluna de estarem do mesmo tipo de dados. Os seguintes três erros podem ocorrer se cada célula de uma coluna não é do mesmo tipo ou tiver tipos mistos entre "texto" e "gerais": - Fornecedor Microsoft OLE DB para controladores de ODBC erro '80040e21'
As propriedades do pedido não podem ser suportadas por este controlador de ODBC.
- Fornecedor Microsoft OLE DB para controladores de ODBC erro '80004005'
A consulta não é actualizável porque não contém nenhuma coluna pesquisável para utilizar como uma chave esperançoso.
- Fornecedor Microsoft OLE DB para controladores de ODBC erro '80004005'
Consulta baseada actualização falhou. Não foi possível encontrar a linha para actualizar.
- Crie um intervalo com nome, myRange1, a folha de cálculo:
- Realce a área de linhas e colunas onde residem os dados.
- No menu Inserir, aponte para nome e clique em definir.
- Introduza myRange1 nome para o intervalo com nome nome.
- Clique em OK.
O intervalo com nome myRange1 contém os seguintes dados:
Reduzir esta tabelaExpandir esta tabela
| column1 | column2 | column3 |
|---|
| RR | Isto | 15 |
| bb | teste | 20 |
| ee | funciona | 25 |
Nota ADO assume que a primeira linha numa consulta Excel contém os cabeçalhos das colunas. Por conseguinte, o intervalo com nome tem de incluir os cabeçalhos das colunas. Este é comportamento diferente do DAO.
Nota Cabeçalhos de coluna não podem ser um número. O controlador do Excel não pode interpretá-las e, em vez disso, devolve uma referência de célula. Interpretado por exemplo, um cabeçalho de coluna de "F1" deverá ser incorrectamente. - Crie um ODBC sistema origem de dados Name (DSN) apontam para o ficheiro ADOTest.xls.
- No painel de controlo, abrir o ODBC Administrator.
- No separador DSN de sistema, clique em Adicionar.
- Seleccione o controlador do Microsoft Excel (*.xls) e clique em ' Concluir '. Se esta opção não existir, terá de instalar o controlador Microsoft ODBC para o Excel a partir do programa de configuração do Excel.
- Escolha ADOExcel para o nome da origem de dados.
- Certifique-se que a versão está definida para a versão correcta do Excel.
- Clique em "Seleccionar livro...", navegue para o ADOTest.xls ficheiro e clique em OK.
- Faça clique sobre o "Opções >>" botão e desmarque a caixa de verificação "Ler apenas".
- Clique em OK e, em seguida, clique novamente em OK.
- Definir permissões num ficheiro ADOTest.xls.
Se o Active Server Page é acedida anonimamente, é necessário garantir que a conta de anónimo (IUSR_ <machinename>) tem, pelo menos, acesso de leitura/escrita (RW) para a folha de cálculo. Se pretende eliminar informações da folha de cálculo, terá de conceder as permissões em conformidade.
Se estiver a autenticar acesso para o Active Server Page, terá de Certifique-se que todos os utilizadores a aceder a sua aplicação têm as permissões adequadas.
Nota Se não definir as permissões adequadas na folha de cálculo, obtém uma mensagem de erro semelhante à seguinte:
Fornecedor Microsoft OLE DB para controladores de ODBC erro '80004005'
[Microsoft][Controlador ODBC do Excel] O Microsoft Jet motor de base de dados não é possível abrir o ficheiro '(desconhecido)'. Já está aberto em modo exclusivo por outro utilizador ou ter permissão para ver os dados.
- Criar uma nova página ASP e colar no 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 -->
- Guardar e atribua o Active Server Page e visualizar 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 Uma actualização foi efectuada em primeira linha do intervalo com nome (após os títulos).
Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
190195
(http://support.microsoft.com/kb/190195/
)
Como ExtractInformation de folha de Excel com DAO