The original article: COM Number Speller.
Introduction
Some time ago, I needed to print numbers as text in Excel (Office 2003 as far as I remember). Searching the internet, I found a solution for English language, but not for Romanian language.
So, I created a reusable piece of code that may be easily used in as many environments as possible. I chose COM and ATL to be the solution to this problem. This is also a good programming exercise for my rusty COM / C++ skills and I plan to use it as a template for all my future COM objects.
Using the Code
To install the COM object, just simply run Install.bat in NumberSpeller.zip archive.
Here is the Excel macro that makes use of the NumberSpeller
COM object:
Function Spell(n As Currency) As String
Dim s As NumberSpellerLib.speller
Set s = New NumberSpellerLib.speller
Dim o As Object
Set o = s
o.Language = "ro"
Spell = o.Translate(n)
End Function
Here is another example of using the component from WSH script:
var speller = new ActiveXObject("NumberSpeller.Speller");
speller.language = "en";
var numberToTranslate = 101001;
try
{
var textNumber = speller.Translate(numberToTranslate);
WScript.Echo(textNumber);
}
catch (e)
{
WScript.Echo(e.name + ": " + e.description + " " + e.number);
}
Points of Interest
- Error info support by implementing
IErrorInfo
interface.
- Help in CHM format and context identifiers specified in MIDL source file.
- BSTR manipulation using
CComBSTR
class provided by ATL.
IDispatch
support, so the component can be used from scripting environments.
- Spelling implementation itself and support for multiple languages (only Romanian and English for now).