Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Prezados,
na construção do script preciso ler arquivo xls protegido por senha, porem ao ler o arquivo em 'Dados de Arquivo/Arquivos de Tabela' é apresentada seguinte mensagem: 'O arquivo Excel não pode ser lido porque está encriptado'.
gastaria de saber se existe uma possibilidade de ler esse arquivo xls.
Paulo André
Paulo,
Interessante que hoje fiz um teste com arquivo XLSX e o QV consegue ler os dados pela opção de Arquivo de Tabela. Então uma opção talvez mais simples é migrar o arquivo para formato XLSX.
Se vc não puder migrar o formato do arquivo, será necessário criar uma conexão ODBC e usar macro para criar uma instância do Excel. Há um tempo atrás descobri isso aqui na comunidade, mas não lembro mais a thread para dar os créditos. Segue QVW e XLS de exemplo em anexo. A senha de proteção do XLS é "qv".
Alguns pontos importantes:
- no módulo de macro, selecionar System Access
- no painel inferior da tela de script, selecionar a aba Settings e marcar a opção 'Can Execute external programs'.
Fernando,
o xls enviado possui segurança apenas pra alteração correto? no meu caso existe proteção para abrir o arquivo.
Paulo
Na macro, o codigo VBS para abrir o XLS tem que incluir a senha:
myExcelWorker.Workbooks.Open sFileName,,,,"SenhaDoExcel"
Descobri isso agora. Legal!
Fernando, como faço para abrir um xlsx com senha na abertura do arquivo?
fpedrassani, tudo o q eu sei está aí em cima... acho q o QV por padrão não conseguirá abrir o seu arquivo, e aí acho q vc terá q recorrer ao esquema com a macro.
Certo Fernando,
inseri aquela linha com a senha no final, e o arquivo continua sem ler o xlsx, inclusive não consigo nem carregá-lo via Arquivos de Tabela. Segue abaixo a macro:
public myExcelWorker
function OpenXLS(sFileName)
' Create an Excel instance
Set myExcelWorker = CreateObject("Excel.Application")
' Disable Excel UI elements
myExcelWorker.DisplayAlerts = False
myExcelWorker.AskToUpdateLinks = False
myExcelWorker.AlertBeforeOverwriting = False
myExcelWorker.Workbooks.Open(sFileName),,,, 66264
end function
function CloseXLS()
myExcelWorker.ActiveWorkBook.Close False
myExcelWorker.Quit
set myExcelWorker = Nothing
end function
se coloco a senha dentro de aspas duplas acusa erro na linha "myExcelWorker.ActiveWorkBook.Close False"