Olá, boa noite.
É possível o AHK ler um arquivo Excel (.XLS) sem que a pessoa que está executando o script tenha o Excel instalado em sua maquina?
Se sim, como?
Ler XLS sem Excel Instalado
Moderator: Gio
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
- flyingDman
- Posts: 2848
- Joined: 29 Sep 2013, 19:01
Re: Ler XLS sem Excel Instalado
Existem várias tentativas no fórum. Como este: viewtopic.php?f=6&t=95251
Eu gosto deste método: viewtopic.php?t=102348&p=454940#p454989. Instale a função em uma "library" ou inclua em seu script.
Isso requer um download da Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=54920. Depois de instalar este "Database Engine", não há mais nenhuma ação a ser tomada.
Exemplo:
função:
Eu gosto deste método: viewtopic.php?t=102348&p=454940#p454989. Instale a função em uma "library" ou inclua em seu script.
Isso requer um download da Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=54920. Depois de instalar este "Database Engine", não há mais nenhuma ação a ser tomada.
Exemplo:
Code: Select all
datasource := "C:\Users\" A_UserName "\Scripts\ado_data_test1.xlsx"
arr := getXcells(datasource)
cols := arr.1.maxindex()
for x,y in Arr
for a,b in y
z .= (a = 1 ? "" : "`t") . b . (a = cols ? "`n" : "")
msgbox % trim(z,"`n") ;~ clipboard := trim(z,"`n")
Code: Select all
getXcells(datasource, sheet := "sheet1") ; requires https://www.microsoft.com/en-us/download/details.aspx?id=54920
{
global colcnt, rowcnt
arr := [], rowcnt := 0
objConnection := ComObjCreate("ADODB.Connection"), objRecordSet := ComObjCreate("ADODB.Recordset")
try objConnection.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" . dataSource . "; Extended Properties='Excel 12.0 xml;HDR=no;IMEX=1';")
catch
{
msgbox,48,, Error! Your data could not be retrieved, 2
return
}
try objRecordset.Open("Select * FROM [" Sheet "$]", objConnection, 3, 3, 1) ; adOpenStatic = 3 , adLockOptimistic = 3 , adCmdText = 1
catch
{
msgbox,48,, Error! %Sheet% does not exist, 2
return
}
pFields := objRecordset.Fields
while !objRecordset.EOF
{
row := [], ++rowcnt
Loop, % colcnt := pFields.Count
row[A_Index] := pFields.Item(A_Index-1).value
arr.push(row)
objRecordset.MoveNext
}
objRecordSet.Close()
objConnection.Close()
objRecordSet := ""
objConnection := ""
return arr
}
14.3 & 1.3.7
Re: Ler XLS sem Excel Instalado
Bom dia Thalesduarte.
Tem várias formas de fazer isso. Aqui vai um exemplo: aqui na empresa, usamos o libreoffice no lugar do MSOffice devido a uma péssima experiência de pós-vendas que tivemos com a microsoft. Esse pacote (libreoffice) é totalmente free e contém o Calc, que é um programa análogo ao Excel. O Calc pode ser automatizado pelo AutoHotkey através da API COM com::sun::star. Sendo assim, se a razão pela qual a máquina não possui o Excel é devido à questões de licenciamento, você pode optar por instalar o Libreoffice nela.
Se isso não for o bastante, e você precisar mesmo ler o XLS sem instalar absolutamente nada além do script, você pode criar sua própria função de leitura de XLS (isso seria trabalhoso, mas é plenamente possível). Se estiver interessado em criar uma função própria para ler o conteúdo do formato XLS, aqui vai o link do documento que descreve a estrutura desse tipo de arquivo: https://interoperability.blob.core.windows.net/files/MS-XLS/%5bMS-XLS%5d.pdf
Por fim, saiba que o formato XLSX (formato padrão desde o Excel 2007) é simplesmente uma pasta comprimida que contém, entre outros arquivos, arquivos XLS (logo, é relativamente ler um arquivo XLSX se você possui um leitor de XLS pronto).
Espero ter ajudado, se tiver alguma dúvida, basta postar abaixo.
Tem várias formas de fazer isso. Aqui vai um exemplo: aqui na empresa, usamos o libreoffice no lugar do MSOffice devido a uma péssima experiência de pós-vendas que tivemos com a microsoft. Esse pacote (libreoffice) é totalmente free e contém o Calc, que é um programa análogo ao Excel. O Calc pode ser automatizado pelo AutoHotkey através da API COM com::sun::star. Sendo assim, se a razão pela qual a máquina não possui o Excel é devido à questões de licenciamento, você pode optar por instalar o Libreoffice nela.
Se isso não for o bastante, e você precisar mesmo ler o XLS sem instalar absolutamente nada além do script, você pode criar sua própria função de leitura de XLS (isso seria trabalhoso, mas é plenamente possível). Se estiver interessado em criar uma função própria para ler o conteúdo do formato XLS, aqui vai o link do documento que descreve a estrutura desse tipo de arquivo: https://interoperability.blob.core.windows.net/files/MS-XLS/%5bMS-XLS%5d.pdf
Por fim, saiba que o formato XLSX (formato padrão desde o Excel 2007) é simplesmente uma pasta comprimida que contém, entre outros arquivos, arquivos XLS (logo, é relativamente ler um arquivo XLSX se você possui um leitor de XLS pronto).
Espero ter ajudado, se tiver alguma dúvida, basta postar abaixo.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
-
- Posts: 95
- Joined: 13 Sep 2021, 06:08
Re: Ler XLS sem Excel Instalado
Boa tarde a todos.
Agradeço bastante pelo conhecimento publicado aqui.
Entendo a complexidade.
Optei na minha aplicação de ler um arquivo txt no lugar de um XLS.
Porém, irei estudar esse material divulgado.
Agradeço bastante a participação de todos e apoio nessa dúvida.
Atenciosamente,
Thales
Agradeço bastante pelo conhecimento publicado aqui.
Entendo a complexidade.
Optei na minha aplicação de ler um arquivo txt no lugar de um XLS.
Porém, irei estudar esse material divulgado.
Agradeço bastante a participação de todos e apoio nessa dúvida.
Atenciosamente,
Thales
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 12 guests