我正在为PDF JavaScript开发求和脚本

I am working on a summation script for PDF JavaScript

本文关键字:开发 求和 脚本 JavaScript PDF      更新时间:2023-09-26

当所有字段都有一个值时,这工作正常,但如果一个字段为空,它就像一个字符串,将所有值放在字段中。我希望这能汇总所有字段,即使该字段为空。 此脚本将添加到我的总计字段(附表 F_11 上的金额)的"自定义计算脚本"中。请

var v1 = getField("Amount on Schedule F_1a").value;
var v2 = getField("Amount on Schedule F_1b").value;
var v3 = getField("Amount on Schedule F_37").value;
var v4 = getField("Amount on Schedule F_46").value;
var v5 = getField("Amount on Schedule F_2").value;
var v6 = getField("Amount on Schedule F_3b").value;
var v7 = getField("Amount on Schedule F_4b").value;
var v8 = getField("Amount on Schedule F_5a").value;
var v9 = getField("Amount on Schedule F_5c").value;
var v10 = getField("Amount on Schedule F_6b").value;
var v11 = getField("Amount on Schedule F_6d").value;
var v12 = getField("Amount on Schedule F_7").value;
var v13 = getField("Amount on Schedule F_8").value;
var v14 = getField("Amount on Schedule F_8_1").value;
var v15 = getField("Amount on Schedule F_8_2").value;
var v16 = getField("Amount on Schedule F_8_3").value;
var v17 = getField("Amount on Schedule F_8_4").value;
var v18 = getField("Amount on Schedule F_8_5").value;
var v19 = getField("Amount on Schedule F_8_6").value;
var v20 = getField("Amount on Schedule F_8_7").value;


event.value = 
((v1+v2+v3+v4+v5+v6+v7+v8+v9+v10+v11+v12+v13+v14+v15+v16+v17+v18+v19+v20) 
!==0)? 
(v1+v2+v3+v4+v5+v6+v7+v8+v9+v10+v11+v12+v13+v14+v15+v16+v17+v18+v19+v20)
:"";

你可以这样做:

var v1 = getField("Amount on Schedule F_1a").value!="" ? getField("Amount on Schedule F_1a").value : 0 ;

如果字段为空,这将返回"0",但您的代码非常重复,您可以使用循环循环遍历值。

看看 js 中的三元运算符。

你发现 JavaScript 的"功能"是松散类型的,并动态分配类型。

字段的值就是空字符串,这就是 JavaScript 连接这些值的原因。您必须强制字段值的类型为数字。

最简单的方法是将字段值乘以 1;这样就会得到数字;但是,您必须确保您的用户实际输入了一个数值(您可以通过在"字段属性"对话框中将格式设置为"数字"来实现)。这将看起来像:

var v1 = this.getField("Amount on Schedule F_1a").value * 1 ;

等等。

另一种选择是使用 Number() 方法。这将看起来像:

var v1 = Number(this.getField("Amount on Schedule F_1a").value ;

如果要在显示结果之前对其进行测试,则可能需要汇总到一个变量中,然后测试该变量。如果它是 0(并且 0 不是"合法"值),您可以将结果字段的值设置为空字符串,否则设置为结果(并且您可以使用 util.printf() 完全控制格式)。

最后一条评论:对于一个富有成效的形式,可能值得查看字段名称,并使它们更紧凑,或者使用序号分层;在这种情况下,您可以循环访问字段名称,并在循环中进行计算。