{=B2*C2 \# "-#.##0,00"}
我在 Word 中的表格中有一个简单的函数: 。但是,2.345,67
由于我住在荷兰,因此结果为。现在我需要与英国同事共享此文档,并希望这些公式(我有很多)的格式显示为2,345.67
,即英国或美国区域设置。我可以使用来做到这一点{=B2*C2 \# "-#.##0,00"}
,但随后我需要维护文档的两个版本并更新每个字段。
我希望能够以某种集中方式设置区域设置,但设置文档的区域设置或通过校对工具设置区域设置并没有帮助,并且这个建议,即使用类似\l 2057
英语的语言环境,会出现语法错误。
我可以手动更改格式字符串,但我更喜欢使用语言设置。这不适用于正在读取的字段:如果我将字段更改B2
为使用点表示小数,而不是逗号,则无法正确计算。
更改整个计算机的区域设置有所帮助,但这不是长期的解决方案。
答案1
这个领域存在许多问题,而且没有一个问题特别容易解决。
在某些方面,主要问题不是您实际描述的问题,即格式不起作用,而是当用户在表中键入数字时,该数字是“固定的”,即在您键入之后
1234,56
Word 中没有完全可靠的机制来将其更改为
1234.56
并且 Word 将根据 Windows 控制面板中小数点字符的设置是否为“.”或“,”来以不同的方式识别数字。
如果您创建的文档没有此类值(只有空单元格)和你要将“表单”发送给美国/英国用户,由他们输入值和它只会被英国/美国用户使用,您可以做几件事。
否则,据我所知,您要么必须强迫人们以非常不自然的方式输入数据,或者一旦用户输入 1234.56,您就必须这样做,或者您必须让所有数字都很容易转换为其他文化的格式。最简单的方法是,您可以使用通配符查找/替换来替换类似
([0-9]),([0-9])
到
\1.\2
(或反过来),假设这不会修改任何其他看起来像数字的东西。你可能需要将其包装在 VBA 宏中。
至于格式开关,处理该问题的唯一真正可靠的方法是不使用它们,而完全依赖 Word 默认的数字格式。(FWIW,当人们在 Word 数字格式中放置“#”占位符时,有时是因为他们来自 Excel 背景,他们没有意识到他们根本不需要它们)。
但是,如果您必须使用数字格式,那么您要做的就是将正确的“小数点”和“千位分隔符”字符放入格式中。我的意思是,与编辑文档的机器上的 Windows 控制面板中使用的字符相同。
没有完全可靠的内置方法可以使用字段来实现这一点。您可以使用 VBA 从 Windows 获取相关字符。或者,您可以尝试使用一些嵌套字段“伪造”它,如下所示:
{ IF 1/2 = 0,5 "{ SET POINT "," }{ SET GROUP "." }" "{ SET POINT "." }{ SET GROUP "," }" }
(记住全部{ } 必须是特殊字段代码括号对,您可以在 Windows 桌面 Word 上使用 ctrl-F9 插入)
然后,而不是
{=B2*C2 \# "-#.##0,00"}
你用
{=B2*C2 \# "-#{ GROUP }##0{ POINT }00"}
或者,您可以在文档开头定义格式,例如
{ SET FORMAT1 "-#{ GROUP }##0{ POINT }00" }
然后使用
{=B2*C2 \# "{ FORMAT1 }"}
显然,如上所述,这种方法不能处理任意语言环境(例如,某些语言环境使用不间断空格字符作为千位分隔符)或控制面板中的不寻常设置,但它们可能足以应对 NL/US/UK。
不幸的是,这是一个“容易”解决的问题。如果你真正想要的是修复所有问题,以便所有用户(NL/UK/US)输入并看到相同的格式,而不管他们的 Windows 设置如何,这实际上是一个更难解决的问题。假设你决定每个人都应该输入并看到美国格式,例如1,234,567.89
那么问题就是,在使用典型 NL 设置的系统上,Word 无法正确识别“1234.56”。您唯一能做的(在我看来)处理这个问题的事情是...
a. 避免任何用户输入的数据,或限制用户仅输入整数数据
b. 临时修改用户系统上的相关 Windows 设置,也许使用 VBA(如果安全限制不排除的话)。
我不确定是否值得尝试为这两个选项提供解决方案。
然而,也许值得列出解决该问题的通用解决方案可能需要考虑的一些事项,如下所示:
基本问题是 Word 的数字格式主要依赖于 Windows 设置/控制面板中的设置。事实上,Word 的实现非常老旧,以至于它只遵循其中的一些设置。例如,无论您在控制面板中设置了什么,它都会将数字分组为三组。正如您已经发现的那样,您无法使用区域设置开关(例如或通过
\l 2057
应用校对语言)来影响数字显示(这实际上在一定程度上适用于日期。即使您可以应用校对语言,您仍然必须弄清楚如何更改它。Word 的桌面版和在线版的行为方式不同。据我所知,目前,无论任何区域设置如何,Word 的 Web 版都会保留字段结果不变。当然,这可能会随着时间的推移而改变,并且 Word 的“设备”版本的行为方式可能会有所不同。Mac 桌面版的行为方式与 Windows 版大致相同,但修改 Mac 设置需要与 Windows 版不同的代码。
这不仅仅是一个“格式”问题,还有一个“如何输入数字”的问题和一个“识别”的问题。
数字格式字符串中没有约定让你覆盖Windows 控制面板中的值,甚至指定您想要使用 Windows 控制面板中指定的值。
我的意思是覆盖你不能做类似的事情
{ DECIMAL "." }{ =10000/3 \# "###0<decimal>00" }
因此 Word 将总是使用“。”作为小数点,无论 Windows 设置如何。
我所说的“使用 Windows 控制面板中指定的值”是指:当您输入如下格式时
#,##0.00
那么如果“,”实际上是 Windows 设置中的小数点字符,则整个格式字符串就无法按您希望的方式运行。
你可能真的想使用类似
#<thousands>##0<decimal>00
其中 Word 实际上是从 Windows 控制面板中获取和的值。
除了求助于 VBA,Word 中没有任何内容可以让您可靠地发现千位分隔符、小数点字符(或货币字符串)的当前值
(可能与您的情况无关,但为了完整性还是值得一提)如果您使用 SharePoint 元数据通过内容控件插入数值,您最终必须使用“。”小数点约定,因为这是 XML 使用的约定,而 Word 不会帮助您克服它。
在数字格式字符串中,“千位分隔符”不是位置相关的。例如,按照美国/英国惯例,使用 进行格式化
1000000
将\#",0"
得到1,000,000
,而不是100000,0
如果您还需要输入/格式化货币数据,则需要附加设置。如果您的文档包含两种或两种以上不同货币的数据,则您必须接受 Word 只会将其中一种货币识别为货币。
Word 从 Windows 控制面板获取另一个特殊字符的值 - 列表分隔符。它通常是“,”或“;”。如果您的公式使用带参数的函数,则需要使用正确的分隔符。(您可能还需要在其他字段类型(例如 TOC 和 EQ)中使用正确的分隔符)。
我认为,尝试使用字段编码检测或评估三个变量字符(小数点、数字分组分隔符、列表分隔符)的值在一般情况下几乎是不可能的。即使是我上面建议的方法也可能会导致语法错误,特别是如果您正在进行邮件合并,Word 可能会标记语法错误,但在普通文档中不会造成问题。