automacao ole excel

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

automacao ole excel

Mensagem por marcelosantos »

Amigos postei um tópico sobre como ler dados de planilha do excel, graças aos amigos do fórum consegui desenvolver um rotina que le a planilha e joga no dbf, testei e esta tudo ok.

Porem o sistema funciona corretamente na minha maquina onde tenho o office completo.

Já nas maquinas dos usuários que usam a versão office starter(por opção do dono da empresa) a rotina não funciona.

Tem como fazer a automação funcionar nessas maquinas mesmo com a versão office starter?
Tem alguma maneira de contornar o problema?

obrigado


Marcelo
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

automacao ole excel

Mensagem por Toledo »

Marcelo, dê mais detalhes sobre o que está ocorrendo e o código que você está usando? É apresentado alguma mensagem de erro?

Outra coisa, o Office Starter por padrão salva os arquivos com a extensão XLSX, mas também pode salvar no formato do Excel 97 - 2003, com a extensão XLS. O arquivo que você está lendo está com qual extensão, XLSX ou XLS?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

automacao ole excel

Mensagem por alxsts »

Olá!

Esse tipo de acesso, via automação OLE exige que o Excel esteja instalado na máquina onde a aplicação está sendo executada.

O ideal é deixar a aplicação livre dessa amarra. Para superar isto, pode-se abrir os documentos do Office via ADO. Tem um exemplo de acesso a Excel por esse método aqui no fórum, postado pelo Quintas: Importando de planilha Excel - nome da planilha
[]´s
Alexandre Santos (AlxSts)
marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

automacao ole excel

Mensagem por marcelosantos »

Saudações, Toledo e demais colegas.

Toledo escreveu:Marcelo, dê mais detalhes sobre o que está ocorrendo e o código que você está usando? É apresentado alguma mensagem de erro?
O erro que da é: error ToleAuto/-1 toleauto:new

Segue o código, porem funciona perfeitamente em uma maquina com o office full, já em uma maquina com office starter,nao funciona. acho que o starter não possibilita essa automação.
Toledo escreveu:Outra coisa, o Office Starter por padrão salva os arquivos com a extensão XLSX, mas também pode salvar no formato do Excel 97 - 2003, com a extensão XLS. O arquivo que você está lendo está com qual extensão, XLSX ou XLS?
Toledo isso não é problema porque a planilha é gerada do sistema contmatic sem a minha interferência, eu apenas passo as linha para o DBF.

eu peguei a planilha gerada através do contmatic e gerei um dbf que é lido por outro sistema aqui na empresa, o office starter não le e não gera essa planilha. A automação ole acontece dentro do prg em harbour sem a interferência do office starter.


Acho que a citação do nosso colega e interessante, não havia pensado nisso.

Desde já obrigado amigos.
alxsts escreveu:Olá!

Esse tipo de acesso, via automação OLE exige que o Excel esteja instalado na máquina onde a aplicação está sendo executada.

O ideal é deixar a aplicação livre dessa amarra. Para superar isto, pode-se abrir os documentos do Office via ADO. Tem um exemplo de acesso a Excel por esse método aqui no fórum, postado pelo Quintas: Importando de planilha Excel - nome da planilha
Olá!

Esse tipo de acesso, via automação OLE exige que o Excel esteja instalado na máquina onde a aplicação está sendo executada.

O ideal é deixar a aplicação livre dessa amarra. Para superar isto, pode-se abrir os documentos do Office via ADO. Tem um exemplo de acesso a Excel por esse método aqui no fórum, postado pelo Quintas: Importando de planilha Excel - nome da planilha

Código: Selecionar todos

#include <hmg.ch>
declare window impcax

FUNCTION ABRE_TXT()
    local linhas_excel:={}
    LOCAL X , i, contavazias,oarquivo
    contavazias:=0
    oarquivo:=impcax.text_1.value   
    x:=impcax.text_2.value
       
       
       // ---------------------
            SELEC 3
            use &oarquivo alias caixados
            if neterr()
               msginfo("NAO FOI POSSIVEL ABRIR O ARQUIVO - FECHAR O SISTEMA DO ALEXANDRE ANTES DE IMPORTAR OS LANÇAMENTOS")
               RETURN 
            endif
       // ---------------------
       DBGOBOTTOM()
       IF LASTREC() <=1
          Wzdoc:=0
       ELSE
          Wzdoc:=lastrec()
       ENDIF           
                
       // abre planilha do excel
       oExcel:=ToleAuto():new("Excel.Application")
       oExcel:Workbooks:Open(x)
       oExcel:Visible := .F.
       
             for i=5 to 70000 && atenção pega apenas 70000 lancamentos - percorre planilha do excel
               VCnpj   :=oExcel:Cells( i, 1 ):value 
               VRazao  :=oExcel:Cells( i, 2 ):value
               VData   :=oExcel:Cells( i, 3 ):value AS STRING
               iif(impcax.radiogroup_1.value=1,VSerie:=oExcel:Cells(i,5):value,VSerie:=oExcel:Cells(i,4):value)
               iif(impcax.radiogroup_1.value=1,VEspecie:=oExcel:Cells(i,6):value,VEspecie:=oExcel:Cells(i,5):value)
               iif(impcax.radiogroup_1.value=1,VNumero:=oExcel:Cells(i,7):value,VNumero:=oExcel:Cells(i,6):value AS STRING )
               VCfop:=oExcel:Cells(i,9):value
               VVc:=oExcel:Cells( i, 10):value
               VBcIcms:=oExcel:Cells( i, 11 ):value
               VIcms   :=oExcel:Cells( i, 12 ):value
               VBcIpi  :=oExcel:Cells( i, 17 ):value
               VIpi   :=oExcel:Cells( i, 18 ):value
           
               if .not. empty(vcnpj) 
                  Aadd(linhas_excel,{vcnpj,vrazao,vdata,vserie,vespecie,vnumero,vcfop,vvc,vbcicms,vicms,vbcipi,vipi})
               else
                  skip
                  contavazias:=contavazias+1
                    if contavazias>=30
                       contaazias:=0
                       exit 
                    endif   
               endif
            next

            oExcel:Workbooks:Close()
          
      
      // validando variaveis para gravação no dbf 
      //  {vcnpj,vrazao,vdata,vserie,vespecie,vnumero,vcfop,vvc,vbcicms,vicms,vbcipi,vipi}
         
         for i=1 to len(linhas_excel)
             wzdoc:=Wzdoc+1
              
             IIF(VALTYPE(linhas_excel[i][3])<>"U",wzdat:=linhas_excel[i][3]+"/"+STR(impcax.SPINNER_1.VALUE,4),wzdat:=ctod("  /  /    "))
             
             IF VALTYPE(LINHAS_excel[I][7]) ="C"
                  
                  IF SUBSTR(LINHAS_excel[I][7],1,1) = "1" .OR. SUBSTR(LINHAS_excel[I][7],1,1) ="2" .OR. SUBSTR(LINHAS_excel[I][7],1,1) ="3"
                     WZHIS:="COMPRAS REALIZADAS CF DUPL"
                  ELSE
                     WZHIS:="VENDAS REALIZADAS CF DUPL"
                  ENDIF
             ELSE
                    msginfo(VALTYPE(LINHAS_excel[I][7])+"Tipo de Campo Invalido - gravou espacos no historico")            
                    WZHIS:=SPACE(10)
             ENDIF     
       
             WZVAL:= LINHAS_excel[I][8]
             
             WZCOD:=strzero(val(impcax.TEXT_4.VALUE),4)    
             
                WZCMP:="NF "+strzero(LINHAS_excel[I][6],6)+" "+LINHAS_excel[I][2]
                
             IIF(impcax.radiogroup_1.value=1,VZOPE:="E",VZOPE:="S")
             
             VZCHI="00"
             
             grava_registro()

      next          
      
      SELECT 3
      CLOSE ALL
      
      msginfo("ARQUIVO GERADO COM SUCESSO")    
RETURN   


function grava_registro()
             append blank
             replace zdoc with str(Wzdoc,10)
             replace zdat with ctod(wzdat)
             replace zope with VZOPE
             replace zchi with VZCHI
             replace zhis with wzhis
             replace zval with wzval
             replace zcod with wzcod             
             replace zcmp with wzcmp
             impcax.edit_1.value:=3->zdoc
return  



Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

automacao ole excel

Mensagem por Toledo »

Marcelo, não tenho o office Starter aqui para fazer testes, mas verifique se a classe Excel.Application consta no registro do windows. Para isto basta digitar REGEDIT no executar do windows e procure pela chave HKEY_CLASSES_ROOT\Excel.Application.

Aqui tenho o Office 2003 e encontrei as chaves Excel.Application e Excel.Application.11.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

automacao ole excel

Mensagem por marcelosantos »

Toledo não tenho essa chave na minha maquina que tem o office 2007 completo e o prg roda na boa, nas maquinas com starter também não encontrei a chave

obrigado
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

automacao ole excel

Mensagem por Toledo »

Marcelo, então o jeito é ver o exemplo do José Quintas que o Alexandre indicou ou fazer um teste com o OpenOffice Calc, se o seu cliente permitir a instalação.

Tem um exemplo do OpenOffice Calc na MiniGui Extended, veja a função Lis_TarCodigoiCalc() que está no arquivo \SAMPLES\BASIC\print_list\hbprint_list.prg.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
marcelosantos
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 02 Jul 2013 21:12
Localização: sao paulo sp

automacao ole excel

Mensagem por marcelosantos »

Ok, Toledo, vou verificar, obrigado por tudo.

Alexandre obrigado por tudo.
Editado pela última vez por Toledo em 07 Fev 2014 20:01, em um total de 1 vez.
Razão: Mensagem editada para retirar o quote com o conteúdo total da mensagem anterior.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

automacao ole excel

Mensagem por Toledo »

Marcelo, agora que me surgiu uma dúvida, será que com o OpenOffice Calc é possível abrir um arquivo XLS?

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder