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