如何在Excel中将印地语数字转换为印地语文本?
印地语数字转印地语文本的实现方案
嘿,我明白你现在的需求——Excel自带的格式代码没法直接把数字转换成印地语的基数文本(比如把789变成सात सौ नवासी),不过咱们有两种靠谱的方法可以实现这个功能,一起来看看:
方案1:用VBA自定义函数(单元格直接调用)
这个方法适合需要在单个单元格里快速转换的场景,步骤很简单:
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 把下面的代码粘贴到模块里:
Function HindiNumberToText(ByVal num As Double) As String ' 定义印地语数字对应的基数文本 Dim ones() As String, tens() As String, hundreds() As String ones = Split("शून्य,एक,दो,तीन,चार,पांच,छह,सात,आठ,नौ", ",") tens = Split("", "दस,ग्यारह,बारह,तेरह,चौदह,पंद्रह,सोलह,सत्रह,अठारह,उन्नीस,बीस,तीस,चालीस,पचास,साठ,सत्तर,अस्सी,नब्बे", ",") hundreds = Split("", "एक सौ,दो सौ,तीन सौ,चार सौ,पांच सौ,छह सौ,सात सौ,आठ सौ,नौ सौ", ",") Dim numInt As Long, numStr As String numInt = Int(num) numStr = CStr(numInt) ' 处理0的情况 If numInt = 0 Then HindiNumberToText = ones(0) Exit Function End If Dim result As String, lenNum As Integer, i As Integer lenNum = Len(numStr) For i = lenNum To 1 Step -1 Select Case lenNum - i + 1 ' 处理个位 Case 1 If Mid(numStr, i, 1) <> "0" Then result = ones(CInt(Mid(numStr, i, 1))) & " " & result End If ' 处理十位 Case 2 If Mid(numStr, i, 1) = "1" Then ' 10-19的特殊情况 result = tens(CInt(Mid(numStr, i, 2))) & " " & result i = i - 1 ' 跳过已处理的个位 ElseIf Mid(numStr, i, 1) <> "0" Then result = tens(CInt(Mid(numStr, i, 1)) + 9) & " " & result End If ' 处理百位 Case 3 If Mid(numStr, i, 1) <> "0" Then result = hundreds(CInt(Mid(numStr, i, 1))) & " " & result End If ' 这里可以扩展处理千位、十万位等更大的数字,按需添加即可 End Select Next i ' 去除首尾多余空格 HindiNumberToText = Trim(result) End Function
- 保存文件为**启用宏的工作簿(.xlsm)**格式
- 回到Excel,在任意单元格输入
=HindiNumberToText(789),就能得到你想要的सात सौ नवासी啦
方案2:用Power Query(无宏批量转换)
如果不想启用宏,或者需要批量转换大量数字,Power Query是个不错的选择:
- 把需要转换的数字放在一列(比如A列,A2开始是数字)
- 选中这列数据,点击「数据」选项卡→「从表格/区域」(Excel会自动把数据导入Power Query编辑器)
- 在Power Query编辑器里,点击「添加列」→「自定义列」
- 在弹出的对话框里,输入下面的Power Query公式:
let // 定义数字到印地语文本的映射 ones = {"शून्य","एक","दो","तीन","चार","पांच","छह","सात","आठ","नौ"}, tens = {"","दस","ग्यारह","बारह","तेरह","चौदह","पंद्रह","सोलह","सत्रह","अठारह","उन्नीस","बीस","तीस","चालीस","पचास","साठ","सत्तर","अस्सी","नब्बे"}, hundreds = {"","एक सौ","दो सौ","तीन सौ","चार सौ","पांच सौ","छह सौ","सात सौ","आठ सौ","नौ सौ"}, // 自定义转换函数 NumToHindi = (num as number) as text => let numInt = Number.IntegerDivide(num, 1), numStr = Text.From(numInt), len = Text.Length(numStr), convert = if numInt = 0 then ones{0} else if len = 1 then ones{numInt} else if len = 2 then if numInt < 20 then tens{numInt} else let tenPart = Number.IntegerDivide(numInt, 10), onePart = numInt - tenPart*10 in tens{tenPart + 9} & (if onePart > 0 then " " & ones{onePart} else "") else if len = 3 then let hundredPart = Number.IntegerDivide(numInt, 100), remain = numInt - hundredPart*100 in hundreds{hundredPart} & (if remain > 0 then " " & NumToHindi(remain) else "") else "" // 可扩展处理更大数字 in convert, // 应用转换函数到数据列 AddedHindiText = Table.AddColumn(Source, "印地语文本", each NumToHindi([Column1])) in AddedHindiText
- 点击「关闭并上载」,转换后的印地语文本就会出现在新的工作表里啦
两种方法都能实现你的需求,你可以根据自己的场景选择~
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

