我有一个 Word Com 插件,它连接我们的在线 CRM(Maximizer)以合并 Word 文档中的字段。\# "$#,##0.00;($#,##0.00)"
当我连接到空白字段(不包含任何值)时,格式开关可以工作,但当我连接到包含“0”(零)的公式字段时,开关无法隐藏它。我尝试使用表中的虚拟单元格来合并值,然后使用 Word 公式将它们插入到我想要的单元格中,但仍然有同样的问题。
如果 B1 中的值为 0,则此公式会导致语法错误:
{ =if(sum(Table2 B1:B1)=0,"", sum(Table2 B1:B1)) \# "$#,##0.00;($#,##0.00)" }
此版本用 0 代替“”返回可见的 $0.00:
{ =if(sum(Table2 B1:B1)=0,0, sum(Table2 B1:B1)) \# "$#,##0.00;($#,##0.00)" }
如果我将开关更改为 ###.##,像 325.00 这样的值将显示为 325,因此这不是一个选项。
合并字段的代码开头如下:
{ DOCPROPERTY UO.QuickbooksschrxfbkTotalsschrxfbkTotalschrx0020Lineschrx00201 \* MERGEFORMAT }
我尝试将其更改为:
{ DOCPROPERTY UO.QuickbooksschrxfbkTotalsschrxfbkTotalschrx0020Lineschrx00201 \# "##,##0.00;(##,##0.00)" }
但结果是一样的。
我不知道这个问题的答案,但在输入问题时,我想到了一些其他选项,并停下来尝试它们。我没有解决这个问题,但我确实找到了一个解决方法。
我采用了与上面尝试应用的相同解决方案,但我没有在值到达后在 Word 中执行此操作,而是直接在 CRM 中执行此操作。我创建了一个字母数字公式 UDF,而不是数字公式 UDF。然后,我将公式包装在一个text
与if
语句结合的函数中,如下所示:
if(text(MyFormula)=="0","",text(MyFormula))
这是我将“0”值传输到 Word 中而不作为空白值而不是“0”的唯一方法。
如果有人有更好的答案,我仍然会感兴趣。如果没有人想出任何答案,我会把我的解决方案发布为答案。
答案1
出发点是,在大多数情况下,Word 字段数字格式开关/“图片”可以有三部分。
如果只有一部分,则用于格式化每个数字
{ =x \#"'format for any number x'" }
如果有两部分,则第一部分用于正数或零,第二部分用于负数
{ =x \#"'format when x >=0'" }
如果有三个部分,则第一部分用于正数,第二部分用于负数,第三部分用于0数
{ =x \#"'format if x is positive';'format if x is negative';'format if x is 0'" }
我的猜测是,您使用的程序只提供了两种可能性,而不是三种,并且在大多数情况下,将第三部分指定为“”将解决您希望 0 显示为空白的问题。
除此之外,该领域
{ =if(sum(Table2 B1:B1)=0,"", sum(Table2 B1:B1)) \# "$#,##0.00;($#,##0.00)" }
在公式字段 { = } 中使用 IF 函数。据我所知,当 Microsoft 定义其 .docx 文件格式时,它定义了 { = },但忘记描述 IF 函数。但据我所知,IF 函数只能有数字结果,所以这部分不起作用:
{ =if(sum(Table2 B1:B1)=0,""
如果您无法使用开关让字段编码区分空值和 0 \#
,则剩下的选项是使用 { IF } 字段(而不是 { =IF() } 字段。
就像是
{ IF { myvalue } = "" "" "{ myvalue \#"whatever formats you need" }" }
在 Word 中使用数字格式开关的另一个重要情况是“如果要格式化的内容不是数字怎么办?” 对此的简单回答是,在这种情况下,Word 不会应用 定义的任何格式\#
。只需记住两者之间存在差异
{ Bookmarkname \#0 }
和
{ =Bookmarkname \#0 }
在第二种情况下,=Bookmarkname
无论 的内容是什么, 都将始终为数字Bookmarkname
。如果Bookmarkname
包含abc
,Word 不会找到任何看起来像数字或数值表达式的内容,并将 的值设置=Bookmarkname
为 0。