2009/9/7 Steffen Grund <[email protected]>: > I was just wondering: createCursor() creates a cursor containing the whole > sheet, which could be slow when you have a big sheet.
I guess it depends on how it is doing that. Maybe it is only setting a bunch of pointers rather than reading and copying information from the spreadsheet, but seriously I don't have a clue. I actually downloaded the source code for OpenOffice.org once, and I was going to find out how parts of it is done, but it was too heavy so I gave up after a short while… J.R. > Maybe this is a way to create the cursor with better performance. > > Just an idea, Steffen > > Andrew Douglas Pitonyak wrote: >> >> Nice tip... I will change this in my document... >> >> I have no idea why this is written as it is, but many of the snippets were >> created years ago with OOo 1.x, so, the issue may be that the author of that >> particular macro (probably me) was not properly efficient, or, that OOo did >> not support the methodology. In this case, I suspect the first. >> >> On 08/30/2009 08:54 AM, Johnny Rosenberg wrote: >>> >>> At page 142 in the macro manual by A. Pitonyak, there is a section >>> about how to do it, here's a function that returns the last column of >>> the used area: >>> >>> Function getLastUsedColumn(oSheet as Object) as Integer >>> Dim oCell As Object >>> Dim oCursor As Object >>> Dim aAddress As Variant >>> oCell = oSheet.GetCellbyPosition( 0, 0 ) >>> oCursor = oSheet.createCursorByRange(oCell) >>> oCursor.GotoEndOfUsedArea(True) >>> aAddress = oCursor.RangeAddress >>> GetLastUsedColumn = aAddress.EndColumn >>> End Function >>> >>> I am wondering about the oCell thing. Why is that necessary? I tried >>> the following and it seems to work: >>> >>> Function getLastUsedColumn(oSheet as Object) as Integer >>> Dim oCursor As Object >>> Dim aAddress As Variant >>> oCursor = oSheet.createCursor >>> oCursor.GotoEndOfUsedArea(True) >>> aAddress = oCursor.RangeAddress >>> GetLastUsedColumn = aAddress.EndColumn >>> End Function >>> >>> Or even shorter, and still works and just as easy to follow (in my >>> opinion): >>> >>> Function getLastUsedColumn(oSheet as Object) as Integer >>> Dim oCursor As Object >>> oCursor = oSheet.createCursor >>> oCursor.GotoEndOfUsedArea(True) >>> GetLastUsedColumn = oCursor.RangeAddress.EndColumn >>> End Function >>> >>> Johnny Rosenberg >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
