Erro ao escrever/ler no excel via driver DDEClient

Senhores, criei uma aplicação bem simples para escrever/ler em uma célula do Excel via driver DDEClient.
Na tag de comunicação Valor do driver, estão os seguintes parâmetros:

  • Dispositivo: Plan1 (nome da aba da planilha que criei)
  • Item L2C1 (célula A2 do Excel)
  • N1 = 2, N2 = 0, N3 = 0 e N4 = 0

Quando ativo o driver pelo próprio Elipse Studio consigo escrever/ler na célula do Excel sem problemas. Porém, quando tento com a aplicação rodando não consigo de forma alguma escrever/ler na célula.

Lendo o log do driver, retorna o seguinte erro:

17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLConnect(): Application: Excel
17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLConnect(): Topic: Plan1
17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLCreateStringHandle(): String: Excel
17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLCreateStringHandle(): new string Excel
17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLCreateStringHandle(): String: Plan1
17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLCreateStringHandle(): new string Plan1
17/09/2014 15:31:38.708 (0EDC) [DRIVER] DDEMLConnect(): Connecting…
17/09/2014 15:31:38.711 (0EDC) [DRIVER] DDEMLConnect(): DdeConnect() error: 0x400A (DMLERR_NO_CONV_ESTABLISHED)
17/09/2014 15:31:39.699 (10D8) [DRIVER] GetData(): Item m_mapData[Plan1L2C1] not found
17/09/2014 15:31:39.699 (10D8) [DRIVER] <== (0.000) ReadValue({Plan1}L2C1(3.0.0.0)) = ERROR (hr=80004005)

Alguém teve algum problema parecido?

No aguardo.

@lucas, poderia informar, por favor, a versão do Windows e do driver que está utilizando?

@Fernando,

  • Windows 7 Pro, 64 bits
  • DDEClient 1.01 Build 1 - baixado essa semana do site da Elipse

@lucas, neste caso, devido a uma característica de proteção do Windows que foi modificada para versões mais novas do mesmo, tornou-se necessário a utilização do DDEClient com o programa RemoteDDEClient.

Nesta versão, será possível tanto ler (via REQUEST), quanto escrever (via POKE) dados para um DDE Server, via parametrização de Tags “N1/B1 = 0”.

Uma observação importante é que esta é uma versão Beta em fase de testes.

Como utilizar:
Acesse as propriedades do driver “DDEClient.dll” padrão, e habilite a opção “Use Remote DDE Client” e habilite também a comunicação Ethernet para realizar conexão com o software “RemoteDDEClient.exe”, que estará funcionando como um aplicativo “Listener” pela porta 510 (ou qualquer outra definida pelo usuário).

Dessa forma, durante o Runtime do E3 (conta do sistema) o driver “DDEClient.dll” não realizará nenhuma conexão DDE, mas passará parâmetros via Ethernet para o software “RemoteDDEClient.exe” (conta do usuário) que realizará a conexão DDE na mesma conta de usuário do Server DDE, resolvendo os problemas de bloqueio entre contas de sistema e de usuário para os sistemas Vista e Windows 7.

Para uma comunicação local, em uma mesma máquina (E3 + DDEClient + RemoteDDEClient + DDEServer), utilize o IP de loopback “127.0.0.1”.

Para uma comunicação remota, entre duas máquinas (E3 + DDEClient <------> RemoteDDEClient + DDEServer), utilize o IP da máquina de destino (RemoteDDEClient + DDEServer).

Nota:
Primeiro é necessário executar o RemoteDDEClient e habilitar uma conexão “Listen” e, só depois, rodar o driver DDEClient para que ele possa realizar uma conexão Ethernet com o RemoteDDEClient.

Link para download do arquivo: RemoteClientDDE+DriverDDEClient

@Fernando,

Testei essa solução e não fiquei muito satisfeito com os resultados. Além de ser bastante lento, quando escrevo várias células em seguida, em alguns casos ele não consegue escrever. Por vezes escreveu somente a primeira e a última célula.

Parti para uma outra solução.

Segue script abaixo:

'PEGA CAMINHO DO DOMINIO
Dim WshShell
Set WshShell = CreateObject(“WScript.Shell”)
caminho = WshShell.CurrentDirectory

'PEGA O NOME DA PLANILHA MODELO NO CAMINHO DO DOMINIO
StrFile = caminho & “\modelo.xlsx”

'ABRE A PLANILHA MODELO E SUAS ABAS
Set objExcel = CreateObject(“Excel.Application”)
Set objWorkbook = objExcel.Workbooks.Open(strFile,1)
Set objWS1 = objExcel.Worksheets(1)
Set objWS2 = objExcel.Worksheets(2)

'ESCREVE NAS CELULAR DA ABA 1
objWS1.Cells(2,1) = “10”
objWS1.Cells(2,2) = “20”
objWS1.Cells(2,3) = “30”
objWS1.Cells(2,4) = “40”
'ESCREVE NAS CELULAR DA ABA 2
objWS2.Cells(2,1) = “50”
objWS2.Cells(2,2) = “60”
objWS2.Cells(2,3) = “70”
objWS2.Cells(2,4) = “80”

'SALVA PLANILHA COM O NOME DA DATA E HORA ATUAL E FECHA PROCESSO DO EXCEL
Set ActiveWorkbook = objExcel.ActiveWorkbook
objExcel.Application.DisplayAlerts = False
newFile = caminho & “” & Day(Now) & “-” & Month(Now) & “-” & Year(Now) & " " & Hour(Now) & “-” & Minute(Now) & “-” & Second(Now) & “.xlsx”
objExcel.ActiveWorkbook.SaveAs newFile
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit

Agradeço a ajuda.

Bom dia, o arquivo Remoteclient não está mais disponível, vocês poderiam fazer novamente o upload?
Tentei usar este script mas não tive sucesso.
At,

O link está funcionando novamente.

http://downloads.elipse.com.br/pub/DriverDDERemoteClientWin7.zip

Bom dia o link não está disponível

Jefferson, enviei os arquivos para o seu e-mail.

Bom dia

Não tive tempo de testar ainda mas obrigado pela atenção.

Att