提问人:Rachel 提问时间:11/16/2023 最后编辑:Rachel 更新时间:11/17/2023 访问量:93
Excel 将“@”添加到具有范围的公式中
Excel adds '@' to formulas with a range
问:
我正在使用 OfficeOpenXml 在 ASP.NET MVC 中创建一个 Excel 电子表格。
当我设置一个带有范围的公式时
cell.Formula = "=SUM(FLOOR(I2:I12/2,0.01))";
Excel 在范围之前添加@
=SUM(FLOOR(@I2:I13/2,0.01))
Excel 无法计算此公式,它显示为 #VALUE!
如何在不获取符号的情况下设置此公式?@
答:
我无权访问您正在使用的 Excel 版本 (2013),但以下是我理解您所看到的问题的方式。如果你刚才说,预期的行为是模棱两可的:FLOOR(I2:I13/2,0.01)
- 旧版本的 Excel 会将其视为“隐式交集”,并假设您的意思是让它采用与当前单元格在同一行中的单元格值的 FLOOR,在 的范围内。
I2:I13
- 较新版本的 Excel 将创建一个“动态数组”,导致公式“溢出”到当前单元格下方的单元格中,以便从 为每个单元格创建一个 FLOOR 单元格。
I2:I13
当 Excel 添加对动态数组的支持时,它们更改了公式语言以消除这两种行为的歧义:
Excel 升级后的公式语言与旧语言几乎相同,只是它使用 @ 运算符来指示可能发生隐式交集的位置,而旧语言则静默地执行此操作。因此,您可能会注意到,在动态数组Excel中打开时,@出现在某些公式中。请务必注意,您的公式将继续以与往常相同的方式进行计算。
如果您在新版本的 Excel 中打开较旧的 Excel 文件,您将看到他们在范围前添加了一个符号,以表明它正在使用隐式交集行为 - 该符号告诉新版本的 Excel 使用与旧版本相同的行为。因此,我可以使用以下命令模拟旧的Excel行为:@
@
FLOOR(@I2:I13/2,0.01)
- 如果我把它放在从 到 的一行上,这将为我提供该行列中值的 FLOOR。
2
13
I
- 如果我把它放在任何其他行上,当前行超出范围,我会得到.
#VALUE!
我怀疑(但无法测试)在公式中使用 保存文件仍然会使文件与旧版本向后兼容,因为它应该使用预先存在的行为。@
现在,如果我使用公式,它不会给我从 到 的所有 FLOOR 的总和:它给了我与当前单元格在同一行的单个单元格的地板总和。由于只有一个单元格,因此 SUM 的值与该单元格的值相同。由于这模仿了旧版本 Excel 的行为,我猜这就是您看到结果的原因:您的单元格在 2 到 13 范围之外的行中。SUM(FLOOR(@I2:I13/2,0.01))
I2
I3
FLOOR(@I2:I13/2,0.01)
#VALUE!
换句话说,我认为您看到的是尝试使用的公式的自然结果,即使您在 Excel 2013 中手动将原始公式输入到该单元格中,您也会看到相同的行为。
另一方面,SUMPRODUCT
函数旨在以我认为您希望它工作的方式对数组执行操作。如果使用 ,这应该不会触发隐式交集,因此它不会添加符号,并且您最终应该得到给定范围内所有单元格楼层的总和。 一直到 Excel 2007 都可用。SUMPRODUCT(FLOOR(I2:I13/2,0.01))
@
SUMPRODUCT
评论
=
评论
.Formula2
.Formula