Ler XLS sem Excel Instalado

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

Moderator: Gio

thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Ler XLS sem Excel Instalado

03 Sep 2022, 16:04

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?
User avatar
flyingDman
Posts: 2832
Joined: 29 Sep 2013, 19:01

Re: Ler XLS sem Excel Instalado

03 Sep 2022, 18:51

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:

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")
função:

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
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Ler XLS sem Excel Instalado

06 Sep 2022, 09:28

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.
thalesduarte
Posts: 95
Joined: 13 Sep 2021, 06:08

Re: Ler XLS sem Excel Instalado

06 Sep 2022, 10:23

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

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 3 guests