Alaska Software Inc. - Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
Alaska Software Inc. - Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
Username: Password:
AuthorTopic: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
=?UTF-8?Q?C=c3=a9sar_Calvo?= Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sat, 19 May 2018 07:29:06 +0200
Good morning dear friends.
Is there someone who could help me?
I am not capable to make new methods for the great class code of Hubert. 
Brandel and it would be a real shame not have others methods.
For example I would need one for filters in rows or columns.
I think that is not possible for him to continue with a new code, does 
not have time. If I knew I would do it but I have no knowledge for it.
Regards.
César.
Jonathan LeemingRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sat, 19 May 2018 08:33:53 -0600
On 5/18/2018 11:29 PM, César Calvo wrote:
> Good morning dear friends.
> Is there someone who could help me?
> I am not capable to make new methods for the great class code of Hubert. 
> Brandel and it would be a real shame not have others methods.
> For example I would need one for filters in rows or columns.
> I think that is not possible for him to continue with a new code, does 
> not have time. If I knew I would do it but I have no knowledge for it.
> Regards.
> César.
> 
> 

I was not aware of this Hurbet's class nor the existence of LibXL but 
after looking at the LibXL site was impressed with the speed specs.... 
Thanks César!

Does anyone know if using HBLibXL & LibXL allows one to work with Excel 
password protected documents?  I've spent a bit of time reading through 
the source but as of yet don't see provisions for passwords.

Thanks... Jonathan



jonathan.leeming@the-family-centre.com
Edmonton, Alberta, Canada
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sat, 19 May 2018 17:27:06 +0200
El 19/05/2018 a las 16:33, Jonathan Leeming escribió:
> On 5/18/2018 11:29 PM, César Calvo wrote:
>> Good morning dear friends.
>> Is there someone who could help me?
>> I am not capable to make new methods for the great class code of 
>> Hubert. Brandel and it would be a real shame not have others methods.
>> For example I would need one for filters in rows or columns.
>> I think that is not possible for him to continue with a new code, does 
>> not have time. If I knew I would do it but I have no knowledge for it.
>> Regards.
>> César.
>>
>>
> 
> I was not aware of this Hurbet's class nor the existence of LibXL but 
> after looking at the LibXL site was impressed with the speed specs.... 
> Thanks César!
> 
> Does anyone know if using HBLibXL & LibXL allows one to work with Excel 
> password protected documents?  I've spent a bit of time reading through 
> the source but as of yet don't see provisions for passwords.
> 
> Thanks... Jonathan
> 
> 
> 
Hi Jonathan,

LibXL really good, I hope you can get your matter about the passwords.

Regards.
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sun, 20 May 2018 13:10:52 +0200
El 19/05/2018 a las 7:29, César Calvo escribió:
> Good morning dear friends.
> Is there someone who could help me?
> I am not capable to make new methods for the great class code of Hubert. 
> Brandel and it would be a real shame not have others methods.
> For example I would need one for filters in rows or columns.
> I think that is not possible for him to continue with a new code, does 
> not have time. If I knew I would do it but I have no knowledge for it.
> Regards.
> César.
> 
> 

I suppose there is to do like this:

*--------------------------------------------------------------------------------

CLASS xlFilter FROM _HBLibXL, xlBook, xlSheet

    PROTECTED

    EXPORTED
       METHOD init
       METHOD FilterColumnSetCustomFilter

ENDCLASS

*--------------------------------------------------------------------------------
METHOD xlFilter:init()
return self
*--------------------------------------------------------------------------------


METHOD xlFilter:FilterColumnSetCustomFilter()
LOCAL uRet := nil

uRet := FpQCall( {'LibXL','xlFilterColumnSetCustomFilterA'},::hHandle)


RETURN uRet

But how I don´t undertand the way of make classes I am lost.

Is there someboy that speaks spanish and then we could contact personally?

It is very maddening not see this questions.

I attach HBLIBXL.PRG of HB, is free and here is where I desire to create 
a new class for filters bases on LibXL (http://www.libxl.com/)


Thanks.
César.


HBLIBXL.PRG
Jose Antonio Diego KerejeRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sun, 20 May 2018 21:34:53 +0200
Hola César:

He añadido a la clase de Hubert soporte para todos los métodos AutoFilter y 
FilterColumn siguiendo su mismo estilo de codificación. No uso esta 
librería, por lo que no he hecho ninguna prueba de uso.

Saludos. Diego

Hi Cesar:

I have added to Hubert's class support for all AutoFilter and FilterColumn 
methods by following their coding style. I do not use this library, so I 
have not made any proof of use.

Regards. Diego


HBLibXL.PRG
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sun, 20 May 2018 22:20:16 +0200
El 20/05/2018 a las 21:34, Jose Antonio Diego Kereje escribió:
> Hola César:
> 
> He añadido a la clase de Hubert soporte para todos los métodos 
> AutoFilter y FilterColumn siguiendo su mismo estilo de codificación. No 
> uso esta librería, por lo que no he hecho ninguna prueba de uso.
> 
> Saludos. Diego
> 
> Hi Cesar:
> 
> I have added to Hubert's class support for all AutoFilter and 
> FilterColumn methods by following their coding style. I do not use this 
> library, so I have not made any proof of use.
> 
> Regards. Diego

Gracias Diego, yo lo pruebo e informaré en el grupo.
He puesto otro mensaje ya que al eliminar filas o columnas se crean 
referencias dirculares, veo que lo que pasa es que no se actualizan las 
fórmulas adecuadamente, te voy a mandar un email personal y te lo 
explico, si me puedes ayudar y logramos ver el problema informaríamos al 
grupo.

Saludos. César.

Thanks Diego, I'll try it and inform the group.
I have put another message because when deleting rows or columns are 
done circulars references, I see that what happens is that the formulas 
are not updated properly, I am going to send you a personal email and I 
explain it to you, if you can help me and we can see the problem we 
would inform the group later.

Regards. César.
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sun, 20 May 2018 22:50:45 +0200
El 20/05/2018 a las 21:34, Jose Antonio Diego Kereje escribió:
> Hola César:
> 
> He añadido a la clase de Hubert soporte para todos los métodos 
> AutoFilter y FilterColumn siguiendo su mismo estilo de codificación. No 
> uso esta librería, por lo que no he hecho ninguna prueba de uso.
> 
> Saludos. Diego
> 
> Hi Cesar:
> 
> I have added to Hubert's class support for all AutoFilter and 
> FilterColumn methods by following their coding style. I do not use this 
> library, so I have not made any proof of use.
> 
> Regards. Diego

Diego, hay otro código ActiveX que utilizo mucho, me parece que no está 
en la Clase de Hubert

oExcel:Cells(1,1):Select()

Para posicionar el cursor en una determinada fila y columna.

¿Podrías decirme cómo es el código?

Muchísimas gracias por tú ayuda.

César.


Diego, there is another ActiveX code I use always, it seems is not in 
Hubert's Class

oExcel:Cells(1,1):Select ()

To put the cursor in a certain row and column.

Could you tell me what the code looks like?

Thank you very much for your help.

César.
Jose Antonio Diego KerejeRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Sun, 20 May 2018 23:41:20 +0200
Hola de nuevo César:

> Diego, hay otro código ActiveX que utilizo mucho, me parece que no está en 
> la Clase de Hubert

Sí, es la forma en que yo he usado Excel&Xbase++

> oExcel:Cells(1,1):Select()
> Para posicionar el cursor en una determinada fila y columna.
> ¿Podrías decirme cómo es el código?

Creo que estás confundido. No conocía esta librería, pero por el vistazo que 
he echado a las funciones de LibXl, no replican los métodos de la interface 
activeX del propio Excel, tampoco conceptualmente (como no podría ser de 
otro modo, dada la dimensión de las clases, métodos y variables que existen 
por debajo de Excel).

Me ha picado la curiosidad y acabo de trasformar uno de los ejemplos de 
filtrado de la web de libXl para ver si los cambios que he realizado en el 
código de Hubert funcionan y para comprobar su efecto. Lo adjunto con este 
mensaje.

Saludos. Diego


test.zip
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Mon, 21 May 2018 00:00:43 +0200
El 20/05/2018 a las 23:41, Jose Antonio Diego Kereje escribió:
> Hola de nuevo César:
> 
>> Diego, hay otro código ActiveX que utilizo mucho, me parece que no 
>> está en la Clase de Hubert
> 
> Sí, es la forma en que yo he usado Excel&Xbase++
> 
>> oExcel:Cells(1,1):Select()
>> Para posicionar el cursor en una determinada fila y columna.
>> ¿Podrías decirme cómo es el código?
> 
> Creo que estás confundido. No conocía esta librería, pero por el vistazo 
> que he echado a las funciones de LibXl, no replican los métodos de la 
> interface activeX del propio Excel, tampoco conceptualmente (como no 
> podría ser de otro modo, dada la dimensión de las clases, métodos y 
> variables que existen por debajo de Excel).
> 
> Me ha picado la curiosidad y acabo de trasformar uno de los ejemplos de 
> filtrado de la web de libXl para ver si los cambios que he realizado en 
> el código de Hubert funcionan y para comprobar su efecto. Lo adjunto con 
> este mensaje.
> 
> Saludos. Diego

Veo que funciona perfectamente, menudo favor me has hecho, es que la 
librería LibXl es rapidísima, a ver si con la ayuda de Pablo soluciono 
lo de las referencias circulares para que las fórmulas se actualicen bien.

Bueno y el poder posicionar el cursor en la fila 1 y columna 1

Gracias de nuevo.
Jose Antonio Diego KerejeRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Mon, 21 May 2018 00:14:20 +0200
Hola Cesar:

> Veo que funciona perfectamente, menudo favor me has hecho, es que la 
> librería LibXl es rapidísima, a ver si con la ayuda de Pablo soluciono lo 
> de las referencias circulares para que las fórmulas se actualicen bien.

Creo que el problema puede ser interno a la propia libXl. En la clase de 
Hubert el método utilizado está así:

METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
   LOCAL uRet := nil
   DEFAULT nColFirst TO 0
   DEFAULT nColLast TO 0
   uRet := FpQCall( 
{'LibXL','xlSheetRemoveColA'},'__bo__sl__sl__sl',::hHandle,nColFirst,nColLast)
RETURN uRet

Pero según la documentación oficial debería ser así:

METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
   LOCAL uRet := nil
   DEFAULT nColFirst TO 0
   DEFAULT nColLast TO 0
   uRet := FpQCall( 
{'LibXL','xlSheetRemoveColA'},'__sl__sl__sl__sl',::hHandle,nColFirst,nColLast)
RETURN uRet


> Bueno y el poder posicionar el cursor en la fila 1 y columna 1

A mí me parece que no existe el concepto "cursor" ya que no hay interface 
visual y los métodos de modificación del contenido de las celdas te permiten 
apuntar a la que tú quieras.

Saludos. Diego
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Mon, 21 May 2018 00:18:41 +0200
El 21/05/2018 a las 0:14, Jose Antonio Diego Kereje escribió:
> Hola Cesar:
> 
>> Veo que funciona perfectamente, menudo favor me has hecho, es que la 
>> librería LibXl es rapidísima, a ver si con la ayuda de Pablo soluciono 
>> lo de las referencias circulares para que las fórmulas se actualicen 
>> bien.
> 
> Creo que el problema puede ser interno a la propia libXl. En la clase de 
> Hubert el método utilizado está así:
> 
> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>    LOCAL uRet := nil
>    DEFAULT nColFirst TO 0
>    DEFAULT nColLast TO 0
>    uRet := FpQCall( 
> {'LibXL','xlSheetRemoveColA'},'__bo__sl__sl__sl',::hHandle,nColFirst,nColLast) 
> 
> RETURN uRet
> 
> Pero según la documentación oficial debería ser así:
> 
> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>    LOCAL uRet := nil
>    DEFAULT nColFirst TO 0
>    DEFAULT nColLast TO 0
>    uRet := FpQCall( 
> {'LibXL','xlSheetRemoveColA'},'__sl__sl__sl__sl',::hHandle,nColFirst,nColLast) 
> 
> RETURN uRet
> 
> 
>> Bueno y el poder posicionar el cursor en la fila 1 y columna 1
> 
> A mí me parece que no existe el concepto "cursor" ya que no hay 
> interface visual y los métodos de modificación del contenido de las 
> celdas te permiten apuntar a la que tú quieras.
> 
> Saludos. Diego

Voy a contactar con el equipo de LibXl
Hubert BrandelRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Tue, 22 May 2018 08:33:39 +0200
The original docu from www.libxl.com says:

bool removeCol(int colFirst, int colLast)
Removes columns from colFirst to colLast.
Returns false if error occurs.
Get error info with Book::errorMessage().

On there reading a bool means a long
with 0 is false, 1 (maybe also <> 0) is true.
Does your change solve the problem with the error ?

I can't read spanish, sorry.

Regards
Hubert


Am 21.05.2018 um 00:18 schrieb César Calvo:
> El 21/05/2018 a las 0:14, Jose Antonio Diego Kereje escribió:
>> Hola Cesar:
>>
>>> Veo que funciona perfectamente, menudo favor me has hecho, es que la 
>>> librería LibXl es rapidísima, a ver si con la ayuda de Pablo 
>>> soluciono lo de las referencias circulares para que las fórmulas se 
>>> actualicen bien.
>>
>> Creo que el problema puede ser interno a la propia libXl. En la clase 
>> de Hubert el método utilizado está así:
>>
>> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>>    LOCAL uRet := nil
>>    DEFAULT nColFirst TO 0
>>    DEFAULT nColLast TO 0
>>    uRet := FpQCall( 
>> {'LibXL','xlSheetRemoveColA'},'__bo__sl__sl__sl',::hHandle,nColFirst,nColLast) 
>>
>> RETURN uRet
>>
>> Pero según la documentación oficial debería ser así:
>>
>> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>>    LOCAL uRet := nil
>>    DEFAULT nColFirst TO 0
>>    DEFAULT nColLast TO 0
>>    uRet := FpQCall( 
>> {'LibXL','xlSheetRemoveColA'},'__sl__sl__sl__sl',::hHandle,nColFirst,nColLast) 
>>
>> RETURN uRet
>>
>>
>>> Bueno y el poder posicionar el cursor en la fila 1 y columna 1
>>
>> A mí me parece que no existe el concepto "cursor" ya que no hay 
>> interface visual y los métodos de modificación del contenido de las 
>> celdas te permiten apuntar a la que tú quieras.
>>
>> Saludos. Diego
> 
> Voy a contactar con el equipo de LibXl
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Tue, 22 May 2018 14:48:43 +0200
El 22/05/2018 a las 8:33, Hubert Brandel escribió:
> The original docu from www.libxl.com says:
> 
> bool removeCol(int colFirst, int colLast)
> Removes columns from colFirst to colLast.
> Returns false if error occurs.
> Get error info with Book::errorMessage().
> 
> On there reading a bool means a long
> with 0 is false, 1 (maybe also <> 0) is true.
> Does your change solve the problem with the error ?
> 
> I can't read spanish, sorry.
> 
> Regards
> Hubert
> 
> 
> Am 21.05.2018 um 00:18 schrieb César Calvo:
>> El 21/05/2018 a las 0:14, Jose Antonio Diego Kereje escribió:
>>> Hola Cesar:
>>>
>>>> Veo que funciona perfectamente, menudo favor me has hecho, es que la 
>>>> librería LibXl es rapidísima, a ver si con la ayuda de Pablo 
>>>> soluciono lo de las referencias circulares para que las fórmulas se 
>>>> actualicen bien.
>>>
>>> Creo que el problema puede ser interno a la propia libXl. En la clase 
>>> de Hubert el método utilizado está así:
>>>
>>> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>>>    LOCAL uRet := nil
>>>    DEFAULT nColFirst TO 0
>>>    DEFAULT nColLast TO 0
>>>    uRet := FpQCall( 
>>> {'LibXL','xlSheetRemoveColA'},'__bo__sl__sl__sl',::hHandle,nColFirst,nColLast) 
>>>
>>> RETURN uRet
>>>
>>> Pero según la documentación oficial debería ser así:
>>>
>>> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>>>    LOCAL uRet := nil
>>>    DEFAULT nColFirst TO 0
>>>    DEFAULT nColLast TO 0
>>>    uRet := FpQCall( 
>>> {'LibXL','xlSheetRemoveColA'},'__sl__sl__sl__sl',::hHandle,nColFirst,nColLast) 
>>>
>>> RETURN uRet
>>>
>>>
>>>> Bueno y el poder posicionar el cursor en la fila 1 y columna 1
>>>
>>> A mí me parece que no existe el concepto "cursor" ya que no hay 
>>> interface visual y los métodos de modificación del contenido de las 
>>> celdas te permiten apuntar a la que tú quieras.
>>>
>>> Saludos. Diego
>>
>> Voy a contactar con el equipo de LibXl
> 


Thansk Hubert.
I requested help in Spanish because if the conversation is complicated 
and large for me is better.
Sorry for this inconvenient.
When I could prove get error I will send other email.
At least now with the source of Diego the filters are done.
Pablo explained me the way for know works C.
Maybe in a future I could make new methods.
Regards.
César.
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Tue, 22 May 2018 21:07:07 +0200
El 21/05/2018 a las 0:14, Jose Antonio Diego Kereje escribió:
> Hola Cesar:
> 
>> Veo que funciona perfectamente, menudo favor me has hecho, es que la 
>> librería LibXl es rapidísima, a ver si con la ayuda de Pablo soluciono 
>> lo de las referencias circulares para que las fórmulas se actualicen 
>> bien.
> 
> Creo que el problema puede ser interno a la propia libXl. En la clase de 
> Hubert el método utilizado está así:
> 
> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>    LOCAL uRet := nil
>    DEFAULT nColFirst TO 0
>    DEFAULT nColLast TO 0
>    uRet := FpQCall( 
> {'LibXL','xlSheetRemoveColA'},'__bo__sl__sl__sl',::hHandle,nColFirst,nColLast) 
> 
> RETURN uRet
> 
> Pero según la documentación oficial debería ser así:
> 
> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>    LOCAL uRet := nil
>    DEFAULT nColFirst TO 0
>    DEFAULT nColLast TO 0
>    uRet := FpQCall( 
> {'LibXL','xlSheetRemoveColA'},'__sl__sl__sl__sl',::hHandle,nColFirst,nColLast) 
> 
> RETURN uRet
> 
> 
>> Bueno y el poder posicionar el cursor en la fila 1 y columna 1
> 
> A mí me parece que no existe el concepto "cursor" ya que no hay 
> interface visual y los métodos de modificación del contenido de las 
> celdas te permiten apuntar a la que tú quieras.
> 
> Saludos. Diego


Diego, it works fine but  What do for Delete rows filtered?

I think libxl dosen´t it.

I am searching in all documentation and ?????

Regards.
César.


**************
PROCEDURE Test
**************
LOCAL oBook, oSheet, oAutoFilter, oFilterColumn
LOCAL cPath:= StrTran( AppName( .T. ), AppName(), '' )
LOCAL B

oBook:= xlCreateXMLBook()

oSheet:= oBook:bookAddSheet( 'Patata' )

oSheet:sheetWriteStr(0, 0, "Country")
oSheet:sheetWriteStr(0, 1, "Road injures")
oSheet:sheetWriteStr(0, 2, "Smoking")
oSheet:sheetWriteStr(0, 3, "Suicide")

oSheet:sheetWriteStr(1, 0, "USA");  oSheet:sheetWriteStr(2, 0, "UK")
oSheet:sheetWriteNum(1, 1, 64);     oSheet:sheetWriteNum(2, 1, 94)
oSheet:sheetWriteNum(1, 2, 69);     oSheet:sheetWriteNum(2, 2, 55)
oSheet:sheetWriteNum(1, 3, 49);     oSheet:sheetWriteNum(2, 3, 64)

oSheet:sheetWriteStr(3, 0, "Germany"); oSheet:sheetWriteStr(4, 0, 
"Switzerland")
oSheet:sheetWriteNum(3, 1, 88);     oSheet:sheetWriteNum(4, 1, 93)
oSheet:sheetWriteNum(3, 2, 46);     oSheet:sheetWriteNum(4, 2, 54)
oSheet:sheetWriteNum(3, 3, 55);     oSheet:sheetWriteNum(4, 3, 50)

oSheet:sheetWriteStr(5, 0, "Spain");oSheet:sheetWriteStr(6, 0, "Italy")
oSheet:sheetWriteNum(5, 1, 86);     oSheet:sheetWriteNum(6, 1, 75)
oSheet:sheetWriteNum(5, 2, 47);     oSheet:sheetWriteNum(6, 2, 52)
oSheet:sheetWriteNum(5, 3, 69);     oSheet:sheetWriteNum(6, 3, 71)

oSheet:sheetWriteStr(7, 0, "Greece"); oSheet:sheetWriteStr(8, 0, "Japan")
oSheet:sheetWriteNum(7, 1, 67);     oSheet:sheetWriteNum(8, 1, 91)
oSheet:sheetWriteNum(7, 2, 23);     oSheet:sheetWriteNum(8, 2, 57)
oSheet:sheetWriteNum(7, 3, 87);     oSheet:sheetWriteNum(8, 3, 36)

oBook:bookSave( cPath + "Out.xlsx" )

oAutoFilter:= oSheet:sheetAutoFilter()
oAutoFilter:autoFilterSetRef( 0, 100, 0, 3 )

oFilterColumn:= oAutoFilter:autoFilterColumn( 0 )

oFilterColumn:FilterColumnSetCustomFilterEx("=","Japan","=","USA")

oSheet:sheetApplyFilter()

 What do for Delete rows filtered?

oSheet:SheetRemoveFilter()

oBook:bookSave( cPath + "FilteredOut.xlsx" )
oBook:bookRelease()
RETURN
Jose Antonio Diego KerejeRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Wed, 23 May 2018 00:24:15 +0200
Hi César:

I've made some changes, try this new code.

Regards. Diego


test.zip
Hubert BrandelRe: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Wed, 23 May 2018 06:40:20 +0200
Hi,

>> METHOD xlSheet:SheetRemoveCol( nColFirst, nColLast )
>>    LOCAL uRet := nil
>>    DEFAULT nColFirst TO 0
>>    DEFAULT nColLast TO 0
>>    uRet := FpQCall( 
>> {'LibXL','xlSheetRemoveColA'},'__sl__sl__sl__sl',::hHandle,nColFirst,nColLast) 
>> RETURN uRet

in this case you will get a numeric result !
If you don't want to write ...
if 0 <> oSheet:SheetRemoveCol(... )

you should change it to

 >> RETURN uRet <> 0  0 is false

but thats what __bo parameter should do too.
=?UTF-8?Q?C=c3=a9sar_Calvo?= Re: Method for Filters in Excel files with LibXL and Class code of Hubert Brandel.
on Mon, 21 May 2018 00:17:05 +0200
El 21/05/2018 a las 0:00, César Calvo escribió:
> El 20/05/2018 a las 23:41, Jose Antonio Diego Kereje escribió:
>> Hola de nuevo César:
>>
>>> Diego, hay otro código ActiveX que utilizo mucho, me parece que no 
>>> está en la Clase de Hubert
>>
>> Sí, es la forma en que yo he usado Excel&Xbase++
>>
>>> oExcel:Cells(1,1):Select()
>>> Para posicionar el cursor en una determinada fila y columna.
>>> ¿Podrías decirme cómo es el código?
>>
>> Creo que estás confundido. No conocía esta librería, pero por el 
>> vistazo que he echado a las funciones de LibXl, no replican los 
>> métodos de la interface activeX del propio Excel, tampoco 
>> conceptualmente (como no podría ser de otro modo, dada la dimensión de 
>> las clases, métodos y variables que existen por debajo de Excel).
>>
>> Me ha picado la curiosidad y acabo de trasformar uno de los ejemplos 
>> de filtrado de la web de libXl para ver si los cambios que he 
>> realizado en el código de Hubert funcionan y para comprobar su efecto. 
>> Lo adjunto con este mensaje.
>>
>> Saludos. Diego
> 
> Veo que funciona perfectamente, menudo favor me has hecho, es que la 
> librería LibXl es rapidísima, a ver si con la ayuda de Pablo soluciono 
> lo de las referencias circulares para que las fórmulas se actualicen bien.
> 
> Bueno y el poder posicionar el cursor en la fila 1 y columna 1
> 
> Gracias de nuevo.

Diego, ya que has cogido el concepto de la librería perfectaqmente, por 
si se te ocurre algo del problema de las referencias circulares.

Al hacer       oSheet:SheetRemoveRow(0,0)

MEDIELE.xlsx borra la línea pero no actualiza las referencias de las celdas.


Esta es mi conversación con Pablo Botella:

Pues hay algo más que se tendrá que hacer ya que haga una u otra opción 
sigue saliendo lo de las referencias circulares.

*--------------------------------------------------------------------------------
METHOD xlSheet:SheetRemoveRow( nRowFirst, nRowLast )
    LOCAL uRet := nil
    DEFAULT nRowFirst TO 0
    DEFAULT nRowLast TO 0
    //uRet := FpQCall( 
{'LibXL','xlSheetRemoveRowA'},'__bo__sl__sl__sl',::hHandle,nRowFirst,nRowLast)

    uRet := FpQCall( 
{'LibXL','xlSheetRemoveRowA'},'__sl__sl__sl__sl',::hHandle,nRowFirst,nRowLast)


RETURN uRet
*--------------------------------------------------------------------------------

oBook := xlCreateXLSXBook(cName,ckey)

oBook:BookSetKey(cName,ckey)

if oBook # NIL  LOG !
    oBook:BookSetKey(cName,cKey)
    if ! oBook:BookLoad(cFil)
       msgbox("LibXL.DLL no va","Error")
       else
       oSheet := oBook:BookGetSheet(0)

       cVal := oSheet:SheetReadStr(0,0)
       cVal := Upper(SubStr(cVal,1,6))

       oSheet:SheetRemoveRow(0,0)

       oBook:BookSave( cFil )
       oBook:destroy()
    endif

endif



Solo se me ocurre contactar con el equipo de la librería LibXL

De: Pablo Botella Navarro
Enviado el: domingo, 20 de mayo de 2018 23:56
Para: César Calvo
Asunto: Re: RV: New Methos for HBLibXL Class

Justito eso ggg
    int xlSheetRemoveRow(SheetHandle handle, introwFirst, int rowLast)

__sl__sl__sl__sl

pero como dice que devuelve 0 si falla tambien puedes ponerle 
__bo__sl__sl__sl para que te devuelva  .t. o .f.
Removes rows from rowFirst to rowLast. Returns 0 if error occurs. Get 
error info with xlBookErrorMessage().
•         int xlSheetRemoveCol(SheetHandle handle, intcolFirst, int colLast)


y esta pues igual


MEDIELE_COPIA.xlsx
MEDIELE.xlsx