Error al grabar formulas con FileXLS con + de 16000 lineas
Posted: Mon May 25, 2015 3:49 am
Saludos Estimados
Quizas alguien ya paso por esto, cuando genero un Excel con FileXls y este tiene una serie de formulas, estas se guardan bien, hasta la linea 161XX (dieciseismil, ciento y algo) pero la siguiente sumatoria que es en la linea 16930 la formula esta mal gravada por la clase, explico con ejemplo
Ultima linea de formulas bien gravada en el Excel
Esto en la Columna 12 y en la Linea 16208 (L = 12 en Excel), esta formula esta OK, y todas las anteriores tambien (como 60 quiebres)
=SUMA(L15724:L16207)
Pero en la siguiente formula, la clase grava en el Excel esto :
=SUMA(L$549:$L16210)
Le aumenta el signo de $ a la formula y altera el valor, el 549 no es para nada el inicio, es el 16210 y el final es 16933
Estoy recontra seguro que los valores pasados por referencia a la clase estan Ok pues revise las variables al momento de invocar la funcion :
@ nCtl,12 XLS FORMULA _sum(nCtc,12, nCta-1,12) FORMAT nFon BORDER OF oFileXLS
Y el Metodo Formula de la Clase FileXls recibe bien los valores, lo verifique, esta al momento de grabar la formula por parte de la clase, pero no tengo ni idea donde, alguna idea ??
GRACIAS
//----------------------------------------------------------------------------//
METHOD Formula( nRow, nCol, nNumber, lRecalc, cFormula, ;
lHidden, lLocked, nFont, nFormat, lShaded, ;
nBorder, nAlignament ) CLASS TFileXLS
local cExpression := GetExpression( cFormula )
local nLen := Len( cExpression )
DEFAULT nNumber := 0, lRecalc := .t.
DEFAULT lHidden := .f., lLocked := .f., nFont := 0, nFormat := 0, lShaded := .f., ;
nBorder := BORDER_NONE, nAlignament := ALING_NULL
FWrite( ::hFile, Chr( 06 ) + Chr( 00 ), 2 )
FWrite( ::hFile, I2Bin( 17 + nLen ), 2 )
::PutCoors( nRow, nCol )
::PutAttributes( lHidden, lLocked, nFont, nFormat, lShaded, ;
nBorder, nAlignament )
FWrite( ::hFile, D2Bin( nNumber ), 8 )
FWrite( ::hFile, Chr( if( lRecalc, 2, 0 ) ), 1 )
FWrite( ::hFile, Chr( nLen ), 1 )
FWrite( ::hFile, cExpression, nLen )
return nil
Quizas alguien ya paso por esto, cuando genero un Excel con FileXls y este tiene una serie de formulas, estas se guardan bien, hasta la linea 161XX (dieciseismil, ciento y algo) pero la siguiente sumatoria que es en la linea 16930 la formula esta mal gravada por la clase, explico con ejemplo
Ultima linea de formulas bien gravada en el Excel
Esto en la Columna 12 y en la Linea 16208 (L = 12 en Excel), esta formula esta OK, y todas las anteriores tambien (como 60 quiebres)
=SUMA(L15724:L16207)
Pero en la siguiente formula, la clase grava en el Excel esto :
=SUMA(L$549:$L16210)
Le aumenta el signo de $ a la formula y altera el valor, el 549 no es para nada el inicio, es el 16210 y el final es 16933
Estoy recontra seguro que los valores pasados por referencia a la clase estan Ok pues revise las variables al momento de invocar la funcion :
@ nCtl,12 XLS FORMULA _sum(nCtc,12, nCta-1,12) FORMAT nFon BORDER OF oFileXLS
Y el Metodo Formula de la Clase FileXls recibe bien los valores, lo verifique, esta al momento de grabar la formula por parte de la clase, pero no tengo ni idea donde, alguna idea ??
GRACIAS
//----------------------------------------------------------------------------//
METHOD Formula( nRow, nCol, nNumber, lRecalc, cFormula, ;
lHidden, lLocked, nFont, nFormat, lShaded, ;
nBorder, nAlignament ) CLASS TFileXLS
local cExpression := GetExpression( cFormula )
local nLen := Len( cExpression )
DEFAULT nNumber := 0, lRecalc := .t.
DEFAULT lHidden := .f., lLocked := .f., nFont := 0, nFormat := 0, lShaded := .f., ;
nBorder := BORDER_NONE, nAlignament := ALING_NULL
FWrite( ::hFile, Chr( 06 ) + Chr( 00 ), 2 )
FWrite( ::hFile, I2Bin( 17 + nLen ), 2 )
::PutCoors( nRow, nCol )
::PutAttributes( lHidden, lLocked, nFont, nFormat, lShaded, ;
nBorder, nAlignament )
FWrite( ::hFile, D2Bin( nNumber ), 8 )
FWrite( ::hFile, Chr( if( lRecalc, 2, 0 ) ), 1 )
FWrite( ::hFile, Chr( nLen ), 1 )
FWrite( ::hFile, cExpression, nLen )
return nil