Hướng dẫn tạo Macro chuyển số thành chữ trong Open Office 3.1 (Tiếng Anh)

Liên hệ QC

cadafi

Thành viên gạo cội
Thành viên BQT
Administrator
Tham gia
27/5/07
Bài viết
4,291
Được thích
11,364
Donate (Paypal)
Donate
Giới tính
Nam
Nghề nghiệp
Business Man
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...

attachment.php



attachment.php





2. Click chọn Edit, chúng ta sẽ vào màn hình soạn thảo Open Office Basic...


attachment.php



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)
attachment.php


Thao tác này để Merge Cell.
attachment.php



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.

attachment.php



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

  • 29-05-2009 10-00-04.jpg
    29-05-2009 10-00-04.jpg
    219 KB · Đọc: 478
  • 29-05-2009 10-07-50.jpg
    29-05-2009 10-07-50.jpg
    63.7 KB · Đọc: 472
  • 29-05-2009 10-11-53.jpg
    29-05-2009 10-11-53.jpg
    119.4 KB · Đọc: 456
  • 29-05-2009 10-16-53.jpg
    29-05-2009 10-16-53.jpg
    154.9 KB · Đọc: 460
  • 29-05-2009 10-19-18.jpg
    29-05-2009 10-19-18.jpg
    171.1 KB · Đọc: 442
  • 29-05-2009 10-28-38.jpg
    29-05-2009 10-28-38.jpg
    58.9 KB · Đọc: 446
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom