× Linguagem de Programação ADVPL

Perguntas Importação de planilha

Mais
8 anos 5 meses atrás #30870 por gustavo
Galera bom dia!

Alguém tem algum modelo básico de importação de planilha (csv ou xls) que ode me passar por favor?

Obrigado!

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30872 por kanaamlrr
Respondido por kanaamlrr no tópico Importação de planilha
Pega aeee

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30873 por will
Respondido por will no tópico Importação de planilha
Bom dia!

Esse programa importa um csv... importar xls nunca vi em meu jovem.
#Include "PROTHEUS.CH"
#INCLUDE 'FILEIO.CH'
#INCLUDE 'TopConn.CH'
#INCLUDE "rwmake.ch"

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma ³TstGeracsvºAutor ³William Costa º Data ³ 02/04/2015 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc. ³Programa de importacao de uma planilha em csv para levar º±±
±±º ³ao programa protheus o cadastro de Latitude e longitude º±±
±±º ³do cadastro de clientes º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso ³ SIGAEIC º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/

User Function TstGeracsv()

Local cBuffer := ""
Local cFileOpen := ""
Local cTitulo1 := "Selecione o arquivo"
Local cExtens := "Arquivo CSV | *.csv"
Local nPos1 := 0
Local nPos2 := 0
Local nPos3 := 0
Local nPos4 := 0
Local cCliente := ''
Local cLoja := ''
Local cLongitude := ''
Local cLatitude := ''

cFileOpen := cGetFile(cExtens,cTitulo1,2,,.T.,GETF_LOCALHARD+GETF_NETWORKDRIVE,.T.)

If !File(cFileOpen)
MsgAlert("Arquivo texto: "+cFileOpen+" não localizado",cCadastro)
Return(.F.)
EndIf

FT_FUSE(cFileOpen) //ABRIR
FT_FGOTOP() //PONTO NO TOPO
ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER

While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO
IncProc()

// Capturar dados
cBuffer := FT_FREADLN() //LENDO LINHA

nPos1 := at(";",cBuffer) // Cliente
nPos2 := at(";",subs(cBuffer,nPos1+1)) // Loja
nPos3 := at(";",subs(cBuffer,nPos1+nPos2+1)) // Longitude
nPos4 := at(";",subs(cBuffer,nPos1+nPos2+nPos3+1)) // Latitude

cCliente := STRZERO(VAL(subs(cBuffer,01,nPos1-1)),6)
cLoja := STRZERO(VAL(subs(cBuffer,nPos1+1,nPos2 - 1)),2)
cLongitude := subs(cBuffer,nPos1+nPos2 + 1,nPos3 - 1)
cLatitude := subs(cBuffer,nPos1+nPos2 + nPos3 + 1,nPos3 - 1)

DBSELECTAREA("SA1")
DbSetOrder(1)

IF SA1->(DbSeek(xFilial("SA1")+cCliente+cLoja))
RecLock("SA1",.F.)

SA1->A1_XLONGIT := cLongitude
SA1->A1_XLATITU := cLatitude


MsUnlock()

ENDIF


DBCLOSEAREA("SA1")

FT_FSKIP() //proximo registro no arquivo txt

EndDo

FT_FUSE() //fecha o arquivo txt

Return(.T.)

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30876 por kanaamlrr
Respondido por kanaamlrr no tópico Importação de planilha
William,
Pega o link que eu passei que ele importa um XLS.
Tecnicamente ele realiza a conversão do xls/xlsx para csv via macro do excel e depois gera um array e retorna o array com o conteúdo completo da planilha.
Qualquer dúvida só dizer!
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30917 por gustavo
Respondido por gustavo no tópico Importação de planilha
Obrigado senhores, criei o meu fonte e deu tudo certo. Gostaria de mais uma ajudinha esse meu fonte ele também tem que verificar se já existe um registro ele altera apenas os campos que o usuário passou na planilha. Tentei fazer isso via DbSeek até funcionou mas ele acaba passando uma posição a mais para o array. os senhores tem alguma dica?

Segue o fonte:

#Include 'Protheus.ch'

User Function IMPSB1()

Local cArq := cGetFile('Planilha (*.CSV) |*.CSV|',OemToAnsi('Selecione a planilha'),,'C:\',.T.,GETF_LOCALFLOPPY + GETF_LOCALHARD),;
cFile := FT_FUse(cArq),;
aAreaSB1 := SB1->(GetArea()),;
aDados := {},;
aSB1 := {},;
aArray := {},;
aCampos := {},;
nOpc := 0,;
i := 0,;
nLinAtu

Private lMsHelpAuto := .F.,;
lMsErroAuto := .F.

If cFile == -1
Aviso('Erro de importação','Falha ao importar arquivo',{'voltar'},1)
Return
EndIf

AADD(aSB1,'B1_COD')
AADD(aSB1,'B1_DESC')
AADD(aSB1,'B1_TIPO')
AADD(aSB1,'B1_UM')
AADD(aSB1,'B1_LOCPAD')

FT_FGoTop()

While !FT_FEOF()

nLinAtu := FT_FReadLn()
aArray := Separa(nLinAtu,';')

IncProc('Importando o arquivo')
ProcRegua(Len(aArray))

DbSelectArea('SB1')
DbSetOrder(1)
If !SB1->(DbSeek(xFilial('SB1') + aArray[1]))
nOpc := 3
i := 1
For nX := 1 To Len(aArray)
AADD(aDados,{aSB1,aArray,Nil})
i++
Next nX

MsExecAuto({|X,Y|MATA010(X,Y)},aDados,nOpc)

If lMsErroAuto
Mostraerro()
Return
EndIf

FT_FSkip()
Else
nOpc := 4
i := 2

AADD(aCampos,B1_COD)
AADD(aCampos,B1_DESC)
AADD(aCampos,B1_TIPO)
AADD(aCampos,B1_UM)
AADD(aCampos,B1_LOCPAD)

For nX := 1 To Len(aArray)
If !Empty(aArray)
AADD(aDados,{aSB1,aArray,Nil})
ElseIf Empty(aArray)
AADD(aDados,{aCampos,aCampos,Nil})
EndIf
i++
Next nX

MsExecAuto({|X,Y|MATA010(X,Y)},aDados,nOpc)

If lMsErroAuto
Mostraerro()
Return
EndIf

FT_FSkip()
EndIf
EndDo

FT_FUse()

Return

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.107 segundos
Joomla templates by a4joomla