使用 的单词字段计算。作为小数分隔符,但不使用 ,作为分隔符

word field calculation working with . as decimal separator, but not with , as separator

提问人:Spitzi 提问时间:9/4/2023 最后编辑:Spitzi 更新时间:9/4/2023 访问量:46

问:

在 Word 中,我有 3 个书签,可以在其中插入一个数字,然后是一个字段,当更新时,它会从这些数字中计算另一个值。我使用的公式是这个。

=X * Y * Z * 0.52*0.001

当我使用一个点作为数字分隔符时,一切正常。但是当我使用逗号作为数字分隔符(这是我居住地的标准)时,计算将是错误的。比如说,书签有以下内容

x:8,3 Y: 9,4 Z值: 7,4

计算将逗号视为两个值之间的分隔符,单词将采用第二个值进行计算,因此结果将是 3 * 4 * 4 * ...,这是完全错误的。

有没有办法让单词接受两个数字分隔符?

我知道我可以在系统设置中将数字分隔符更改为逗号,但是当我输入带有点的数字时,它将不起作用。

我不想更改系统设置。我也不能使用 VBA,因为这些是我工作的公司的官方文件。

谢谢和问候。

ms-word 字段 digits word-field

评论

0赞 Matija Sestak 9/4/2023
如果数字为正数,则可以使用公式 =NUMBERVALUE(SUBSTITUTE(SUBSTITUTE(A1,“.”,“”),“,”,“.”))其中 A1 是带逗号的字段
0赞 Spitzi 9/4/2023
不幸的是,这是 Word,而不是 Excel。在单词字段中,您的公式不起作用。

答:

1赞 jonsson 9/4/2023 #1

仅使用 Word 或 Word 字段没有简单的方法可以做到这一点。Word 依赖于相同的系统设置来识别数值并设置其格式。因此,您必须始终使用“,”或“.”之一作为小数点,这包括如何在字段中的数字格式选项中指定小数点。或者您需要找到其他方法,也许使用嵌入式 Excel 工作表或类似的东西。

从理论上讲,您可以在 Windows 桌面 Word 系统(但不是 Mac)上使用外部文件和 DATABASE 字段将 2,3 这样的数字转换为 2.3。这引入了其他并发症,我认为最好避免,但如果你想看看,这里是要点......

创建一个文本文件,比如包含以下文本:c:\i\ia.udl

[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.;Jet OLEDB:Engine Type=96;

然后在文档中插入一个嵌套字段,如下所示:

{ DATABASE \d "c:\\I\\ia.udl" \s "SELECT replace('{ x }',',','.')" }

其中,所有 {} 都是可以使用 ctrl-F9 插入的特殊字段大括号对。另请注意,路径名中的反斜杠加倍,引号都是“直”标记,而不是大括号或反引号。

选择字段并更新它们,给定输入数据 (x=8,3),结果应为 8.3。

应该适用于任何现代 Windows 桌面版本的 Office。您可能会注意到 Word 会在结果中插入一个额外的段落标记。

要进行计算,您可以执行以下操作

{ SET xxxx { DATABASE \d "c:\\i\\ia.udl" \s "SELECT replace('{ x }',',','.')" } }{ SET yyyy { DATABASE \d "c:\\i\\ia.udl" \s "SELECT replace('{ y }',',','.')" } }{ SET zzzz { DATABASE \d "c:\\i\\ia.udl" \s "SELECT replace('{ z }',',','.')" } }

然后

{ =xxxx * yyyy * zzzz * 0.52*0.001 }

有一些方法可以简化它(但不是很多!),但除了一些实际问题,例如“我如何分发那个 ia.udl 文件”、“它是否可以始终位于文件系统中的同一位置”、“它是否即使在只有 Jet 提供程序的系统上也能工作(不......,你需要一个不同的 .udl 来解决这个问题)”, 还有其他考虑因素,例如“如何安排同一文档可以工作,但将”.“转换为””。如果这是你需要做的。

评论

0赞 Spitzi 9/11/2023
谢谢你的这个很好的回答,jonsson。您给出的解决方法很棒,但在我工作的地方不可行。而且信息:“没有简单的方法”对我来说非常有用。非常感谢。