【问题标题】:Stacked IFs Google Sheets Apps ScriptStacked IFs Google Sheets Apps 脚本
【发布时间】:2021-03-13 16:42:01
【问题描述】:

Google Apps 脚本的新手。有人可以告诉我在 Apps 脚本中编写堆叠的 IF。 我想创建一个自定义函数,以自定义英尺-英寸-十六进制格式计算总的十六分之一。 格式因字符串的长度而异。 1=1', 12=12',508 = 5 1/2", 1604 = 16 1/4", 等等...为了转换为英尺-英寸-16,我必须先计算总的 16 分之一。 任何帮助表示赞赏。

【问题讨论】:

  • 到目前为止您做了哪些研究?你有正在处理的代码吗?您能否提供一份您正在处理的电子表格副本,不含敏感信息,清楚地表明预期的结果?
  • 对不起,我的问题没有更清楚,但格式本身有点混乱。这是一个电子表格的链接,可以更好地解释事情。 docs.google.com/spreadsheets/d/…

标签: if-statement google-sheets


【解决方案1】:

您的问题有点难以理解,但我认为您的表格中的值表示为 1' 3 1/2"(1 英尺,3.5 英寸),您希望将其转换为 16 英寸单位。

下面的函数应该做你想做的:

function SIXTEENTHS(string) {
  var regex = /^\s*([0-9]*(?=\'))?\'?\s*([0-9]+(?![0-9]))?\s*([0-9]+\/[0-9]+)?\"?\s*$/;
  var parsed = string.match(regex);
  if (!parsed) {
    return 'Bad input';
  }
  var inches = (parsed[1] | 0) * 12; // Parse feet
  inches += (parsed[2] | 0); // Parse inches
  if (parsed[3]) {
    inches += (parsed[3].split('/').reduce((a, b) => a/b)); // Parse fractions
  }
  return inches*16;
}

解析字符串有点棘手,但您可以在Regex 101 看到正则表达式的作用并对其进行测试。

【讨论】:

  • 对不起,我的问题没有更清楚,但格式本身有点混乱。这是一个电子表格的链接,可以更好地解释事情。 docs.google.com/spreadsheets/d/…
  • 我想先转换为 16 位的原因是这样我就可以用我的测量值进行计算,比如加法或乘法。
  • 您使用的输入格式存在一些歧义。如何区分 5 英尺 8 英寸和 5 8/16 英寸?两者都将写为 508。可以轻松地调整该函数以返回所需的格式(或者您可以使用 QUOTIENT 和 MOD 函数在工作表中执行此操作)。但首先您需要输入数据的格式一致且明确。
  • 5'8" 将被写为 50800,5-1/2"(或 5-8/16")将是 508。就像我说的,格式有点混乱,但它有效. 我更新了电子表格以阐明该功能的工作原理。
  • 我在 Excel 中使用了几个帮助列,但我想摆脱它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多