使用定义的行名称清除仅 SUMPRODUCT 行的方法

Clean way to SUMPRODUCT only rows using defined names for the rows

首先,这更像是一个 excel 相关问题而不是 openpyxl 相关问题,但我提到它是因为解决方案需要通过 openpyxl 手段可行。

问题:

我正在尝试使用 openpyxl 生成电子表格,其中包含某些产品的数量(行)及其每月(列)的售价(行):

the generated worksheet looks like this

所有行都有关联的定义名称。例如“product_1_quantity”或“product_1_selling_price”。

我想创建一个行来计算我的产品的总价值,方法是将每个数量乘以其售价,然后将所有相加。

我试过的:

我已经通过在目标行中插入 CSE 公式来完成我想要的操作,例如:{=product_1_quantity*product_1_selling_price + product_2_quantity*product_2_selling_price + product_3_quantity*product_3_selling_price} 其中“product_1_quantity”定义为“E15:P15”和“[=41” =]”定义为“E18:P18”等。

我在找什么:

我想找到一种更简洁的方法(也许按列使用 SUMPRODUCT?),在添加额外产品但不放弃使用我定义的名称时不会使我的公式变得非常长。

我想继续为每个产品使用定义的名称,因为它们使我的公式更具可读性和可维护性(不仅从 excel 的角度来看,而且从 python-openpyxl 的角度来看) .我也接受,例如,为包含价格的整个范围使用定义的名称,为包含数量的范围使用另一个名称,只要代码和 excel 可以保持相当可读和可维护。

E15:T17 定义名称数量,为 E18:T20 定义另一个价格,然后在第 14 行中使用 CSE 公式 =MMULT({1,1,1},quantity*prices)

如果您的Excel版本支持动态数组,您可以在E14中输入公式,它会自动溢出到其他列。

如果您添加产品,第一个参数中的数量需要等于产品的数量。