Página 1 de 1
Preciso gerar XLSX....
Enviado: 15 Jun 2015 14:31
por lugab
Bom dia.
Aqui no Fórum tem muitos exemplos de conversão direta tipo DBF to XLS e XLS to DBF, inclusive um do Toledo, q é o q segue:
Código: Selecionar todos
CLEAR
SELECT 1
USE VENDAS
vArq:="VENDAS.XLS"
SET PRINTER TO (vArq)
SET DEVICE TO PRINT
vTit:="Codigo"+chr(9)+"Nome do Produto"+chr(9)+"Quantidade"+chr(9)+"Valor Unit."+chr(9)+"Valor Total"
@ 00,00 SAY vTit
v_l=1
DO WHILE !EOF()
v_l+=1
vValor:=STRTRAN(LTRIM(STR(VALOR,7,2)),'.',',')
vLinha:=CODIGO+chr(9)+PRODUTO+chr(9)+LTRIM(STR(QTDE,6,0))+chr(9)+vValor+chr(9)+;
"=C"+LTRIM(STR(v_l,5,0))+"*D"+LTRIM(STR(v_l,5,0))
@ PROW()+1,00 SAY vLinha
SKIP
ENDDO
vRod:=" "+chr(9)+" TOTAL GERAL ===>>>"+chr(9)+"=SOMA(C2:C"+LTRIM(STR(v_l,5,0))+")"+;
chr(9)+" "+chr(9)+"=SOMA(E2:E"+LTRIM(STR(v_l,5,0))+")"
@ PROW()+1,00 SAY vRod
SET PRINTER TO
SET DEVICE TO SCREEN
CLOSE ALL
TONE(400,3)
vMen:="O ARQUIVO VENDAS.XLS FOI CRIADO COM SUCESSO...;"+;
"ABRA O ARQUIVO NO EXCEL E FA€A AS FORMATA€OES;"+;
"NECESSARIAS."
ALERT(vMen,,"15/3")
RETU
Entretanto, eu preciso gerar uma planilha
XLSX (e não XLS) com dados da memória do programa Clipper compilado com -Harbour
Será q esta contribuição do Toledo serve também para XLSX ? Se não serve, será q alguém tem um exemplo q possa publicar para nós ??
Grato,
Preciso gerar XLSX....
Enviado: 15 Jun 2015 15:23
por JoséQuintas
Se tem os fontes do Harbour 3.2 ou 3.4, vai encontrar em extras\hbxlsxml
Inclusive o primeiro exemplo é em português.
Se não me engano o XLSX é XML em formato ZIP, e essa LIB gera em XML.
Preciso gerar XLSX....
Enviado: 15 Jun 2015 18:43
por lugab
Oi, José Quintas...
Se entendi direito a sua dica, XLSX é num formato diferente deste exemplo do Toledo q é em XLs, confere ?
Então, talvez, só resolva se eu gerar em XLS pela contribuição do Toledo e em seguida abrir o arquivo no Excel e salva-lo como XLSX
Certamente vai funcionar, confere ?
Preciso gerar XLSX....
Enviado: 15 Jun 2015 20:27
por fladimir
Pra gerar direto no EXCEL podendo escolher a versão do Excel teria q fazer tipo o exemplo abaixo:
Código: Selecionar todos
IF (oExcel := Cria_OLE("Excel.Application", "Erro! O Excel n„o esta Ativado ou N„o instalada nesse Computador", .T.) ) == NIL
RETURN
ENDIF
oExcel:WorkBooks:Add()
oSheet := oExcel:ActiveSheet
oSheet:Name := 'Analise Geral'
oSheet:Cells( 1, 1 ):Value := "Codigo"
oSheet:Cells( 1, 2 ):Value := "Descricao"
oSheet:Cells( 1, 3 ):Value := "Qtde"
oSheet:Cells( 1, 4 ):Value := "Estq Atual"
oSheet:Cells( 1, 5 ):Value := "Vlr. Medio"
oSheet:Cells( 1, 6 ):Value := "Vlr. Total"
FOR i=1 to 6
oSheet:Cells( 1, i ):Font:Bold := .T.
oSheet:Cells( 1, i ):Font:ColorIndex := 2 //-- Cor da letra
oSheet:Cells( 1, i ):Interior:ColorIndex := 11 //-- Cor de Fundo
oSheet:Cells( 1, i ):HorizontalAlignment := -4108 // Alinhamento Centro
oSheet:Columns(i):ColumnWidth := 15 // Tamanho da Coluna
NEXT
oSheet:Columns(2):ColumnWidth := 40 // Tamanho da Coluna
oSheet:Cells( 1, 1 ):Select()
oExcel:Visible := .F.
nLinPlan := 2
xTotalEstq := xTotalCust := xTotalVend := 0
WHILE TMP_ITENS->(!EOF())
Mostra("Gerando..."+ STR( (( (nLinPlan-1) / TMP_ITENS->(LastRec()) )*100),3)+"%")
oSheet:Cells( nLinPlan, 1 ):Value := Alltrim(TMP_ITENS->codi)
oSheet:Cells( nLinPlan, 2 ):Value := Alltrim(TMP_ITENS->Desc)
oSheet:Cells( nLinPlan, 3 ):Value := TMP_ITENS->Qtde
oSheet:Cells( nLinPlan, 4 ):Value := TMP_ITENS->ESTQATUAL
oSheet:Cells( nLinPlan, 5 ):Value := TMP_ITENS->VL_TOT/TMP_ITENS->QTDE
oSheet:Cells( nLinPlan, 6 ):Value := TMP_ITENS->VL_TOT
//-- Totaliza
ntotQtd += TMP_ITENS->Qtde
nTotValor += TMP_ITENS->Vl_TOT
// Formatar célula:
oSheet:Cells( nLinPlan, 1 ):NumberFormat := "000000"
oSheet:Cells( nLinPlan, 4 ):NumberFormat := "#.##0,00"
oSheet:Cells( nLinPlan, 5 ):NumberFormat := "#.##0,00"
oSheet:Cells( nLinPlan, 6 ):NumberFormat := "#.##0,00"
//oExcel.ActiveSheet.UsedRange.EntireColumn.Autofit
// Alinhamento das celulas:
oSheet:Cells( nLinPlan, 1 ):HorizontalAlignment := 3 //-- Centro
oSheet:Cells( nLinPlan, 5 ):HorizontalAlignment := 4 //-- Right
oSheet:Cells( nLinPlan, 6 ):HorizontalAlignment := 4 //-- Right
cIntervalo := 'A' + ALLTRIM(STR(nLinPlan)) + ':F' + ALLTRIM(STR(nLinPlan))
nLinPlan++
TMP_ITENS->( DBSKIP() )
END
oSheet:Cells( nLinPlan, 4 ):Value := ntotQtd
oSheet:Cells( nLinPlan, 4 ):Font:Bold := .T.
oSheet:Cells( nLinPlan, 4 ):Font:ColorIndex := 02 //-- Cor da letra Branca
oSheet:Cells( nLinPlan, 4 ):HorizontalAlignment := 4 //-- Right
oSheet:Cells( nLinPlan, 4 ):NumberFormat := "#.##0,00"
oSheet:Cells( nLinPlan, 6 ):Value := nTotValor
oSheet:Cells( nLinPlan, 6 ):Font:Bold := .T.
oSheet:Cells( nLinPlan, 6 ):Font:ColorIndex := 02 //-- Cor da letra Branca
oSheet:Cells( nLinPlan, 6 ):HorizontalAlignment := 4 //-- Right
oSheet:Cells( nLinPlan, 6 ):NumberFormat := "#.##0,00"
oSheet:Range( 'A' + ALLTRIM(STR(nLinPlan)) + ':F' + ALLTRIM(STR( nLinPlan ))):Interior:ColorIndex := 21
// Colocar Bordas:
cIntervalo := 'A1:F' + ALLTRIM(STR( nLinPlan ) )
oSheet:Range(cIntervalo):Borders(1):LineStyle:= 1
oSheet:Range(cIntervalo):Borders(2):LineStyle:= 1
oSheet:Range(cIntervalo):Borders(3):LineStyle:= 1
oSheet:Range(cIntervalo):Borders(4):LineStyle:= 1
* Retrieve the FileFormat
nFileFormat = oExcel:WorkBooks(1):FileFormat
cArq := CurDirSys() + 'ProdOrcAgrp' + cTerminal + '.xls'
Ferase( cArq)
oSheet:SaveAs( cArq, 56 ) // Salva no Excel 8.0// AKI VC DEFINE A VERSAO DO TEU EXCEL... QTO MAIOR MAIS ATUAL... EU COLOQUEI A 8 Q ABRE MEIO Q EM TODOS HJ MAS PODE COLOCAR MAIS ALTA
inkey(1)
Executa(cArq) // AKI ABRE A PLANILHA EQUIVALENTE A RUN NOMEDAPLANILHA.XLS
oExcel:WorkBooks:Close()
oExcel:Quit()
oExcel := NIL // Libera o Excel
DBCLOSEALL()
RETURN
Aki segue uma prévia das versoes... eu uso a 8, a XLSX deve ser a 12
1987 Excel 2.0 para Windows (Existiu uma versão do excel para DOS, mas não teve aceitacao)
1990 Excel 3.0
1992 Excel 4.0
1993 Excel 5.0 (Office 4.2 & 4.3, versão 32-bit apenas para Windows NT )
1995 Excel 7.0 (Office '95)
1997 Excel 8.0 (Office '97)
1999 Excel 9.0 (Office 2000)
2001 Excel 10.0 (Office XP)
2003 Excel 11.0 (Office 2003)
2007 Excel 12.0 (Office 2007
[]´s
Preciso gerar XLSX....
Enviado: 15 Jun 2015 21:16
por lugab
Pô, Fladimir, que legal, vou testar. É Harbour ou xHarbour ?
Sabe se o exemplo requer alguma lib ou .ch ou .h ?
Muitíssimo obrigado
Preciso gerar XLSX....
Enviado: 15 Jun 2015 21:54
por fladimir
Uso no Harbour, mas da pra usar no xHarbour.
Qto a lib se não me engano é a hbwin, mas não tenho certeza, as libs q uso no meu projeto harbour são as abaixo:
-lhbxpp
-lhbct
-lhbtip
-lhbwin // acho q é essa aki não tenho certeza, se não for na minha opinião sobre hbxpp / xhb
-lxhb
-lhbhpdf
-lhbcomm
-llibmysql
-lhbmysql
Preciso gerar XLSX....
Enviado: 18 Jun 2015 00:02
por lugab
Oi Fladimir,
Faltou a Funcao Cria_ole() e não compilou.
Vc poderia passar ela para mim ? To usando Harbour 2.0 com a lib hbwin
Preciso gerar XLSX....
Enviado: 18 Jun 2015 00:29
por fladimir
Código: Selecionar todos
/*------------------------------------------------------------------------------
* Cria Objeto OLE
*/
function Cria_OLE(cObj_OLE, cMsg, lGetActiveObj)
local oObj_OLE := NIL
DEFAULT cMsg TO 'Erro ao tentar carregar objeto;;Tente novamente'
DEFAULT lGetActiveObj TO .F.
if lGetActiveObj
TRY
oObj_OLE := GetActiveObject( cObj_OLE )
CATCH
TRY
oObj_OLE := CREATEOBJECT(cObj_OLE)
CATCH
PTalert(cMsg, {'Ok'}, vcw)
return NIL //oObj_OLE
END
END
else
TRY
oObj_OLE := CREATEOBJECT(cObj_OLE)
CATCH
Alert(cMsg)
return oObj_OLE
END
endif
return oObj_OLE
Preciso gerar XLSX....
Enviado: 18 Jun 2015 01:11
por lugab
Oi, Fladimir, ...
Existe um arquivo chamado Tmp_itens q é necessário para testar
Código: Selecionar todos
WHILE TMP_ITENS->(!EOF())
Mostra("Gerando..."+ STR( (( (nLinPlan-1) / TMP_ITENS->(LastRec()) )*100),3)+"%")
oSheet:Cells( nLinPlan, 1 ):Value := Alltrim(TMP_ITENS->codi)
oSheet:Cells( nLinPlan, 2 ):Value := Alltrim(TMP_ITENS->Desc)
oSheet:Cells( nLinPlan, 3 ):Value := TMP_ITENS->Qtde
oSheet:Cells( nLinPlan, 4 ):Value := TMP_ITENS->ESTQATUAL
oSheet:Cells( nLinPlan, 5 ):Value := TMP_ITENS->VL_TOT/TMP_ITENS->QTDE
oSheet:Cells( nLinPlan, 6 ):Value := TMP_ITENS->VL_TOT
//-- Totaliza
ntotQtd += TMP_ITENS->Qtde
nTotValor += TMP_ITENS->Vl_TOT
// Formatar c‚lula:
oSheet:Cells( nLinPlan, 1 ):NumberFormat := "000000"
oSheet:Cells( nLinPlan, 4 ):NumberFormat := "#.##0,00"
oSheet:Cells( nLinPlan, 5 ):NumberFormat := "#.##0,00"
oSheet:Cells( nLinPlan, 6 ):NumberFormat := "#.##0,00"
//oExcel.ActiveSheet.UsedRange.EntireColumn.Autofit
// Alinhamento das celulas:
oSheet:Cells( nLinPlan, 1 ):HorizontalAlignment := 3 //-- Centro
oSheet:Cells( nLinPlan, 5 ):HorizontalAlignment := 4 //-- Right
oSheet:Cells( nLinPlan, 6 ):HorizontalAlignment := 4 //-- Right
cIntervalo := 'A' + ALLTRIM(STR(nLinPlan)) + ':F' + ALLTRIM(STR(nLinPlan))
nLinPlan++
TMP_ITENS->( DBSKIP() )
END
Como posso obter ele ? Deve ser criado em tempo de execução ? Se sim, quais seriam os campos ?
PS: Eu uso Harbour 2.0 e linky a Hbwin.lib
Preciso gerar XLSX....
Enviado: 18 Jun 2015 08:17
por fladimir
Tmp_itens é um DBF temporário q crio ao executar o relatório e alimento os campos conforme a necessidade, mas poderia ser uma tabela qualquer, produtos por exemplo, é os campos vc pode alterar para os teus mesmo mesmo.
Preciso gerar XLSX....
Enviado: 22 Jun 2015 05:09
por lugab
Beleza. Fladimir, vou testar