谷歌表格中的印度短货币格式

Posted

技术标签:

【中文标题】谷歌表格中的印度短货币格式【英文标题】:Indian short currency format in google sheets 【发布时间】:2021-04-26 06:21:20 【问题描述】:

在谷歌表格中,我试图以印度“短”格式显示数字,后缀为 lakhs 和 crore,如下所示:

单元格值:1234,显示为1.23K 单元格值:12345,显示为12.35K 单元格值:123456,显示为 1.23L [L=lakh] 单元格值:1234567,显示为12.35L 单元格值:12345678,显示为 1.23C [C=Crore] 单元格值:123456789,显示为 12.35C

我已尝试修改此自定义数字格式:

[<999950]0.0,"K";[<999950000]0.0,,"M";0.0,,,"B"

by *** McEachern,但无法实现我需要的格式。

有谁知道这样做的方法吗?

【问题讨论】:

此 SO 帖子的博文链接:***.com/questions/19573706/… 我能找到的最接近您的是:[<999950]0.00,"K";[<9999500]0.00,,"L";0.00,,,"C"%%,但会留下尾随的% 标志。可悲的是,我认为没有办法摆脱输出中的百分号。除非有人知道一些我不知道的晦涩技巧? 【参考方案1】:


B2 中的印度分隔符系统:

=ARRAYFORMULA(REGEXREPLACE(REGEXREPLACE(SUBSTITUTE(FLATTEN(QUERY(TRANSPOSE(QUERY(
 REGEXEXTRACT(REGEXREPLACE(SUBSTITUTE(FLATTEN(QUERY(TRANSPOSE(QUERY(IFERROR(
 REGEXEXTRACT(A2:A, REPT("(.)", IF(LEN(A2:A)=3, LEN(A2:A)-4, LEN(A2:A)-3))), "0"), 
 "select "&JOIN(",", "Col"&SORT(SEQUENCE(MAX(LEN(A2:A)-3)), 1, )))),,9^9)), " ", ), 
 "(.2)", "$1,"), REPT("(.)", IF((LEN(A2:A)-3)+ROUNDDOWN((LEN(A2:A)-3)/2)<1, 1, 
 (LEN(A2:A)-3)+ROUNDDOWN((LEN(A2:A)-3)/2)))),
 "select "&JOIN(",", "Col"&SORT(SEQUENCE(MAX((LEN(A2:A)-3)+
 ROUNDDOWN((LEN(A2:A)-3)/2))), 1, )))),,9^9)), " ", ), "^,", )&","&IFNA(
 REGEXEXTRACT(A2:A, "...$"), IF(A2:A="",,TEXT(A2:A, "000"))), "^0,$", ))

C2 中的印度空头货币:

=ARRAYFORMULA(IFNA(ROUND(A2:A*VLOOKUP(LEN(A2:A), SEQUENCE(19), 
 1; 1; 1; 1; 1; 10^-5; 10^-5; 10^-7; 10^-7; 10^-9; 10^-9; 
  10^-11; 10^-11; 10^-13; 10^-13; 10^-15; 10^-15; 10^-17; 10^-17, 2, 1), 2)&" "&
 VLOOKUP(LEN(A2:A), SEQUENCE(19), 
 "Rp"; "Rp"; "Rp"; "Rp"; "Rp"; "L"; "L"; "Cr"; "Cr"; "Arab"; "Arab"; 
  "Kharab"; "Kharab"; "Nil"; "Nil"; "Padma"; "Padma"; "Shankh"; "Shankh", 2, 1)))
旁注:ROUND 设置为 2 位小数。这可以设置为0,或者ROUND可以完全删除,或者如果需要可以替换为TRUNC

spreadsheet demo

【讨论】:

【参考方案2】:

另一种方法如下...

印度分隔符系统:

=INDEX(IF(IFERROR(N(ABS(A1:A*1)))>0, REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(
 REPT(0, 50)&"×"&TEXT(A1:A, "0"), REPT("(..)", 24)&"(...)$", 
 JOIN(",", "$"&SEQUENCE(25))), "(.*×,?)", ), "-,", "-")&
 IFNA(REGEXEXTRACT(A1:A&"", "(\.\d1)")), A1:A&""))


印度空头货币:

=INDEX(IF((IFERROR(N(ABS(A1:A*1)))>0)+(IF(ISBLANK(A1:A),,IFERROR(A1:A*1, 1)=0)), 
 REGEXREPLACE(TEXT(TRUNC(IFNA(A1:A*(10^-(
 VLOOKUP(LEN(TEXT(INT(ABS(A1:A*1)), "0")), 
 SEQUENCE(8, 1, 6, 2), 1)-1)), A1:A), 1), "0.#"), "(\.)$", )&" "&
 HLOOKUP(LEN(TEXT(INT(ABS(A1:A*1)), "0")), 0, SEQUENCE(1, 8, 4, 2); 
 SPLIT("Rp♦Rp♦L♦Cr♦Arab♦Kharab♦Nil♦Padma♦Shankh", "♦") , 2), ""&A1:A))


两个印度系统相结合:

=INDEX(IF((IFERROR(N(ABS(A1:A*1)))>0)+(IF(ISBLANK(A1:A),,IFERROR(A1:A*1, 1)=0)), 
 REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(
 REPT(0, 50)&"×"&REGEXREPLACE(TEXT(TRUNC(IFNA(A1:A*(10^-(
 VLOOKUP(LEN(TEXT(INT(ABS(A1:A*1)), "0")), 
 SEQUENCE(8, 1, 6, 2), 1)-1)), A1:A), 1), "0"), "(\.)$", ), REPT("(..)", 24)&"(...)$", 
 JOIN(",", "$"&SEQUENCE(25))), "(.*×,?)", ), "-,", "-")&
 IFNA(REGEXEXTRACT(A1:A&"", "(\.\d1)"))&" "&
 HLOOKUP(LEN(TEXT(INT(ABS(A1:A*1)), "0")), 0, SEQUENCE(1, 8, 4, 2); 
 SPLIT("Rp♦Rp♦L♦Cr♦Arab♦Kharab♦Nil♦Padma♦Shankh", "♦") , 2), A1:A&""))


适用于数字 适用于纯文本数字 适用于文本 适用于空单元格 适用于负值 与零一起使用 使用科学记数法 使用小数 与尚赫合作 最高可达 10^±50

english demo sheet

non-english demo sheet

【讨论】:

以上是关于谷歌表格中的印度短货币格式的主要内容,如果未能解决你的问题,请参考以下文章

谷歌表格中的条件格式不适用于重复项

Excel表格里数值前的货币符号总是变成问号

Excel 表格的文本格式莫名其妙变成日期或者货币问题

在 laravel 中基于印度编号系统格式化货币

如何使用 javascript/jquery 将数字格式化为印度货币(在数据表中)

如何应用动态数字格式?