Página 1 de 1

Salvar uma planilha excel em Harbour.

Enviado: 06 Jan 2022 19:27
por kovalsk
Procurei muito e não achei o que queria nem no site e nem fora. Aqui no site achei alguns exemplos mas acredito que só funcione no xHarbour. Estou gerando uma planilha e no final queria salva-la direto sem nem mostrar ela aberta para o cliente.
Esta linha foi uma que achei oExcel:WorkBooks:SaveAs(cFilePath(GetModuleFileName(GetInstance()))+"Analitico.xls"), porém dá erro de compilação em várias funções.
Tentei gravando macro no excel que me ajudou a descobrir alguns recursos e perceber também que alguns não funcionam como formatar uma célula centralizada.
Alguém sabe ou tem algum exemplo de como salvar a planilha sem precisar do usuário?
Minha rotina ficou assim:

Código: Selecionar todos

   sele 9
   count to _tam_arq

   oExcel    := TOleauto():new("Excel.Application")
*   oWorkBook := oExcel:WorkBooks:Open( "d:\sistemas\hb\726ms\bancos\Analitico.xlsx" )
   oExcel:WorkBooks:Add()
   oFolha      := oExcel:ActiveSheet()
   oFolha:Name := "Analitico"
   oExcel:Visible := .f.

   oFolha:Cells( 1, 1 ):Value := 'PLACA'
   oFolha:Cells( 1, 2 ):Value := 'DATA'
   oFolha:Cells( 1, 3 ):Value := 'ENTRADA'
   oFolha:Cells( 1, 4 ):Value := 'SAIDA'
   oFolha:Cells( 1, 5 ):Value := 'AUTOMOVEL'
   oFolha:Cells( 1, 1 ):ColumnWidth := 12
   oFolha:Cells( 1, 2 ):ColumnWidth := 12
   oFolha:Cells( 1, 3 ):ColumnWidth := 12
   oFolha:Cells( 1, 4 ):ColumnWidth := 12
   oFolha:Cells( 1, 5 ):ColumnWidth := 25
*   oFolha:Cells( 1, 2 ):HorizontalAlignment := 7  // não funciona com nenhum parametro
*   oFolha:Cells( 1, 2 ):NumberFormat := "[$-F800]dddd, mmmm dd, yyyy" // nao funciona
*   oFolha:Cells( 1, 3 ):NumberFormat := "[$-F400]h:mm:ss AM/PM" // funciona
*   oFolha:Cells( 1, 4 ):NumberFormat := "[$-F400]h:mm:ss AM/PM"

		  
   for x := 1 to _tam_arq
       oFolha:Cells( x, 1 ):font:Size := 12
       oFolha:Cells( x, 2 ):font:Size := 12
       oFolha:Cells( x, 3 ):font:Size := 12
       oFolha:Cells( x, 4 ):font:Size := 12
       oFolha:Cells( x, 5 ):font:Size := 12
   next

   oFolha:Columns( 1 ):Font:Bold := .T.
*    oFolha:Columns( 2 ):Font:Color := (255, 0, 255) // Vermelho funciona
   _lin := 2

   do while ! eof()
      oFolha:Cells( _lin, 1 ):Value := pla_aut
      oFolha:Cells( _lin, 2 ):Value := dat_mov
      oFolha:Cells( _lin, 3 ):Value := hor_ent
      oFolha:Cells( _lin, 4 ):Value := hor_sai
      oFolha:Cells( _lin, 5 ):Value := nom_aut

	  _lin ++
	  skip
   enddo
   
   oExcel:Visible := .t.
*   oExcel:WorkBooks:SaveAs(cFilePath(GetModuleFileName(GetInstance()))+"Analitico.xls")
   oWorkBook:close()
   oExcel:Quit()

Salvar uma planilha excel em Harbour.

Enviado: 01 Fev 2022 11:52
por clodoaldomonteiro
Bom dia,
Veja se entendi, vc quer abrir uma planilha, preencher algumas células e salva-la com outro nome?
Se sim, vc pode primeiro pegar o arquivo existem da planilha, salvo-lo com o FileCopy(Origem, Destino), abre a planilha destino, faz as alterações e depois fecha a planilha atual, assim vc não precisa usar o método Save que está supostamente dando erro.

Salvar uma planilha excel em Harbour.

Enviado: 01 Fev 2022 12:32
por alxsts
Olá!

Código: Selecionar todos

oExcel:WorkBooks:SaveAs(cFilePath(GetModuleFileName(GetInstance()))+"Analitico.xls")
Não funciona porque cFilePath(), GetModuleFileName() e GetInstance() são funções da FiveWin. Deve funcionar se colocar um path literal, como feito no código do primeiro post acima ("d:\sistemas\hb\726ms\bancos\Analitico.xlsx")

Salvar uma planilha excel em Harbour.

Enviado: 01 Fev 2022 14:28
por JoséQuintas
Então, não é que não funciona.
Dá falta de funções na linquedição.
Isso confunde muito na hora de ajudar.

Salvar uma planilha excel em Harbour.

Enviado: 03 Mar 2022 15:51
por fjservicosthe
Boa tarde colegas,

Gostaria de abrir uma planilha excel .xlsx e exportar seu conteudo para uma arquivo .txt, pode ser?
Uso harbour console 3.4

Grato

Salvar uma planilha excel em Harbour.

Enviado: 03 Mar 2022 17:10
por JoséQuintas
Faço usando ADO.
Nos arquivos da ANP preciso abrir pelo OpenOffice e salvar em formato EXCEL pra funcionar.
Não faço idéia porque.
Não instalo Excel na minha máquina há muitos anos, nem procurei saber porque não funciona direto.

Salvar uma planilha excel em Harbour.

Enviado: 06 Out 2022 10:27
por clodoaldomonteiro
Bom dia
Acho que esse exemplo vai te ajudar um pouco, tá em parte, mas dá pra entender muita coisa.

Código: Selecionar todos

...
...
      oConexao := CreateObject( "ADODB.Connection" )

      If ".XLSX" $ Upper(mArq_)
         oConexao:ConnectionString := ;
          [Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + mArq_ + [;Extended Properties="Excel 12.0 Xml; HDR=Yes";] //IMEX=1";]
       Else
         oConexao:ConnectionString := ;
          [Provider=Microsoft.Jet.OLEDB.4.0;Data Source=] + mArq_ + [;Extended Properties="Excel 8.0; HDR=Yes";]
       Endif

      oConexao:Open()

      rs := oConexao:Execute( "SELECT * FROM [report1$]" )

      Clear TypeAhead

      rs:MoveFirst()

      IF !USEARQ("GRR",.f.,10,1)                          // se falhou a abertura do arq
         lOk:=.f.
         Break                                            // volta ao menu anterior
      ENDIF

      Do While !rs:Eof() .and. poe_gauge(,,,,,1)

         If Empty(rs:Fields( 1 ):Value) .or. rs:Fields( 1 ):Value = NIL .or. Left(rs:Fields( 1 ):Value, 5) = 'Bloco'
            rs:MoveNext()
            Loop
         Endif

         mData   := Alltrim(rs:Fields( 13):Value)
         mData   := CtoD(mData)

         mValor := StrTran(rs:Fields( 19):Value, 'R$', '')
         mValor := StrTran(mValor, '.', '')
         mValor := StrTran(mValor, ',', '.')
         mValor := Val(mValor)

         mBloco := Trim(HB_AnsiToOem( rs:Fields( 01 ):Value ))
         mGrupo := Trim(HB_AnsiToOem( rs:Fields( 08 ):Value ))
         mAcao  := Trim(HB_AnsiToOem( rs:Fields( 10 ):Value ))

         mHistorico := 'Transferˆncias do FUS.' + CRLF
         mHistorico += 'Bloco..............: '+ mBloco + CRLF
         mHistorico += 'Grupo..............: '+ mGrupo + CRLF
         mHistorico += 'A‡Æo Detalhada.....: '+ mAcao + CRLF
         mHistorico += 'Competˆncia/Parcela: '+ Trim( rs:Fields( 11 ):Value ) +CRLF
         mHistorico += 'Valor..............: '+Tran(mValor, '@E 999,999,999.99')

         mOB := 'OB: ' + rs:Fields( 12 ):Value

         mBanco   := rs:Fields( 14):Value
         mAgencia := Left(rs:Fields( 15):Value, 5)
         mContaV  := Left(rs:Fields( 16):Value, 3)
         mContaN  := StrZero(Val(SubStr(rs:Fields( 16):Value, 4, 6)), 9)

         If !Ptab('5'+mBanco+mAgencia+'000'+mContaN, 'CAP', 4)
            If !Ptab('5'+mBanco+mAgencia+mContaV+mContaN, 'CAP', 4)
               If !Ptab('1'+mBanco+mAgencia+'000'+mContaN, 'CAP', 4)
                  Ptab('1'+mBanco+mAgencia+mContaV+mContaN, 'CAP', 4)
               Endif
            Endif
         Endif

         If Empty(CAP->cap_codigo)
            msg := 'Conta bancária não encontrada na tabela CAP.'
            msg += hb_eol() + 'Banco: ' + mBanco
            msg += hb_eol() + 'Agência: ' + mAgencia
            msg += hb_eol() + 'Variação: ' + mContaV
            msg += hb_eol() + 'Conta: ' + mContaN
            msg += hb_eol() + 'Deseja interromper o processo?'
            If MsgYesNo( msg )
               rs:Close()
               oConexao:Close()
               Break
            Endif

            rs:MoveNext()
            Loop
         Endif

         mRecCod := ''
         mFRComp := ''

         If Empty( mFRComp )
            For i := 0 To 99
               a := StrZero(i, 2)
               If Ptab( ' ' + mRecCod + a, 'REC', 1 )
                  Exit
               Endif
            Next
         Else
            Ptab( mRecCod + '600' + mFRComp, 'REC', 4 )
         Endif

         If !Empty( REC->rec_codigo )

            Locate For grr_auto = 'S' .and. grr_dd = StrZero(Day(mData), 2) .and.;
             grr_mm = StrZero(Month(mData), 2) .and. (mOB $ pag_codigo .or. Empty(pag_codigo) ) .and. ;
             rec_codigo = mRecCod .and. Str(grr_valor, 11, 2) = Str(mValor, 11, 2)

            If !Found()

               M->grr_codigo := ''
               GERA_SEQ('GRR', 'grr_codigo', 6, .f.)

               DbAppend()

               REPBLO('grr_codigo',{|| M->grr_codigo})
               REPBLO('GRR_AUTO',  {|| 'S'})
               REPBLO('GRR_DD',    {|| Strzero(Day(mData), 2) })
               REPBLO('GRR_MM',    {|| StrZero(Month(mData), 2) })
               REPBLO('GRR_concil',{|| 'N'})
               REPBLO('rra_codigo',{|| '000000'})
               REPBLO('rec_deduc' ,{|| '' })
               REPBLO('rec_codigo',{|| mRecCod })
               REPBLO('rec_subcod',{|| REC->rec_subcod })
               REPBLO('fun_codigo',{|| REC->fun_codigo })
               REPBLO('tuo_codigo',{|| REC->tuo_codigo })
               REPBLO('tfr_codigo',{|| REC->tfr_codigo })
               REPBLO('pag_codigo',{|| mOB })
               REPBLO('GRR_fr'    ,{|| REC->rec_fr })
               REPBLO('GRR_frCF'  ,{|| '9999' })
               REPBLO('cap_codigo',{|| CAP->cap_codigo })
               REPBLO('pla_codpla',{|| CAP->pla_codpla })
               REPBLO('GRR_VALOR', {|| mValor })
               REPBLO('ccr_codigo',{|| MMVCCRFUS })
               REPBLO('GRR_FONTE', {|| 'Transferencias do FUS'})
               REPBLO('GRR_histor',{|| mHistorico })
               REPBLO('guid',{|| NewGuid32() })

               PoeNoReg( '', '', 'InclusÆo Autom tica: '+ProcName(0), 'InclusÆo.2',;
                INCLUI, grr_codigo,,,, Alias(), )

            Endif
         Else

            msg := 'ERRO...: FUS/060'+CRLF
            msg += 'Aviso..: Não consegui encontrar no Orçamento Receita o código do lançamento informado na planilha.' + CRLF
            msg += 'Anote os dados e inclua essa nova Receita no Orçamento, para que a importação ocorra sem problemas.' + CRLF
            msg += 'Código: ' + Tran(mRecCod, '@R 9999.99.9.9' ) + CRLF
            msg += 'Descrição: ' + HB_OemToAnsi( mGrupo )

            MsgAtencao( msg )

         Endif

         rs:MoveNext()

      Enddo

      rs:Close()
      oConexao:Close()

      oConexao := NIL
      oRs      := NIL

      SETCURSOR(cur_atual)
      DbCloseAll()

   END SEQUENCE


Salvar uma planilha excel em Harbour.

Enviado: 06 Out 2022 15:08
por carlaoonline
Boa tarde!


Aproveitando o embalo, deixo novamente minha sugestão para a utilização do projeto XlsxWriter.

O projeto original é escrito em C por John McNamara e baixado em
https://github.com/jmcnamara/libxlsxwriter

O projeto traduzido para Harbour .PRG é escrito por FTrautwein e baixado em
https://github.com/FTrautwein/hblibxlsxwriter


Com ele é possível criar arquivos formato Excel sem usar ADO ou PRECISAR ter o Excel instalado na máquina.

Cria praticamente qualquer tipo de planilhas, aceita fórmulas, gráficos e até Macro (extensão .xlsm)

Código: Selecionar todos

lxw_init()
projeto  = lxw_new_workbook("relatorio.xlsx")

For FF=1 TO Len(aAba)  // Adiciona abas conforme vetor aAba -> {"Clientes","Vendas","faturas"}
    aAba[FF] = lxw_workbook_add_worksheet(projeto, aAba[FF])   //(ArqXLS, NomeDaAba)
Next

etc...
Pra formatar as células ou usar bordas achei um pouco mais chato, mas nada demais.

Outra coisa a ser lembrada (já postaram aqui no fórum) é que se renomear (ou copiar) um arquivo .DBF para .XLS, o Excel o abre normalmente.