在 Google 表单中创建的订单要求客户提供他们的全名、商品数量以及是否需要送货上门。最终账单金额是使用 Google 表格中的简单公式计算的。
// Item cost is $99 per unit. Delivery cost is $19. = IF ( ISNUMBER ( C2 ) , SUM ( C2 * 99 , IF ( D2 = "Yes" , 19 , 0 ) ) , )
Google 表格所有者已在“ Total Amount
”列的所有行中输入公式,以便在提交新表单响应时自动计算该值。
问题是当新的响应进来时,谷歌表格中的公式会被自动删除。这是默认行为,即使你保护了列范围,单元格中的公式也会在新行上被删除。
如何防止公式被删除
此问题有多种解决方法。
使用 ARRAYFORMULA
不要在列的单个单元格中添加公式,而是将数组公式添加到包含计算值的列的第一行。
= ARRAYFORMULA ( IF ( ROW ( C : C ) = 1 , "Total Amount" , IF ( ISNUMBER ( C : C ) , C : C * 99 + IF ( D : D = "Yes" , 19 , 0 ) , ) ) )
以下是公式的简单分解:
-
IF(ROW(C:C)=1, "Total Amount", ...
– 如果当前行号为 1,则添加列标题。 -
IF(ISNUMBER(C:C), ...
– 仅当 C 列中有数值时才计算金额。 -
C:C*99 + IF(D:D="Yes",19,0),)
– 如果 D 列设置为 Yes,则将 99 美元乘以项目数量并加上 19 美元。
将 MAP 与 LAMBDA 函数一起使用
您可以使用 Google 表格的新 MAP 函数,该函数将值数组作为输入,并返回通过将 Lambda 函数应用于数组的每个值而形成的新数组。
= MAP ( C : C , D : D , LAMBDA ( Qty , Delivery , IF ( ROW ( Qty ) = 1 , "Total Amount" , IF ( ISNUMBER ( Qty ) , Qty * 99 + IF ( Delivery = "Yes" , 19 , ) , ) ) ) )
使用查询函数
如果数组公式听起来很复杂,这里有另一种方法。
在您的 Google 电子表格中创建一个新工作表,并使用带有类似 SQL 的语句的QUERY
函数将所需数据从表单工作表导入到当前工作表中。
= QUERY ( 'Form Responses 1' ! A : D , "SELECT A,B,C,D" , TRUE )
我们只导入表单响应中输入的工作表数据,所有计算都将在此工作表中进行,而不是在主工作表中。
将简单的金额计算公式粘贴到单元格 E2 中,然后向下拖动十字准线以在所有行中自动填充公式。
= IF ( ISNUMBER ( C2 ) , SUM ( C2 * 99 , IF ( D2 = "Yes" , 19 , 0 ) ) , )
如果您希望在收到新的调查回复时保留行格式和条件格式,这是推荐的方法。
原文: https://www.labnol.org/google-sheets-formula-deleted-220927