Problema ao ler dados do Excel

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

jrufino
Posts: 33
Joined: 25 Oct 2019, 07:17

Problema ao ler dados do Excel

30 Oct 2020, 09:18

Bom dia pessoal, tudo bem com vcs? :thumbup:
Vou ser direto, tenho uma planilha e criei um script para pegar os dados dessa planilha para jogar dentro de um sistema pois não tenho como importar os dados.
Eu consigo pegar os dados da planilha normalmente quando é texto, o problema é quando os dados são números, o script está trocando a virgula por ponto e acrescentando 6 casas decimais (ou seis 0) depois do inteiro, vou exemplificar, digamos que eu tenhas as células abaixo com os seguintes valores:
A1 = 1
B1 = T1
C1 = T1,00
D1 = 82,60

os script mostra o seguinte resultado:
A1 = 1.000000 (acrescenta o ponto e mais 6 zeros)
B1 = T1 (não sofre alteração)
C1 = T1.00 (aqui ele só altera de virgula para ponto)
D1 = 82.600000 (aqui ele muda virgula para ponto e acrescenta 0 ate ficar com 6 casas decimas depois do ponto)

já tentei multiplicar mas só faz aumentar a quantidade de zeros :facepalm:

Estou pegando os valores das células através do código abaixo:
valorCelulaC :=Excel.Range(ind_C).Value

Alguém sabe me informar como posso pegar exatamente o valor da célula como aparece no Excel?
jrufino
Posts: 33
Joined: 25 Oct 2019, 07:17

Re: Problema ao ler dados do Excel

30 Oct 2020, 09:56

Já tinha pesquisado bastante antes de postar minha dúvida/problema aqui porém até então sem sucesso.
Mas agora que estava indo almoçar, abri um ultimo site e eis que encontrei a solução para meu problema :dance: :lol:

Bastava trocar o ".Value" no final do comando para ".text" que o script pega exatamente o valor da célula que é visualizado dentro do Excel, então comando fica assim:
valorCelulaC :=Excel.Range(ind_C).text

Espero que ajude quem mais passar por este problema pois já estava desde ontem batendo cabeça com isso.
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Problema ao ler dados do Excel

30 Oct 2020, 10:27

Bom dia Jrufino.

:arrow: Que bom que já resolveu seu problema, mas como eu já estava escrevendo o post abaixo, fica a explicação para quem precisar:

O comando Range().Value coleta o valor da célula em questão (e não o texto). Pegar o valor como texto pode resolver se o objetivo for somente exibir o valor, mas se precisarmos trabalhar com os valores numéricos mesmo, temos que entender o seguinte:

Infelizmente os países em geral, ainda que usem os mesmos algarismos arábicos (de 0 a 9), adotam mais de uma sintaxe para a escrita das casas de milhares e/ou decimais. Sendo assim, o valor MIL SETECENTOS E TRINTA E DOIS COM QUARENTA E CINCO CENTAVOS seria assim escrito em alguns países:

Suiça: 1'732.45
Brasil: 1.732,45
Estados Unidos: 1,732.45

Então como você pode ver, o padrão americano (de onde vem a maioria das linguagens de programação, inclusive o AutoHotkey) é o adotado. Mas além disso, no caso da programação, muitas linguagens não utilizam a separação dos milhares (para simplificar algumas operações matemáticas). Isso resulta na interpretação de números exclusivamente com a seguinte sintaxe:

C++, Autohotkey, etc (programação): 1732.45

No caso do Excel, os valores numéricos são armazenados como dado, e portanto o que faz você enxergar 82,60 na sua planilha é uma configuração de exibição. Portanto, quando o AutoHotkey coleta a informação diretamente dele, ele recebe apenas os dados (valor) e a informação do tipo de dados (floating point), e por isso, exibe o número na forma padrão de exibição do AutoHotkey para floating points (que é a explicada acima para muitas linguagens de programação, porém com 6 casas decimais, já que é um dado em floating point).

:arrow: Para resolver você pode utilizar a função embutida Round() para transformar o número em quantas casas você quiser e depois usar a função embutida StrReplace() para trocar o ponto por vírgula. Cabe destacar que só será possível trabalhar o número matematicamente ANTES de trocar o ponto por vírgula, pois quando você colocar ele no formato brasileiro, ele será interpretado como texto pelo AutoHotkey.

Code: Select all

VAR := 82.600000

msgbox % "Padrão Programação arredondado para 2 casas: `n" . ROUND(VAR, 2) ; Arredondar para 2 casas decimais.

msgbox % "Padrão Brasileiro arredondado para 2 casas: `n" . StrReplace(ROUND(VAR, 2), ".", "`,") ; Arredondar para 2 casas decimais e DEPOIS transformar em Brasileiro.

; SE QUISER TRABALHAR MATEMATICAMENTE O VALOR, VOCÊ PRECISA FAZÊ-LO ANTES DE TRANSFORMAR EM FORMATO BRASILEIRO:

VAR_2 := VAR + 5
msgbox % "Adicionado 5 e DEPOIS transformado em Padrão Brasileiro arredondado para 2 casas: `n" . StrReplace(ROUND(VAR_2, 2), ".", "`,")
jrufino
Posts: 33
Joined: 25 Oct 2019, 07:17

Re: Problema ao ler dados do Excel

30 Oct 2020, 13:29

Perfeito Gio! Melhor explicação que esta, impossível :bravo:
Aproveitando o assunto, tens alguns links sobre o autohotkey e excel mais avançado que este aqui do forum?
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Problema ao ler dados do Excel

03 Nov 2020, 10:00

Bom dia Jrufino.

Então, o modelo COM (que é o mais utilizado para automação do Excel em AutoHotkey) é bastante dependente dos nomes corretos dos objetos, métodos, propriedades, etc e de sua que suas conexões estejam absolutamente certas até a última letra. Sendo assim, sempre temos uma certa dificuldade em criar código COM novo a partir de um script. Porém uma vez descoberto "o código que faz alguma coisa" (tal como negritar, adicionar bordas, selecionar até o fim pela esquerda, etc), fazer o mesmo em qualquer script se torna algo tão fácil como copiar e colar (alterando a referência da célula ou intervalo, é claro).

Por isso "os tutoriais" de COM pra excel acabam sendo nada mais nada menos do que coletâneas de códigos testados com as descrições das ações. Usar estas ações conhecidas (ou pesquisar códigos conhecidamente funcionais) é a melhor maneira de desenvolver um relatório ou tabela automatizado no Excel a partir do AutoHotkey.

Mas além da coletânea de códigos no nosso tutorial em português temos alguns tutoriais em inglês e o usuário Joe Glines tem uma coletânea maior ainda com descrições e vídeos explicando passo-a-passo uma série de ações elencadas que você pode acessar aqui - OBS: site externo.

Se ainda assim o que você quiser fazer não estiver nas listas, as vezes vale a pena tentar gravar um Macro usando a ferramenta embutida do Excel e depois olhar o código VBA correspondente. Este código não é 1:1 com o código AutoHotkey, mas pode ajudar, uma vez que os objetos são os mesmos (apenas a sintaxe difere). Se tudo o mais falhar, também pode criar um tópico aqui no nosso fórum de suporte, perguntando específicamente sobre o que quer fazer (exemplo: "como sublinhar uma célula usando COM no Excel", ou "como colocar bordas estenas em uma tabela 3x3", etc.

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: droyo and 46 guests