强制为 Word 中含有数字数据或公式的字段选择区域设置

强制为 Word 中含有数字数据或公式的字段选择区域设置

{=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(如果安全限制不排除的话)。

我不确定是否值得尝试为这两个选项提供解决方案。

然而,也许值得列出解决该问题的通用解决方案可能需要考虑的一些事项,如下所示:

  1. 基本问题是 Word 的数字格式主要依赖于 Windows 设置/控制面板中的设置。事实上,Word 的实现非常老旧,以至于它只遵循其中的一些设置。例如,无论您在控制面板中设置了什么,它都会将数字分组为三组。正如您已经发现的那样,您无法使用区域设置开关(例如或通过\l 2057应用校对语言)来影响数字显示(这实际上在一定程度上适用于日期。即使您可以应用校对语言,您仍然必须弄清楚如何更改它。

  2. Word 的桌面版和在线版的行为方式不同。据我所知,目前,无论任何区域设置如何,Word 的 Web 版都会保留字段结果不变。当然,这可能会随着时间的推移而改变,并且 Word 的“设备”版本的行为方式可能会有所不同。Mac 桌面版的行为方式与 Windows 版大致相同,但修改 Mac 设置需要与 Windows 版不同的代码。

  3. 这不仅仅是一个“格式”问题,还有一个“如何输入数字”的问题和一个“识别”的问题。

  4. 数字格式字符串中没有约定让你覆盖Windows 控制面板中的值,甚至指定您想要使用 Windows 控制面板中指定的值。

我的意思是覆盖你不能做类似的事情

{ DECIMAL "." }{ =10000/3 \# "###0<decimal>00" }

因此 Word 将总是使用“。”作为小数点,无论 Windows 设置如何。

我所说的“使用 Windows 控制面板中指定的值”是指:当您输入如下格式时

#,##0.00 

那么如果“,”实际上是 Windows 设置中的小数点字符,则整个格式字符串就无法按您希望的方式运行。

你可能真的想使用类似

#<thousands>##0<decimal>00

其中 Word 实际上是从 Windows 控制面板中获取和的值。

  1. 除了求助于 VBA,Word 中没有任何内容可以让您可靠地发现千位分隔符、小数点字符(或货币字符串)的当前值

  2. (可能与您的情况无关,但为了完整性还是值得一提)如果您使用 SharePoint 元数据通过内容控件插入数值,您最终必须使用“。”小数点约定,因为这是 XML 使用的约定,而 Word 不会帮助您克服它。

  3. 在数字格式字符串中,“千位分隔符”不是位置相关的。例如,按照美国/英国惯例,使用 进行格式化1000000\#",0"得到1,000,000,而不是100000,0

  4. 如果您还需要输入/格式化货币数据,则需要附加设置。如果您的文档包含两种或两种以上不同货币的数据,则您必须接受 Word 只会将其中一种货币识别为货币。

  5. Word 从 Windows 控制面板获取另一个特殊字符的值 - 列表分隔符。它通常是“,”或“;”。如果您的公式使用带参数的函数,则需要使用正确的分隔符。(您可能还需要在其他字段类型(例如 TOC 和 EQ)中使用正确的分隔符)。

  6. 我认为,尝试使用字段编码检测或评估三个变量字符(小数点、数字分组分隔符、列表分隔符)的值在一般情况下几乎是不可能的。即使是我上面建议的方法也可能会导致语法错误,特别是如果您正在进行邮件合并,Word 可能会标记语法错误,但在普通文档中不会造成问题。

相关内容