如何查询Excel英文函数名、日期数字格式对应的本地化语言等效值
Excel多语言环境下格式与函数名映射获取方案
核心结论
不需要查询注册表,直接通过Excel OLE对象的原生属性即可获取所有本地化映射,兼容性覆盖所有主流Excel版本。
具体实现方法
1. 日期/数字格式代码本地化处理
无需硬编码yyyy/aaaa这类区域相关的格式字符,调用Application.International属性直接获取当前环境的格式标识:
oExcel.International(4)(对应常量xlYearCode):返回当前语言的年格式字符,英文环境返回y,法语环境返回aoExcel.International(5)(对应常量xlMonthCode):返回当前语言的月格式字符oExcel.International(6)(对应常量xlDayCode):返回当前语言的日格式字符
拼接后即可得到跨语言兼容的格式字符串,示例代码(可直接转写为dBase OLE调用逻辑):
yChar = oExcel.International(4) mChar = oExcel.International(5) dChar = oExcel.International(6) // 拼接为4位年-2位月-2位日 时分秒的通用格式 formatStr = yChar + yChar + yChar + yChar + "-" + mChar + mChar + "-" + dChar + dChar + " hh:mm:ss" oExcel.Range("A:A").NumberFormat = formatStr
2. 函数名本地化映射获取
利用Excel公式的双存储特性直接转换:Formula属性永远存储英文函数名的公式,FormulaLocal属性存储当前本地化语言的公式,通过临时写入公式、读取本地公式的方式即可拿到对应映射,示例逻辑:
// 传入英文函数名,返回对应本地化函数名 Function getLocalizedFuncName(engFuncName) // 临时写入带简单参数的英文公式,选表格最后一个单元格避免影响用户数据 oExcel.Range("XFD1048576").Formula = "=" + engFuncName + "(1,2)" // 读取本地化公式,切掉参数部分得到函数名 res = Replace(oExcel.Range("XFD1048576").FormulaLocal, "(1,2)", "") // 清空临时单元格 oExcel.Range("XFD1048576").Clear return res End Function
你只需要维护自己用到的英文函数名列表,运行时批量转成对应语言的函数名缓存即可,不需要维护全量多语言映射表。
额外说明
不推荐通过注册表查询的方式获取映射:不同Office版本、安装方式、系统位数的注册表存储路径差异极大,且微软未公开相关存储规则,后续版本更新易出现兼容性问题,稳定性远低于直接调用Excel原生接口。
内容的提问来源于stack exchange,提问作者Gaetano De Luisi
相关产品推荐
相关产品推荐

