oribeiro Posted October 22, 2014 Report Share Posted October 22, 2014 Alguém já resolveu o problema de formatação numérica no comando ToExcel() do xBrowse? http://forums.fivetechsupport.com/viewtopic.php?f=3&t=29456 Um campo com o valor treze [13,0000] (dois inteiros e quatro decimais) é exportado para o Excel como cento e trinta mil [130.000,0000]. Aguardo, obrigado. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted October 27, 2014 Author Report Share Posted October 27, 2014 Ninguém está tendo esse mesmo problema??? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 27, 2014 Report Share Posted October 27, 2014 Carissimo, poste um exemplo, fica mais fácil para os demais probar y decir se está certo ó errado. kkkkkkkkkkkkk, abs. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 27, 2014 Report Share Posted October 27, 2014 Veja se este exemplo te ajuda: #include "FiveWin.ch" #Include "Ado.ch" #include "xBrowse.ch" FUNCTION VerMYSQL(oWindow) LOCAL oWndVerMdb, oRs, oBrw, oCol LOCAL oBar, oSay, nTotal:=0 DEFINE WINDOW oWndVerMdb MDICHILD OF oWindow FROM 5,0 TO 30,80 ; TITLE "Visualizar tabla CUENTAS" ; oBar := TBar():New(oWndVerMdb,50,45,.T.) @ 01,10 SAY oSay PROMPT '' SIZE 90,20 OF oBar // -- Creamos RecordSet---- TRY oRs:=TOleAuto():New("adodb.recordset") CATCH oError MsgStop( "No se ha podido crear el RECORDSET de Cuentas Contables !", oApp:cAplicacion) ShowError(oError) oRs:= NIL RETURN(.F.) END oRs:CursorLocation := adUseClient oRs:CursorType := adOpenDynamic oRs:LockType := adLockOptimistic oRs:Source := "SELECT * FROM WCUENTAS ORDER BY CUENTA" oRs:ActiveConnection(oApp:oCon) TRY oRs:Open() CATCH oError MsgStop( "No se ha podido abrir el RECORDSET de Cuentas Contables !", oApp:cAplicacion) ShowError(oError) RETURN(.F.) END //-- oBrw := TXBrowse():New( oWndVerMdb ) * le voy agregando esto oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW // Con cursor de todo el renglón oBrw:nColDividerStyle := LINESTYLE_LIGHTGRAY oBrw:nRowDividerStyle := LINESTYLE_LIGHTGRAY oBrw:lColDividerComplete := (.F.) // (.T.) Mantiene siempre llena la pantalla oBrw:nHeaderHeight := 25 // Altura de los encabezados oBrw:nRowHeight := 22 // Altura del renglón oBrw:nHeaderLines := 1 // Número de líneas de encabezados oBrw:nDataLines := 1 // Número de líneas de detalle oBrw:nFooterHeight := 20 // Altura del footer oBrw:nFooterLines := 1 // Número de líneas en el footer oBrw:lFooter := (.T.) // Sí queremos línea de footer oBrw:lHScroll := (.F.) // Quitamos el scroll horizontal oBrw:lFastedit:= (.F.) // Permite edicion de campos oBrw:SetAdo(oRs) oBrw:aCols[1]:cHeader := "Nro.Cuenta" oBrw:aCols[1]:nWidth := 65 oBrw:aCols[2]:cHeader := "Descripcion" oBrw:aCols[2]:nWidth := 200 oBrw:aColS[2]:cFooter := "TOTAL SALDO INICIAL" oBrw:aCols[3]:cHeader := "Tipo" oBrw:aCols[3]:nWidth := 50 oBrw:aCols[4]:cHeader := "Grupo" oBrw:aCols[4]:nWidth := 50 oBrw:aCols[5]:cHeader := "SDO INICIAL" oBrw:aCols[5]:nWidth := 150 oBrw:aColS[5]:nHeadStrAlign := AL_RIGHT oBrw:aColS[5]:nDataStrAlign := AL_RIGHT oBrw:aCols[5]:nEditType := 1 oBrw:aCols[5]:cEditPicture := "@Z 999.999.999.999,99" *oBrw:aCols[5]:ltotal := .t. *oBrw:aCols[5]:ntotal := 0 *oBrw:aCols[5]:bFooter = {|| TRANSFORM(nTotal,"9,999,999,999.99") } oBrw:MakeTotals() oBrw:refresh() oBrw:bSeek := { | c | Busca(c,oRs) } oBrw:oSeek := oSay AEval(oBrw:aCols,{|oCol|oCol:bLClickHeader:={|f,c,h,oCol|Ordena(oBrw,oRs,oCol)}}) oBrw:CreateFromCode() oWndVerMdb:oClient:=oBrw ACTIVATE WINDOW oWndVerMdb ON INIT oBrw:SetFocus() RETURN NIL Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 27, 2014 Report Share Posted October 27, 2014 Ou: http://fivetechsupport.com/forums/viewtopic.php?f=6&t=27755 abs Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 27, 2014 Report Share Posted October 27, 2014 Realmente não funciona quando exporto para o Broffice/Excel. #include 'fivewin.ch' #include 'xbrowse.ch' function Main() local oWnd, oBar, oBrw, nTotal:=0 /* A. American format: "999,999,999.99" E. European format: "999.999.999,99" I. Indian format: "99,99,999.99" */ fwNumFormat( 'E', .t. ) // Italian format USE CUSTOMER DEFINE WINDOW ownd DEFINE BUTTONBAR oBar OF oWnd SIZE 80,32 2007 DEFINE BUTTON OF oBar PROMPT 'Excel' ; ACTION MsgMeter( { |oMeter, oText, oDlg, lEnd | ; Export2Excel( oBrw, oMeter, oText, oDlg, @lEnd ) } ) DEFINE BUTTON OF oBar PROMPT 'Quit' ACTION WndMain():End() SET MESSAGE OF oWnd TO '' 2007 @ 0,0 XBROWSE oBrw OF oWnd ALIAS 'CUSTOMER' AUTOCOLS CELL LINES // Salary/Salario //oBrw:aCols[10]:cEditPicture := "@E 9.999.999,99" oBrw:aCols[ 10 ]:bClrStd := {|| { iif( Field->Salary > 100000, CLR_HRED, CLR_HBLUE), CLR_GRAY } } oBrw:aCols[ 10 ]:nDataStrAlign := AL_RIGHT // Realmente nao funciona quando exporto para o Broffice/Excel oBrw:aCols[10]:bFooter = {|| TRANSFORM(Field->Salary, "@E 9.999.999,99") } oBrw:MakeTotals() oBrw:refresh() oBrw:CreateFromCode() oWnd:oClient := oBrw ACTIVATE WINDOW oWnd CLOSE DATA return nil static function Export2Excel( oBrw, oMeter, oText, oDlg, lEnd ) oBrw:ToExcel( { |n,t| oMeter:nTotal := t, ; oMeter:Set( n ), ; oText:SetText( Str(n) + '/' + Str(t) ), ; oDlg:Update(), .t. } ) return nil Quote Link to comment Share on other sites More sharing options...
oribeiro Posted October 27, 2014 Author Report Share Posted October 27, 2014 João, Veja os valores exportados no exemplo abaixo: nem os valores nem os totais vão corretos. #include 'fivewin.ch' #include 'xbrowse.ch' function Main() local oWnd, oBar, oBrw, nTotal:=0 /* A. American format: "999,999,999.99" E. European format: "999.999.999,99" I. Indian format: "99,99,999.99" */ FwNumFormat( 'E', .T. ) // European Format DBCREATE("TESTXLS",{{"DESC ","C",010,000},; {"VAL1 ","N",010,001},; {"VAL2 ","N",010,002},; {"VAL3 ","N",010,003},; {"VAL4 ","N",010,004},; {"VAL5 ","N",010,005}}) USE TESTXLS NEW ALIAS TESTXLS FOR nTotal=1 To 20 APPEND BLANK REPL DESC WITH "Linha "+STRZERO(nTotal,2) REPL VAL1 WITH 99999 * nTotal / 777 REPL VAL2 WITH 99999 * nTotal / 777 REPL VAL3 WITH 99999 * nTotal / 777 REPL VAL4 WITH 99999 * nTotal / 777 REPL VAL5 WITH 99999 * nTotal / 777 NEXT DEFINE WINDOW ownd DEFINE BUTTONBAR oBar OF oWnd SIZE 80,32 2007 DEFINE BUTTON OF oBar PROMPT 'Excel' ; ACTION MsgMeter( { |oMeter, oText, oDlg, lEnd | ; Export2Excel( oBrw, oMeter, oText, oDlg, @lEnd ) } ) DEFINE BUTTON OF oBar PROMPT 'Quit' ACTION WndMain():End() SET MESSAGE OF oWnd TO '' 2007 @ 0,0 XBROWSE oBrw OF oWnd ALIAS 'TESTXLS' AUTOCOLS CELL LINES // Realmente nao funciona quando exporto para o Broffice/Excel oBrw:aCols[2]:bFooter = {|| TRANSFORM(Field->VAL1, "@E 9.999.999,99") } oBrw:aCols[3]:bFooter = {|| TRANSFORM(Field->VAL2, "@E 9.999.999,99") } oBrw:aCols[4]:bFooter = {|| TRANSFORM(Field->VAL3, "@E 9.999.999,99") } oBrw:aCols[5]:bFooter = {|| TRANSFORM(Field->VAL4, "@E 9.999.999,99") } oBrw:aCols[6]:bFooter = {|| TRANSFORM(Field->VAL5, "@E 9.999.999,99") } oBrw:MakeTotals() oBrw:refresh() oBrw:CreateFromCode() oWnd:oClient := oBrw ACTIVATE WINDOW oWnd MAXIMIZED CLOSE DATA return nil static function Export2Excel( oBrw, oMeter, oText, oDlg, lEnd ) oBrw:ToExcel( { |n,t| oMeter:nTotal := t, ; oMeter:Set( n ), ; oText:SetText( Str(n) + '/' + Str(t) ), ; oDlg:Update(), .t. } ) return nil Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 28, 2014 Report Share Posted October 28, 2014 Oscar, sinceramente, não entendi a resposta, se bem que não uso nada para excel, mas que me parece que não está correto, me parece. No xBrowse mostra a formatação corretamente, mas na hora que vai para o Excel, vai como se ele pegasse diretamente do banco de dados, estranho, mui estraño... http://forums.fivetechsupport.com/viewtopic.php?f=6&t=29499 Se conseguires uma solução, eu gostaria de ver. Pela primeira vez, fiquei "rendido". kkkkkkkkkkkkkkk Abs. rafaoasys 1 Quote Link to comment Share on other sites More sharing options...
oribeiro Posted October 28, 2014 Author Report Share Posted October 28, 2014 Pelo que entendi vou ter que usar uma rotina própria para exportar para o excel e desconsiderar o :ToExcel() do xBrowse. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kleyber Posted October 29, 2014 Report Share Posted October 29, 2014 Oscar, Deixaste este problema no fórum internacional? A Xbrowse é atualizada pelo indiano Nagesh e ele pode verificar isto e resolver. Quote Link to comment Share on other sites More sharing options...
oribeiro Posted October 29, 2014 Author Report Share Posted October 29, 2014 Kleyber, Deixei lá já faz alguns dias. Obrigado, Quote Link to comment Share on other sites More sharing options...
aferra Posted October 29, 2014 Report Share Posted October 29, 2014 ùnica forma que não deu diferença, embora não assumiu 9.999,99 e sim 9999.99, acredito não ser problema de conversão e sim de configuração do Excel, acho, mas enfim, assim deu certo...mais testes amanhã, pq agora irei tomar aquela antártica gelada....que ninguém é de ferro, certo!!! @ 00,000 XBROWSE oBrw SIZE 300,100 PIXEL OF oDlg DATASOURCE ::oDbf LINES ADD COLUMN TO XBROWSE oBrw DATA ::oDbf:nom HEADER "Descrição do Produto" ADD COLUMN TO XBROWSE oBrw DATA ::oDbf:mar HEADER "Marca" ADD COLUMN TO XBROWSE oBrw DATA ::oDbf:atu HEADER "Estoque" PICTURE "@E 999.999" RIGHT ADD COLUMN TO XBROWSE oBrw DATA ::oDbf:ven HEADER "Vlr.Venda" PICTURE "@E 9,999,999.99" RIGHT ADD COLUMN TO XBROWSE oBrw DATA ::oDbf:des HEADER "%.Desconto" PICTURE "@E 999.99 %" RIGHT oBrw:lRecordSelector := .F. oBrw:lAllowColSwapping := .F. // Não Move a Coluna oBrw:lAllowRowSizing := .F. // Não Altera o Tamanho da Linha oBrw:lAllowColHiding := .F. // Não Mostra o Menu AEVAL(oBrw:aCols,{|o| o:bPopUp:={|o| o:nHeadStrAlign := AL_CENTER, o:lAllowSizing := .F. }) oBrw:CreateFromCode() Quote Link to comment Share on other sites More sharing options...
aferra Posted October 29, 2014 Report Share Posted October 29, 2014 Na mosca, é configuração de modo contábil para moeda, agora como fazer isso ficar automático, sem chances minha gente...tentei e não consegui...que apareça outro doido. kikkkkkkkkk Quote Link to comment Share on other sites More sharing options...
Marca Posted October 29, 2014 Report Share Posted October 29, 2014 Somente para complementar Existe um problema tbem no metodo METHOD ClpText() CLASS TXBrwColumn METHOD ClpText() CLASS TXBrwColumn local RetVal := "" local cDtFmt, cTmFmt if nxlLangID == nil SetExcelLanguage() endif // Aqui tive que ajustar tbem devido ao seguinte problema : Se der um CTRL C em cima de uma celula numerica ou Nil como por exemplo um bitmap da erro de Alltrim *if ::bEditValue == nil * if ::bStrData == nil * RetVal := "" * else * RetVal := AllTrim( Eval( ::bStrData, nil, Self ) ) * endif Mudei para : if ::bEditValue == nil if ::bStrData == nil RetVal := "" else RetVal := Eval( ::bStrData ) IF Valtype(RetVal) == "N" RetVal := AllTrim(STR(RetVal) ) ELSEIF Valtype(RetVal) == "C" RetVal := AllTrim(RetVal) ELSEIF Valtype(RetVal) == "U" RetVal := "" ENDIF endif Quote Link to comment Share on other sites More sharing options...
aferra Posted November 4, 2014 Report Share Posted November 4, 2014 Apesar de não saber se ajudou ou não os testes continuam. e usando array ( um amigo ) usou desta maneira xBrowse( aArray ) e converteu normalmente para o excel, o que ele acha é que como não tinha nada de picture a coisa funcionou, precisa de mais testes para entender porem, o tempo escasso e a falta de saber se está ajudando ou não .... vai ficando para o fim da lista. rsrsrsrs kapiaba 1 Quote Link to comment Share on other sites More sharing options...
rochinha Posted November 4, 2014 Report Share Posted November 4, 2014 Amiguinhos, Eu faço uso massisso do velho tBrowse de Hernan e nele fiz alterações e inclusões. Uma delas foi criar a opção de gerar uma planilha com os dados que aparecem no browse. Com um pouco de esmero é possivel modificar para usar com xBrowse. Basta passar o objeto que contém o browse( quase sempre usamos oLbx ) e complementar( caso queira ) os outros parâmetros. function ReporteXLS( oRPTLbx, cTitle, lPreview, cTitle2, aColunas ) local oRpt local nRecNo := If( Upper( oRPTLbx:cAlias ) != "ARRAY", ( oRPTLbx:cAlias )->( RecNo() ), 0 ) local aData := Eval( oRPTLbx:bLine ) local n local nCharWidth local oRPTFont1, oRPTFont2, oRPTFont3 public nCreditos := 0 public nDebitos := 0 nCharWidth := GetTextWidth( 0, "B", If( oRPTLbx:oFont != nil, oRPTLbx:oFont:hFont, 0 )) DEFAULT cTitle := oRPTLbx:oWnd:cTitle, lPreview := .t. sColunas := "" //FOR nPos = 1 TO LEN(aColunas) // if aColunas[nPos] <> "0" // sColunas := sColunas + str(nPos,1) + ";" // endif //NEXT CursorWait() Eval( oRPTLbx:bGoTop ) oExcel := TOleAuto():New( "Excel.Application" ) oExcel:WorkBooks:Add() oPasta := oExcel:Get( "ActiveSheet" ) nRow := 1 for nCol := 1 TO len( oRPTLbx:aHeaders ) oPasta:Columns( nCol ):Font:Bold := .T. if aColunas <> nil if aColunas[ nCol ] = "0" loop else oPasta:Cells( nRow, nCol ):Value := oRPTLbx:aHeaders[ nCol ] endif endif next nRow := 2 do while .t. aData := Eval( oRPTLbx:bLine ) for nCol := 1 to len( oRPTLbx:aHeaders ) oPasta:Columns( nCol ):Font:Bold := .F. if aColunas <> nil if aColunas[ nCol ] = "0" loop else oPasta:Cells( nRow, nCol ):Value := aData[ nCol ] endif endif next //oRPTLbx:Skip( 1 ) nRow := nRow + 1 skip if Eof() exit endif enddo for nCol := 1 to len( oRPTLbx:aHeaders ) oPasta:Columns( nCol ):AutoFit() next oExcel:Visible := .T. oPasta:End() oExcel:End() CursorArrow() if Upper( oRPTLbx:cAlias ) != "ARRAY" ( oRPTLbx:cAlias )->( DbGoTo( nRecNo ) ) endif oRPTLbx:Refresh() return nil Quote Link to comment Share on other sites More sharing options...
oribeiro Posted November 5, 2014 Author Report Share Posted November 5, 2014 Obrigado Rochinha, Se o pessoal do Fivewin não consertar essa função no xBrowse terei que partir para uma solução caseira. rochinha 1 Quote Link to comment Share on other sites More sharing options...
Theotokos Posted August 14, 2019 Report Share Posted August 14, 2019 Amiguinhos, Eu faço uso massisso do velho tBrowse de Hernan e nele fiz alterações e inclusões. Uma delas foi criar a opção de gerar uma planilha com os dados que aparecem no browse. Com um pouco de esmero é possivel modificar para usar com xBrowse. Basta passar o objeto que contém o browse( quase sempre usamos oLbx ) e complementar( caso queira ) os outros parâmetros. function ReporteXLS( oRPTLbx, cTitle, lPreview, cTitle2, aColunas ) local oRpt local nRecNo := If( Upper( oRPTLbx:cAlias ) != "ARRAY", ( oRPTLbx:cAlias )->( RecNo() ), 0 ) local aData := Eval( oRPTLbx:bLine ) local n local nCharWidth local oRPTFont1, oRPTFont2, oRPTFont3 public nCreditos := 0 public nDebitos := 0 nCharWidth := GetTextWidth( 0, "B", If( oRPTLbx:oFont != nil, oRPTLbx:oFont:hFont, 0 )) DEFAULT cTitle := oRPTLbx:oWnd:cTitle, lPreview := .t. sColunas := "" //FOR nPos = 1 TO LEN(aColunas) // if aColunas[nPos] <> "0" // sColunas := sColunas + str(nPos,1) + ";" // endif //NEXT CursorWait() Eval( oRPTLbx:bGoTop ) oExcel := TOleAuto():New( "Excel.Application" ) oExcel:WorkBooks:Add() oPasta := oExcel:Get( "ActiveSheet" ) nRow := 1 for nCol := 1 TO len( oRPTLbx:aHeaders ) oPasta:Columns( nCol ):Font:Bold := .T. if aColunas <> nil if aColunas[ nCol ] = "0" loop else oPasta:Cells( nRow, nCol ):Value := oRPTLbx:aHeaders[ nCol ] endif endif next nRow := 2 do while .t. aData := Eval( oRPTLbx:bLine ) for nCol := 1 to len( oRPTLbx:aHeaders ) oPasta:Columns( nCol ):Font:Bold := .F. if aColunas <> nil if aColunas[ nCol ] = "0" loop else oPasta:Cells( nRow, nCol ):Value := aData[ nCol ] endif endif next //oRPTLbx:Skip( 1 ) nRow := nRow + 1 skip if Eof() exit endif enddo for nCol := 1 to len( oRPTLbx:aHeaders ) oPasta:Columns( nCol ):AutoFit() next oExcel:Visible := .T. oPasta:End() oExcel:End() CursorArrow() if Upper( oRPTLbx:cAlias ) != "ARRAY" ( oRPTLbx:cAlias )->( DbGoTo( nRecNo ) ) endif oRPTLbx:Refresh() return nil Alguem converteu esta rotina para xBrowse e que possa compartilhar, estou tendo problema com a rotina do xbrowse para enviar para excel, os campos numericos até vao direitinho, só que o usuario não consegue fazer calculos com este campo no Excel... Quote Link to comment Share on other sites More sharing options...
rochinha Posted August 15, 2019 Report Share Posted August 15, 2019 Amiguinhos, Theotokos Ao repassar os campos numéricos verifique se esta repassando numeros com ponto no lugar de vírgula, pois mesmo que teu excel seja em português internamente números são tratados com pontuação americana. Ao repassar um campo numérico com vírgula seu conteúdo pode ser entendido como caracter e portanto não calcular. Quote Link to comment Share on other sites More sharing options...
Theotokos Posted August 15, 2019 Report Share Posted August 15, 2019 Vlw @rochinha!!! Vou verificar isto. rochinha 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.