- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Importação de planilha
×
Linguagem de Programação ADVPL
Perguntas Importação de planilha
- gustavo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 70
- Obrigados Recebidos: 0
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- will
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 81
- Obrigados Recebidos: 0
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.)
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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!
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.
- gustavo
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 70
- Obrigados Recebidos: 0
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
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Importação de planilha
Tempo para a criação da página:0.107 segundos