[oodisc] Number in words

Vladimir Bukhal vbux на artmed.ru
Пн Окт 6 22:35:35 MSD 2003


Здравствуйте, Алексей.
Засел за работу над модулем. Взял за основу ваш вариант: признаю, что
он удачен.
1. В Вашей версии модуля неверно обрабатывались чисела, содержащие 11-14.
Решается это достаточно легко: меняются местами блок "For numbers
between 10 and 20" и "Select Case iRemainder..."
2.Все же имеет иначе вычислять копейки:
iCopecks = Int((dInNum-Int(dInNum))*100+0.5)
Теперь все абсолютно корректно. Теперь можно говорить о включении
миллиардов.
Представленная функция-округление к ближайшему целому. Днем
действительно "тормозил": моей "эмпирической добавке", можно придать
вполне определенный смысл. 
3.Новая версия функции propis в прикрепленном файле.
Теперь она обрабатывает все выделения в таблице или текстовом
документе и меняет числовые на их эквивалент прописью.
4.Постараюсь продвинуться к большей параметризации.
В моем варианте, это все же достигалось меньшей кровью.
Для вашего, думаю, придется принять в отдельное рассмотрение iOrder=1,
оставив стандартные наборы, ввести опциональные параметры
form1 As String,form2 As String,form3 As String,
формы слова
bisFemale As boolean,sDr As String
род                  обозначение дробной части или "", если не
требуется
Постараюсь предложить не очень страшное решение.

С уважением,
  Владимир <vbux на artmed.ru>
----------- УМЕДХЭБС ЮБУФШ -----------
Sub propis
        Dim cval As Double
        Dim ctxt As String
        Dim oCC As Integer, oCR As Integer
        Dim oCell As Object
        Dim oCells As Object
        Dim oSelect As Object
        Dim oActiveSheet As Object
        Dim oDocument As Object
        Dim sTypeOfDocument As String
        Dim oSelections As Object
        Dim oText As Object
        Dim Count As Long
        Dim i As Integer
        Dim sTestString As String
        Dim oController As Object
        Dim oDesktop As Object

        GlobalScope.BasicLibraries.LoadLibrary("MyFormat")
        oDocument=Thiscomponent
        Select case getDocumentType(oDocument)
        case "Spreadsheet"
                oDesktop = createUnoService("com.sun.star.frame.Desktop")
                oController = oDesktop.CurrentFrame.Controller  
                oSelect = oController.Selection
            oSelections = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
        oSelections.insertByName("", oSelect)
                oCells = oSelections.Cells.createEnumeration
                If Not oCells.hasMoreElements Then Print "ЊҐ­пвм ­ҐзҐЈ®"
                        While oCells.hasMoreElements
                            oCell = oCells.nextElement
                                cval=oCell.getValue()
                                If cval<>0 Then
                                        ctxt = n2s_ru_rru(cval)
                                        oCell.setString(ctxt)
                                End If  
                        Wend
        case "TextDocument"
                oSelections = ThisComponent.getCurrentSelection()
                If Not IsNull(oSelections) Then
                        oText = oDocument.Text
                        Count = oSelections.getCount()
                        For i = 0 To Count - 1
                                oSelect = oSelections.getByIndex(i)
                                sTestString=ltrim(oSelect.getString())
                                If IsNumeric(sTestString) Then
                                        ctxt = n2s_ru_rru(CDbl(sTestString))
                                        oSelect.SetString(ctxt)
                                End If
                        Next
                End If
        Case Else
                MsgBox ("Please, run this macro either on a text document or on a spreadsheet!", _
                        64, "Number by literal")
        End Select
End Sub


Подробная информация о списке рассылки Oo-discuss