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: [email protected]
> For additional commands, e-mail: [email protected]
>
--
GnuPG key 0xCFD04A45: 8822 057F 4956 46D3 352C 1A06 4E2C AB40 CFD0 4A45
signature.asc
Description: OpenPGP digital signature
