[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