Hi Jan,

have you seen 
http://development.openoffice.org/releases/DEV300_m50_snapshot.html ?

-> Transporting newlines in spreadsheet formulas
    http://www.openoffice.org/issues/show_bug.cgi?id=35913

Oliver


Am 12.06.2009 22:39 schrieb Jan Holst Jensen:
> Hi all.
> 
> I am developing an add-in that has to work with multi-line text entries
> in cells. The text entries that will be processed are protein entries
> that in most formats are line-oriented, so there is no way around
> dealing with multi-line cells.
> 
> The code below illustrates that multi-line text entered into a cell lose
> linefeeds when passed to a formula (seems like linefeeds are converted
> to spaces ?). Open a blank spreadsheet document, paste the code into the
> Standard module of that document and run the code.
> 
> As you can see, all linefeeds are stripped when the Cell value is passed
> to a formula: B1 shows 0. However, if linefeeds occur in the result of a
> formula they are retained: B2 shows 2 (control chars of A1 are lost but
> the added control chars of the ExtraLineFunc() function are counted).
> 
> The really perplexing part is that if you access the Cell's String
> property directly the control chars are accessible. See results in B4
> and B5.
> 
> Is there any way that I can trick Calc to pass the cell value
> differently to the underlying spreadsheet function ? The spreadsheet
> function is implemented in Python as an UNO component if that's any help.
> 
> Behavior observed in both OpenOffice 3.0.1 and 3.1.0. Only tested on
> Windows XP.
> 
> Cheers
> -- Jan
> 
> <code>
> Sub Main
>  Sheet = ThisComponent.Sheets(0)
>  Sheet.GetCellByPosition(0, 0).String = "Hello" & Chr(13) & Chr(10) &
> "World"
>  Sheet.GetCellByPosition(0, 1).Formula = "=EXTRALINEFUNC(A1)"
> 
>  ' Passing Cell's text to function via formula.
>  Sheet.GetCellByPosition(1, 0).Formula = "=CONTROLCHARCOUNT(A1)"
>  Sheet.GetCellByPosition(1, 1).Formula = "=CONTROLCHARCOUNT(A2)"
> 
>  ' Passing Cell's text directly to function via the String property.
>  S = Sheet.GetCellByPosition(0, 0).String
>  Sheet.GetCellByPosition(1, 3).Value = ControlCharCount(S)
>  S = Sheet.GetCellByPosition(0, 1).String
>  Sheet.GetCellByPosition(1, 4).Value = ControlCharCount(S)
> End Sub
> 
> Function ExtraLineFunc(S1 as String)
>  ExtraLineFunc = S1 & Chr(13) & Chr(10) & "Extra line"
> End Function
> 
> Function ControlCharCount(S1 as String)
>  Dim Result as Integer
> 
>  Result = 0
>  For i = 1 to Len(S1) Step 1
>    If Asc(Mid(S1, i, 1)) < 32 Then
>      Result = Result + 1
>    End If
>  Next i
> 
>  ControlCharCount = Result
> End Function
> </code>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@api.openoffice.org
> For additional commands, e-mail: dev-h...@api.openoffice.org
> 


-- 

GnuPG key 0xCFD04A45: 8822 057F 4956 46D3 352C 1A06 4E2C AB40 CFD0 4A45

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to