让我稍微解释一下我的电子表格。以下是它的一个很好的屏幕截图:
我创建这个电子表格主要是因为我厌倦了几乎所有营养跟踪应用程序的可用性问题。所以我正在创建自己的电子表格!如您所见,水平方向是不同的食物/成分,下面是它们的营养成分值。
然后你会看到底部有一行标题为“第一餐”,其中包含一些值。这基本上就是我说的“2.5 份藜麦、2 份扁豆”等。然后,这些信息显示在下表中,左侧显示“第一餐”。*
我现在的目标是实现两件事。
- 多餐
- 由其他食物制成的食物
- (想象一下,有几行“碳水化合物早餐”,“脂肪午餐”,“蛋白质晚餐”,这些是每顿饭的表格,但我想要一个将它们组合在一起的表格,标题为“碳水化合物早餐,脂肪午餐,蛋白质晚餐”)
我这样做有点困难,本质上可以归结为D 排在“第一餐”餐桌上。它的配方目前SUMPRODUCT(Row Fat, Row First Meal)
正如您所想象的那样SUMPRODUCT(Row Cholestrol, Row First Meal)
。这对于一餐来说还行,但对于多餐来说需要做很多调整,并且不适用于多餐。
目标是D 列中每个单元格的值基本上由以下公式确定。
nutrient = // whatever row we are on
integer sum = 0;
foreach(row in top table):
integer weight = [ammount of the 'nutrient' in this row]
integer innersum = 0;
foreach(meal in meals):
if (meal is contained in string top left corner of this table):
innersum += [number of servings of this row];
sum += innersum * weight;
请原谅,我是一名程序员,所以这确实是我能解释这个公式的最清楚的方式。基本上,对于每种食物,查看表格左上角的单元格,根据该字符串获取该食物的份量总和,然后将其乘以该餐食中正确营养成分的含量。
理想情况下,单元格 D 中的值的公式应按如下方式实现:
从上表中取出所有膳食的矩阵,并过滤掉名称不包含在左上列中的行。然后通过将列中的所有元素相加,将此矩阵简化为一行。然后使用该值和膳食营养成分中特定营养素的数量进行求和。问题是我不知道如何进行整个矩阵过滤和简化操作。坦率地说,我甚至不知道电子表格是否就是这样工作的。
*不要担心,我在设计这顿饭时考虑到了一整天的食物。