Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index



You may also try using the cell range and calling GetDataArray() to get all of the data including numbers and strings. If you are simply running through about 2000 cells, this should be very fast, especially if you know that the cells are filled sequentially because then you can use a binary type search rather than a sequential search.

In AndrewMacro.odt I have a section on searching Calc comparing three different methods. It might be useful.

On 07/20/2012 03:31 AM, Fernand Vanrie wrote:
 Johnny,
I suppose you have to run the check 2 Times, first SearchType = 0 here we find if there is a formula use "."
then SearchType 1 on the found area

the SearchString has a different meaning , depending on the .SearchType
= 1 then the SearchString is the is the result of the formula or the value content
= 0 then the SearchString is the formula string

hope it helps

Fernand
Just can't figure it out. I have a column of 2000 formulas and values.
Right now, A1:A1620 contains values, and A1621:A2000 contains
formulas. The formulas in A1621:A2000, at the moment, return empty
strings, all of them, so it looks like only the 1620 first rows
contains data.
So the formulas looks something like =IF(this and that;"";something
else) (but a bit more complicated). The point is that if I input
something on a ”new” row in one of the other columns, the A column
shall, in some cases, display something.

Okay, that's what the spreadsheet looks like, roughly.

Now I use a couple of macros to do things for me a lot faster than I
could ever do myself. One small part of a new macro I'm trying to
write needs to search for the first ”empty” row, which means the first
row where the A column contains a formula that returns an empty
string.

Here's what I tried:
Function FindCurrentRow(Sheet As Object) As Integer
    Dim SearchDescriptor As Object
    SearchDescriptor=Sheet.createSearchDescriptor()
    With SearchDescriptor
        .SearchByRow=False ' I want to search by column, starting at A.
        .SearchRegularExpression=False
        .SearchString=""
        .SearchType=1 ' 0=Search in formulae, 1=Search values.
    End With

    Dim Found As Object
    Found=Sheet.findFirst(SearchDescriptor)
    FindCurrentRow=Found.getCellAddress().Row
End Function

In this example I expect the function to return 1620 (which is the row
address for the cell A1621). Instead 2000 is returned, so for some
reason, when my cell formula returns "", that doesn't seem to be the
same as .SearchString="".
I also tried different values of .SearchValue, still with the same
result: 2000 instead of 1620. So it only finds the first cell in the A
column that is REALLY empty – no formula, no value.

To me this seems like a bug, but for someone else, hopefully, it might
seem like I'm just stupid, so feel free to call me stupid and, more
important, tell me what I'm doing wrong and how I should do instead…



Kind regards

Johnny Rosenberg
ジョニー・ローゼンバーグ




--
Andrew Pitonyak
My Macro Document: http://www.pitonyak.org/AndrewMacro.odt
Info:  http://www.pitonyak.org/oo.php




--
For unsubscribe instructions e-mail to: users+help@global.libreoffice.org
Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/global/users/
All messages sent to this list will be publicly archived and cannot be deleted

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.