LibreOffice Calcバージョン6.0.3.2内でドルの値を単語に変換する方法があるかどうか疑問に思っています
$1932.19
になるだろう
One Thousand Nine Hundred Thirty Two Dollars And Nineteen Cents
this 関数が見つかりました。 2010年に更新されました。互換性がありません。与えられた例
=MONEYTEXT(25)
返却値
ERR: 504
誰か他の提案がありますか?
これは18.04 LTSのLibreCalc 6.0.3.2で動作し、16.04 LTSの6.0.5.2でテストしました。
拡張機能を https://extensions.libreoffice.org/extensions/numbertext-1 からダウンロードします
次に、LibreOffice Calcの[ツール]-> [拡張機能マネージャー]に移動します。
[追加]をクリックして、ダウンロードしたファイルを選択します。
拡張機能が動作しない場合は、パッケージlibreoffice-script-provider-python
がインストールされているかどうかを確認し、インストールされていない場合はインストールします。
テキストを小文字にしたい場合は、次のようにする必要があります。
=LOWER(MONEYTEXT(1932.19))
そして、大文字の場合は比較的同じです:
=UPPER(MONEYTEXT(1932.19))
お役に立てれば!
Libreoffice Calcでは、Microsoft Excelの "VBA"(Visual Basic for Applications)に類似した "BASIC"(初心者向け汎用シンボリック命令コード)言語を使用する "マクロ"を有効にできます。
独自のマクロを使用することの利点は、「将来を保証する」ことです。小切手/小切手作成の英語は変更されることはありませんが、過去の一部の拡張アドオンは現在機能していません。
BASICマクロに関する最も尊敬されるガイドの概要は、 こちら にあります。
Apache Open Office(LibreOfficeとほぼ同一)から: Calc BasicのSpellNumber 。著者によると、これはまだデバッグが必要です。
Microsoft Excelの場合: Excelで数字をスペルアウトするか英語の単語に変換する方法? 。 Libreofficeは、ExcelのVBA(Visual Basic for Applications)を実験的にサポートしています。したがって、以下のマクロをそのまま実装するか、Libre Office BASIC構文に変換できます。
Function SpellNumberToEnglish(ByVal pNumber)
'Updateby20131113
Dim Dollars, Cents
arr = Array("", "", " Thousand ", " Million ", " Billion ", " Trillion ")
pNumber = Trim(Str(pNumber))
xDecimal = InStr(pNumber, ".")
If xDecimal > 0 Then
Cents = GetTens(Left(Mid(pNumber, xDecimal + 1) & "00", 2))
pNumber = Trim(Left(pNumber, xDecimal - 1))
End If
xIndex = 1
Do While pNumber <> ""
xHundred = ""
xValue = Right(pNumber, 3)
If Val(xValue) <> 0 Then
xValue = Right("000" & xValue, 3)
If Mid(xValue, 1, 1) <> "0" Then
xHundred = GetDigit(Mid(xValue, 1, 1)) & " Hundred "
End If
If Mid(xValue, 2, 1) <> "0" Then
xHundred = xHundred & GetTens(Mid(xValue, 2))
Else
xHundred = xHundred & GetDigit(Mid(xValue, 3))
End If
End If
If xHundred <> "" Then
Dollars = xHundred & arr(xIndex) & Dollars
End If
If Len(pNumber) > 3 Then
pNumber = Left(pNumber, Len(pNumber) - 3)
Else
pNumber = ""
End If
xIndex = xIndex + 1
Loop
Select Case Dollars
Case ""
Dollars = "No Dollars"
Case "One"
Dollars = "One Dollar"
Case Else
Dollars = Dollars & " Dollars"
End Select
Select Case Cents
Case ""
Cents = " and No Cents"
Case "One"
Cents = " and One Cent"
Case Else
Cents = " and " & Cents & " Cents"
End Select
SpellNumberToEnglish = Dollars & Cents
End Function
Function GetTens(pTens)
Dim Result As String
Result = ""
If Val(Left(pTens, 1)) = 1 Then
Select Case Val(pTens)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else
Select Case Val(Left(pTens, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select
Result = Result & GetDigit(Right(pTens, 1))
End If
GetTens = Result
End Function
Function GetDigit(pDigit)
Select Case Val(pDigit)
Case 1: GetDigit = "One"
Case 2: GetDigit = "Two"
Case 3: GetDigit = "Three"
Case 4: GetDigit = "Four"
Case 5: GetDigit = "Five"
Case 6: GetDigit = "Six"
Case 7: GetDigit = "Seven"
Case 8: GetDigit = "Eight"
Case 9: GetDigit = "Nine"
Case Else: GetDigit = ""
End Select
End Function
Calc Basic Macroが投稿されました here 数字を単語に変換します:
REM ***** BASIC *****
Option Explicit
Sub Main
Print getAmountInWords("999999999.99")
End Sub
'********************************************************************************************************
'Function Name : getAmountInWords
'Description : To convert the Amount value into words(formatted as "000000000.00")
' (Maximum allowed limit 999999999.99)
'Input Parameters : Amount
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getAmountInWords(strAmount As String) As String
Dim strIntPart As String
Dim strDecPart As String
Dim strCroresPart As String
Dim strLakhsPart As String
Dim strThousandsPart As String
Dim strHundredsPart As String
Dim strTensPart As String
Dim strOnesPart As String
Dim strDecTensPart As String
Dim strDecOnesPart As String
Dim strAmtWords As String
Dim dblIntPart As Double
Dim intDecPart As Integer
Dim strDecWords As String
Dim iErr As Integer
'handle for typemismatch error
'??Err.Clear
'??On Error Resume Next
On Error Goto BadError
strAmount = CDbl(strAmount)
'??If Err.Number = "13" Then
'?? getAmountInWords = ""
'?? Exit Function
'??End If
'??Err.Clear
strAmount = Format(Trim(strAmount), "000000000.00")
'if the value is negative,zero above the limit then give error message
If Val(strAmount) < 0 Then
getAmountInWords = ""
Exit Function
ElseIf Val(strAmount) = 0 Then
getAmountInWords = "Rupees Zero"
Exit Function
ElseIf Val(strAmount) > 999999999.99 Then
getAmountInWords = ""
Exit Function
End If
'store the integer and decimal parts separately
strIntPart = Mid(strAmount, 1, 9)
strDecPart = Mid(strAmount, 11, 2)
'store the individual places in variables
strCroresPart = Mid(strIntPart, 1, 2)
strLakhsPart = Mid(strIntPart, 3, 2)
strThousandsPart = Mid(strIntPart, 5, 2)
strHundredsPart = Mid(strIntPart, 7, 1)
strTensPart = Mid(strIntPart, 8, 1)
strOnesPart = Mid(strIntPart, 9, 1)
strDecTensPart = Mid(strDecPart, 1, 1)
strDecOnesPart = Mid(strDecPart, 2, 1)
strAmtWords = ""
'To make the Crores Part
If Val(strCroresPart) <> 0 Then
strAmtWords = strAmtWords & getCroresPart(strCroresPart)
End If
'To make the Lakhs Part
If Val(strLakhsPart) <> 0 Then
strAmtWords = strAmtWords & getLakhsPart(strLakhsPart)
End If
'To make the Thousands Part
If Val(strThousandsPart) <> 0 Then
strAmtWords = strAmtWords & getThousandsPart(strThousandsPart)
End If
'To make the hundreds Part
If Val(strHundredsPart) <> 0 Then
strAmtWords = strAmtWords & getOnesColumn(Format(strHundredsPart, "00")) & " Hundred "
End If
'To make Tens and Ones part
If Val(strTensPart & strOnesPart) <> 0 And Val(strAmount) > 100 Then
strAmtWords = strAmtWords & "and " & getTensOnesPart(strAmount, strTensPart, strOnesPart)
Else
strAmtWords = strAmtWords & getTensOnesPart(strAmount, strTensPart, strOnesPart)
End If
strDecWords = ""
'To make Tens and Ones part in the decimal part
If Val(strDecTensPart & strDecOnesPart) <> 0 Then
strDecWords = strDecWords & getTensOnesPart(Val(strAmount), strDecTensPart, strDecOnesPart)
End If
'If both integer and decimal part are not Zero then add Rupees and Paise only
If Val(strDecPart) <> 0 And Val(strIntPart) <> 0 Then
getAmountInWords = "Rupees " & strAmtWords & " and " & strDecWords & " Paise only"
'If deciaml part is zero then add Rupees and only
ElseIf Val(strIntPart) <> 0 And Val(strDecPart) = 0 Then
getAmountInWords = "Rupees " & strAmtWords & " Only"
'If Integer part is zero then add Paise only
ElseIf Val(strIntPart) = 0 And Val(strDecPart) <> 0 Then
getAmountInWords = strDecWords & " Paise Only"
End If
'??Replace is not supported in OOo Basic
'??getAmountInWords = Trim(Replace(getAmountInWords, " ", " "))
getAmountInWords = Trim(getAmountInWords, " ", " ")
Exit Function
BadError:
iErr = Err
If Err = 13 Then
getAmountInWords = ""
Exit Function
Else
REM OK, do what?
getAmountInWords = ""
Print "Did not expect to get here with err " & iErr
End If
End Function
'********************************************************************************************************
'Function Name : getOnesColumn
'Description : To convert the number in ones column into words
'Input Parameters : String(ones value formated as "00")
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getOnesColumn(strValue As String) As String
Select Case strValue
Case "01"
getOnesColumn = "One"
Case "02"
getOnesColumn = "Two"
Case "03"
getOnesColumn = "Three"
Case "04"
getOnesColumn = "Four"
Case "05"
getOnesColumn = "Five"
Case "06"
getOnesColumn = "Six"
Case "07"
getOnesColumn = "Seven"
Case "08"
getOnesColumn = "Eight"
Case "09"
getOnesColumn = "Nine"
End Select
End Function
'********************************************************************************************************
'Function Name : getTensColumnWithOne
'Description : To convert the number in tens and ones column into words
' if the combined(tens+ones) value is between 10 and 19
'Input Parameters : String
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getTensColumnWithOne(strValue As String) As String
Select Case strValue
Case "10"
getTensColumnWithOne = "Ten"
Case "11"
getTensColumnWithOne = "Eleven"
Case "12"
getTensColumnWithOne = "Twelve"
Case "13"
getTensColumnWithOne = "Thirteen"
Case "14"
getTensColumnWithOne = "Fourteen"
Case "15"
getTensColumnWithOne = "Fifteen"
Case "16"
getTensColumnWithOne = "Sixteen"
Case "17"
getTensColumnWithOne = "Seventeen"
Case "18"
getTensColumnWithOne = "Eighteen"
Case "19"
getTensColumnWithOne = "Nineteen"
End Select
End Function
'********************************************************************************************************
'Function Name : getTensColumn
'Description : To convert the number in tens column into words
' if the combined(tens+ones) value is between 20 and 99
'Input Parameters : String
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getTensColumn(strValue As String) As String
Select Case strValue
Case "2"
getTensColumn = "Twenty"
Case "3"
getTensColumn = "Thirty"
Case "4"
getTensColumn = "Forty"
Case "5"
getTensColumn = "Fifty"
Case "6"
getTensColumn = "Sixty"
Case "7"
getTensColumn = "Seventy"
Case "8"
getTensColumn = "Eighty"
Case "9"
getTensColumn = "Ninety"
End Select
End Function
'********************************************************************************************************
'Function Name : getCroresPart
'Description : To convert the crore part into words
'Input Parameters : String(crore value)
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getCroresPart(strCrore As String) As String
If Val(strCrore) < 10 Then
If Val(strCrore) = 1 Then
getCroresPart = getOnesColumn(strCrore) & " Crore "
Else
getCroresPart = getOnesColumn(strCrore) & " Crores "
End If
ElseIf Val(strCrore) < 20 Then
getCroresPart = getCroresPart & getTensColumnWithOne(strCrore) & " Crores "
Else
getCroresPart = getCroresPart & getTensColumn(Mid(strCrore, 1, 1))
If Mid(strCrore, 2, 1) <> "0" Then
getCroresPart = getCroresPart & " " & _
getOnesColumn(Format(Mid(strCrore, 2, 1), "00"))
End If
getCroresPart = getCroresPart & " Crores "
End If
End Function
'********************************************************************************************************
'Function Name : getLakhsPart
'Description : To convert the lakh part into words
'Input Parameters : String(Lakh value)
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getLakhsPart(strLakh As String) As String
If Val(strLakh) < 10 Then
If Val(strLakh) = 1 Then
getLakhsPart = getLakhsPart & getOnesColumn(strLakh) & " Lakh "
Else
getLakhsPart = getLakhsPart & getOnesColumn(strLakh) & " Lakhs "
End If
ElseIf Val(strLakh) < 20 Then
getLakhsPart = getLakhsPart & getTensColumnWithOne(strLakh) & " Lakhs "
Else
getLakhsPart = getLakhsPart & getTensColumn(Mid(strLakh, 1, 1))
If Mid(strLakh, 2, 1) <> "0" Then
getLakhsPart = getLakhsPart & " " & _
getOnesColumn(Format(Mid(strLakh, 2, 1), "00"))
End If
getLakhsPart = getLakhsPart & " Lakhs "
End If
End Function
'********************************************************************************************************
'Function Name : getThousandsPart
'Description : To convert the thousand part into words
'Input Parameters : String(thousand value)
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getThousandsPart(strThousand As String) As String
If Val(strThousand) < 10 Then
getThousandsPart = getThousandsPart & getOnesColumn(strThousand) & " Thousand "
ElseIf Val(strThousand) < 20 Then
getThousandsPart = getThousandsPart & getTensColumnWithOne(strThousand) & " Thousand "
Else
getThousandsPart = getThousandsPart & getTensColumn(Mid(strThousand, 1, 1))
If Mid(strThousand, 2, 1) <> "0" Then
getThousandsPart = getThousandsPart & " " & _
getOnesColumn(Format(Mid(strThousand, 2, 1), "00"))
End If
getThousandsPart = getThousandsPart & " Thousand "
End If
End Function
'********************************************************************************************************
'Function Name : getTensOnesPart
'Description : To convert the tens and ones part into words
'Input Parameters : actual total amount,tens value,ones value
'Returns : String
'Creat by : Sanjeev Meher on 9th Feb 2013
'Specific Logic used: None
'********************************************************************************************************
Public Function getTensOnesPart(strAmount As String, strTensPart As String, strOnesPart As String) As String
If Val(strTensPart & strOnesPart) < 10 Then
getTensOnesPart = getTensOnesPart & getOnesColumn(strTensPart & strOnesPart)
ElseIf Val(strTensPart & strOnesPart) < 20 Then
getTensOnesPart = getTensOnesPart & getTensColumnWithOne(strTensPart & strOnesPart)
Else
getTensOnesPart = getTensOnesPart & getTensColumn(strTensPart)
If Mid(strOnesPart, 2, 1) <> "0" Then
getTensOnesPart = getTensOnesPart & " " & getOnesColumn(Format(strOnesPart, "00"))
End If
End If
End Function
このマクロの通貨単位は「Lakhs」および「Crore」です。必要に応じてコードを変更できます。