Stacked IFs Google Sheets Apps 脚本

Posted

技术标签:

【中文标题】Stacked IFs Google Sheets Apps 脚本【英文标题】:Stacked IFs Google Sheets Apps Script 【发布时间】: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/… 【参考方案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 中使用了几个帮助列,但我想摆脱它。

以上是关于Stacked IFs Google Sheets Apps 脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用Google Charts在Stacked Column Chart中显示Y轴

Google 表格中的 IFS 公式

Google word/sheets 常见的使用:

使用 Sheets API v4 Java 阅读整个 Google 电子表格

使用 Sheets API v4 (Java) 获取 Google 表格上次编辑日期

在嵌套的 IFS 语句中保留 Google 表格中的日期格式