importação direta arquivo excel para global
Pessoal, a quem interessar possa.....
Desenvolvi uma Classe utilizando o python para ler um arquivo excel e gravar o conteúdo em global. Vejam como ficou: (fiquem a vontade para melhorias ou ajustes)
{ /// Importa uma planilha Excel para a global ^ExcelData
/// Parâmetro: caminhoArquivo (Ex: "C:\Temp\dados.xlsx")
/// Exemplo de uso: Do ##class(Utils.Importador).LerExcel("C:\Temp\minha_planilha.xlsx",$username)
ClassMethod LerExcel(caminhoArquivo As %String, nomeUsuario As %String) [ Language = python ]
{
import os
try:
from openpyxl import load_workbook
import iris if not os.path.exists(caminhoArquivo):
print(f"ERRO: Arquivo não encontrado: {caminhoArquivo}")
return print(f"\n--- Lendo arquivo: {caminhoArquivo} ---")
wb = load_workbook(caminhoArquivo, data_only=True)
ws = wb.active
# Limpa global
g_ref = iris.gref('^ExcelData')
del g_ref[nomeUsuario]
count = 0
for row in ws.iter_rows(min_row=2, values_only=True):
count += 1
lista_dados = []
for celula in row:
if celula is None:
lista_dados.append("")
else:
lista_dados.append(str(celula))
dados_para_gravar = "|".join(lista_dados) if count == 1:
print(f"Gravando (formato string IRIS): {dados_para_gravar}")
g_ref[nomeUsuario,count] = dados_para_gravar
print(f"Sucesso! {count} linhas gravadas em ^ExcelData.") except Exception as e:
print(f"ERRO: {e}")
} }
Comments
Fiz alguns ajustes e agora é possível gerenciar o nome da global, nome do usuário no primeiro nó da global, e também inseri uma validação de conteúdo.
Corrigi a limpeza da global, sintaxe anterior não estava correta.
segue fonte:
/// Parâmetro: caminhoArquivo (Ex: "C:\Temp\dados.xlsx")
/// Exemplo de uso: Do ##class(Ophelos.Tools).LerExcel("C:\Temp\minha_planilha.xlsx",$username,nome da Global, conteudo para validação do arquivo - primeira célula da primeira linha )
ClassMethod ImportaExcel(caminhoArquivo As %String, nomeUsuario As %String, nomeGlobal As %String, conteudoArquivo As %String) [ Language = python ]
{
import os
try:
from openpyxl import load_workbook
import iris
# cria variável de transição IRIS x Python
g_ref = iris.gref(nomeGlobal) if not os.path.exists(caminhoArquivo):
g_ref[nomeUsuario] = 'Arquivo Não Encontrado'
return
wb = load_workbook(caminhoArquivo, data_only=True)
ws = wb.active
#limpa a global
g_ref.kill([nomeUsuario])
count = 0
for row in ws.iter_rows(min_row=1, values_only=True):
count += 1 if count == 1:
primeira_celula = str(row[0]).strip() if row[0] is not None else ""
if primeira_celula != conteudoArquivo:
g_ref[nomeUsuario] = 'Arquivo Não é ' + conteudoArquivo
return lista_dados = []
for celula in row:
if celula is None:
lista_dados.append("")
else:
lista_dados.append(str(celula))
dados_para_gravar = "|".join(lista_dados)
g_ref[nomeUsuario,count] = dados_para_gravar
g_ref[nomeUsuario] = count
except Exception as e:
g_ref[nomeUsuario]= 'Erro Execução'
}