Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 将配料数量数据安排在一行中,以便在其他位置检索_Google Sheets_Lookup - Fatal编程技术网

Google sheets 将配料数量数据安排在一行中,以便在其他位置检索

Google sheets 将配料数量数据安排在一行中,以便在其他位置检索,google-sheets,lookup,Google Sheets,Lookup,我想在GoogleSheets上实现一个包含不同数据行的表,其中两个字段是相关数组,我想知道实现它的最佳方法。有三种不同的表单,分别命名为Recipes、配料和菜肴。菜谱包含菜名和配料表,配料包含每种配料的营养信息,菜谱包含每道菜的实际营养信息 回复表我希望尽可能保持可读性和可视性: Name Time Ingredients Pasta 20min {150 spaghetti, 30 sauce, 5 marjoram, 20 cheese} 菜肴: Name Prot. Ca

我想在GoogleSheets上实现一个包含不同数据行的表,其中两个字段是相关数组,我想知道实现它的最佳方法。有三种不同的表单,分别命名为Recipes、配料和菜肴。菜谱包含菜名和配料表,配料包含每种配料的营养信息,菜谱包含每道菜的实际营养信息

回复表我希望尽可能保持可读性和可视性:

Name  Time   Ingredients
Pasta 20min  {150 spaghetti, 30 sauce, 5 marjoram, 20 cheese}
菜肴:

Name  Prot.  Carb.  Fat  KCal
Pasta    x      x     x     x
我想得到菜品的成分和数量数据,查找其营养成分,并在菜谱上加总数量。配料表如下所示:

Ingredient Prot.  Carb.  Fat KCal
Pasta         x      x     x    x
Marjoram      x      x     x    x
我知道如何从不同的表中获取行数据,如果配料和数量排列成两行,每一行在不同的列中,就像将菜中的总蛋白质相加一样:

=ArrayFormula(SUM(LOOKUP(F5:K5;Ingredients!$B$4:$B$1000;Ingredients!$D$4:$D$1000)*((F6:K6)/100)))/E5
我的问题是,我想在一行中列出配料清单和用量,如{150意大利面、30份酱汁、5份马郁兰、20份奶酪}。我想让它一目了然。我试图使用数组,但不知道如何使其工作


如何最好地将数据安排在一行中,并能够使用它查找其他工作表上的数据?

理想情况下,您可以以结构化形式输入每个配方的数据,例如成分数量表,然后通过使用
连接
或类似方法从数据中构建文本字符串,以可读形式显示数据。一般的想法是结构化数据应该是信息的来源,而显示给人类消费的东西就是从中衍生出来的

但如果你坚持使用字符串作为信息来源,比如“150意大利面,30沙司,5马乔兰,20奶酪”,这里有一种方法可以从中计算营养成分

假设A:B是一个成分营养含量表,例如

Ingredient  Protein
spaghetti   2
sauce       4
eggs        10
cheese      6
marjoram    2
E2单元有“150个意大利面,30份酱汁,5份马郁兰酒,20份奶酪”。以下公式计算此配方中的蛋白质含量:

=sumproduct(
  vlookup(split(regexreplace(E2, "[\d\W]+", " "), " "), A:B, 2, 0), 
  split(regexreplace(E2, "\D+", " "), " ")
)
说明:

  • 第一个拆分regexreplace组合从配方中提取所有单词,方法是将数字和标点符号替换为空格,然后按空格拆分。我们得到了四个单词的数组:意大利面条、沙司、马郁兰、奶酪
  • 然后,vlookup查找蛋白质含量(范围A:B中的第2列)。如果你也有脂肪、卡路里、碳水化合物等,那么查找范围将是A:E,使用的列将是2、3、4、5中的一个
  • 第二个分离的regexreplace提取了大量的成分,它去除了配方中所有非数字的成分
  • sumproduct
    将这两个数组的乘积相加,计算总蛋白质含量
由于基于正则表达式的文本解析,所有这些都是脆弱的,如果字符串偏离预期的格式,这些都会中断;例如,如果食谱要求“1 1/2汤匙糖”。在这种情况下,请参见第一段