Hiện tại, có rất nhiều công ty (nhất là các công ty đầu tư nước ngoài) chuyển đổi sang sử dụng OpenOffice (vì sử dụng Excel 2003-2007 phải tốn tiền bản quyền). Sau đây mình xin được nên ra một số bước cụ thể để các bạn có thể tạo một hàm tự tạo đọc số thành chữ (tạm thời đọc tiếng Anh thôi) dùng cho OpenOffice và có thể sử dụng cho tất cả các spreadsheet (giống như Add-Ins của excel).
1. Đầu tiên, mở 1 file spreadsheet bất kỳ, sau đó vào Tool/Macro/Organize macro/OpenOffice.org Basic...
2. Click chọn Edit, chúng ta sẽ vào màn hình soạn thảo Open Office Basic...
3. Copy đoạn code này vào khung soạn thảo và lưu lại (Ctrl+S)
(Nguồn: http://www.oooforum.org/forum)
[highlight=vb]
REM ***** BASIC *****
REM ***** Written by DannyB and found at: http://www.oooforum.org/forum/viewtopic.phtml?p=160637 *****
Function NumToWords( ByVal nNumber As Double ) As String
cWords = ""
If nNumber < 0 Then
cWords = "Negative " + NumToWords( -1 * nNumber )
ElseIf nNumber <> Int( nNumber ) Then
cWords = NumToWords( Int( nNumber ) )
cWords = cWords + " point"
nFrac = nNumber - Int( nNumber )
Do
nFrac = nFrac * 10
nDigit = Int( nFrac )
nFrac = nFrac - nDigit
If nDigit > 0 Then
cDigitWord = NumToWords( nDigit )
cWords = cWords + " " + cDigitWord
Else
Exit Do
EndIf
Loop
ElseIf nNumber < 20 Then
Select Case nNumber
Case 0: cWords = "Zero"
Case 1: cWords = "One"
Case 2: cWords = "Two"
Case 3: cWords = "Three"
Case 4: cWords = "Four"
Case 5: cWords = "Five"
Case 6: cWords = "Six"
Case 7: cWords = "Seven"
Case 8: cWords = "Eight"
Case 9: cWords = "Nine"
Case 10: cWords = "Ten"
Case 11: cWords = "Eleven"
Case 12: cWords = "Twelve"
Case 13: cWords = "Thirteen"
Case 14: cWords = "Fourteen"
Case 15: cWords = "Fifteen"
Case 16: cWords = "Sixteen"
Case 17: cWords = "Seventeen"
Case 18: cWords = "Eighteen"
Case 19: cWords = "Nineteen"
End Select
ElseIf nNumber < 100 Then
nTensPlace = Int( nNumber / 10 )
nOnesPlace = nNumber Mod 10
Select Case nTensPlace * 10
Case 20: cWords = "Twenty"
Case 30: cWords = "Thirty"
Case 40: cWords = "Forty"
Case 50: cWords = "Fifty"
Case 60: cWords = "Sixty"
Case 70: cWords = "Seventy"
Case 80: cWords = "Eighty"
Case 90: cWords = "Ninty"
End Select
If nOnesPlace > 0 Then
cWords = cWords + " " + NumToWords( nOnesPlace )
EndIf
ElseIf nNumber < 1000 Then
nHundredsPlace = Int( nNumber / 100 )
nRest = nNumber Mod 100
cWords = NumToWords( nHundredsPlace )
cWords = cWords + " Hundred"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000 Then
nThousands = Int( nNumber / 1000 )
nRest = nNumber Mod 1000
cWords = NumToWords( nThousands )
cWords = cWords + " Thousand"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000000 Then
nMillions = Int( nNumber / 1000000 )
nRest = Int( nNumber Mod 1000000 )
cWords = NumToWords( nMillions )
cWords = cWords + " Million"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000000000 Then
nBillions = Int( nNumber / 1000000000 )
nRest = Int( nNumber Mod 1000000000 )
cWords = NumToWords( nBillions )
cWords = cWords + " Billion"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000000000000 Then
nTrillions = Int( nNumber / 1000000000000 )
nRest = Int( nNumber Mod 1000000000000 )
cWords = NumToWords( nTrillions )
cWords = cWords + " Trillion"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
' You can follow the pattern of the Millions / Billions / Trillions
' if you need bigger numbers.
EndIf
NumToWords() = cWords
End Function ' NumToWords
[/highlight]
Sau đó quay ra spreadsheet, gõ công thức sau:
Thao tác này để Merge Cell.
Code này chưa phải là tối ưu, trong quá trình sử dụng, mong các bạn cùng nhau chia sẻ để hoàn thiện.
Ngoài ra các bạn cũng có thể tham khảo code của OpenOffice basic qua các templetes sẵn có trong OpenOffice.org Macros, tất cả các hàm và thủ tục sẵn có của OpenOffice đều không khóa password, đều là nguồn mở để chúng ta tham khảo và học hỏi và hoàn thiện.
Vì em chưa hiểu hết OpenOffice Basic nên chưa thể có đoạn code cho việc chuyển số thành chữ bằng tiếng Việt UniCode. Hi vọng trong thời gian sắp tới chúng ta sẽ có được nó. Mong các bạn cùng nhau chung sức vì lợi ích chung của cộng đồng nguồn mở.
1. Đầu tiên, mở 1 file spreadsheet bất kỳ, sau đó vào Tool/Macro/Organize macro/OpenOffice.org Basic...
2. Click chọn Edit, chúng ta sẽ vào màn hình soạn thảo Open Office Basic...
3. Copy đoạn code này vào khung soạn thảo và lưu lại (Ctrl+S)
(Nguồn: http://www.oooforum.org/forum)
[highlight=vb]
REM ***** BASIC *****
REM ***** Written by DannyB and found at: http://www.oooforum.org/forum/viewtopic.phtml?p=160637 *****
Function NumToWords( ByVal nNumber As Double ) As String
cWords = ""
If nNumber < 0 Then
cWords = "Negative " + NumToWords( -1 * nNumber )
ElseIf nNumber <> Int( nNumber ) Then
cWords = NumToWords( Int( nNumber ) )
cWords = cWords + " point"
nFrac = nNumber - Int( nNumber )
Do
nFrac = nFrac * 10
nDigit = Int( nFrac )
nFrac = nFrac - nDigit
If nDigit > 0 Then
cDigitWord = NumToWords( nDigit )
cWords = cWords + " " + cDigitWord
Else
Exit Do
EndIf
Loop
ElseIf nNumber < 20 Then
Select Case nNumber
Case 0: cWords = "Zero"
Case 1: cWords = "One"
Case 2: cWords = "Two"
Case 3: cWords = "Three"
Case 4: cWords = "Four"
Case 5: cWords = "Five"
Case 6: cWords = "Six"
Case 7: cWords = "Seven"
Case 8: cWords = "Eight"
Case 9: cWords = "Nine"
Case 10: cWords = "Ten"
Case 11: cWords = "Eleven"
Case 12: cWords = "Twelve"
Case 13: cWords = "Thirteen"
Case 14: cWords = "Fourteen"
Case 15: cWords = "Fifteen"
Case 16: cWords = "Sixteen"
Case 17: cWords = "Seventeen"
Case 18: cWords = "Eighteen"
Case 19: cWords = "Nineteen"
End Select
ElseIf nNumber < 100 Then
nTensPlace = Int( nNumber / 10 )
nOnesPlace = nNumber Mod 10
Select Case nTensPlace * 10
Case 20: cWords = "Twenty"
Case 30: cWords = "Thirty"
Case 40: cWords = "Forty"
Case 50: cWords = "Fifty"
Case 60: cWords = "Sixty"
Case 70: cWords = "Seventy"
Case 80: cWords = "Eighty"
Case 90: cWords = "Ninty"
End Select
If nOnesPlace > 0 Then
cWords = cWords + " " + NumToWords( nOnesPlace )
EndIf
ElseIf nNumber < 1000 Then
nHundredsPlace = Int( nNumber / 100 )
nRest = nNumber Mod 100
cWords = NumToWords( nHundredsPlace )
cWords = cWords + " Hundred"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000 Then
nThousands = Int( nNumber / 1000 )
nRest = nNumber Mod 1000
cWords = NumToWords( nThousands )
cWords = cWords + " Thousand"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000000 Then
nMillions = Int( nNumber / 1000000 )
nRest = Int( nNumber Mod 1000000 )
cWords = NumToWords( nMillions )
cWords = cWords + " Million"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000000000 Then
nBillions = Int( nNumber / 1000000000 )
nRest = Int( nNumber Mod 1000000000 )
cWords = NumToWords( nBillions )
cWords = cWords + " Billion"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
ElseIf nNumber < 1000000000000000 Then
nTrillions = Int( nNumber / 1000000000000 )
nRest = Int( nNumber Mod 1000000000000 )
cWords = NumToWords( nTrillions )
cWords = cWords + " Trillion"
If nRest > 0 Then
cWords = cWords + " " + NumToWords( nRest )
EndIf
' You can follow the pattern of the Millions / Billions / Trillions
' if you need bigger numbers.
EndIf
NumToWords() = cWords
End Function ' NumToWords
[/highlight]
Sau đó quay ra spreadsheet, gõ công thức sau:
=numtowords(Số cần đọc/địa chỉ chứa số cần đọc)
Thao tác này để Merge Cell.
Code này chưa phải là tối ưu, trong quá trình sử dụng, mong các bạn cùng nhau chia sẻ để hoàn thiện.
Ngoài ra các bạn cũng có thể tham khảo code của OpenOffice basic qua các templetes sẵn có trong OpenOffice.org Macros, tất cả các hàm và thủ tục sẵn có của OpenOffice đều không khóa password, đều là nguồn mở để chúng ta tham khảo và học hỏi và hoàn thiện.
Vì em chưa hiểu hết OpenOffice Basic nên chưa thể có đoạn code cho việc chuyển số thành chữ bằng tiếng Việt UniCode. Hi vọng trong thời gian sắp tới chúng ta sẽ có được nó. Mong các bạn cùng nhau chung sức vì lợi ích chung của cộng đồng nguồn mở.
File đính kèm
Lần chỉnh sửa cuối: