Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Javascript 当从最后一行的IFTTT接收数据时,如何用公式自动填充最后一行?_Javascript_Google Apps Script_Google Sheets_Google Sheets Formula_Regex - Fatal编程技术网

Javascript 当从最后一行的IFTTT接收数据时,如何用公式自动填充最后一行?

Javascript 当从最后一行的IFTTT接收数据时,如何用公式自动填充最后一行?,javascript,google-apps-script,google-sheets,google-sheets-formula,regex,Javascript,Google Apps Script,Google Sheets,Google Sheets Formula,Regex,我有一个电子表格: 当我收到自动发送的短信时,安卓程序“IFTTT”会自动发送短信,然后我会从短信正文中计算工作时间、日期等 | | C | D | |----+---------------------------------+-------------------------------------------| | 1> | From IF

我有一个电子表格:

当我收到自动发送的短信时,安卓程序“IFTTT”会自动发送短信,然后我会从短信正文中计算工作时间、日期等

|    | C                               | D                                         |
|----+---------------------------------+-------------------------------------------|
| 1> | From IFTTT                      | Extracted Date                            |
| 2> | 0809 1800 0909 0600 RLK Steiger | =MID(C2,1,2)&"."&MID(C2,3,2)&".2020"      |
| 3> | 0809 1800 0909 0600 RLK Dvorak  | =MID(C3,1,2)&"."&MID(C3,3,2)&".2020"      |
| 4> | 0909 0600 0909 1800 UNIS Brando | //<= New row from IFTTT. Set formula here |
但是,如果使用了它,那么它不会让单元格为空,但是有了公式,我必须对每个单元格都这样做。我的想法是如果(设置公式)其他人删除它,但我不知道如何用Javascript编写


理想情况下,如果列
D:D
最后一行包含文本,则使用我在其中的公式,但我也不知道如何做到这一点。

这是通过表单api或谷歌表单处理自动插入数据时的一个非常常见的问题。最简单的解决方案是将所有公式转换为。例如,D2中的公式

=MID(C2,1,2)&"."&MID(C2,3,2)&".2020
可以修改为

在D1中:

=ARRAYFORMULA({"Extracted Date";MID(C2:INDEX(C:C,COUNTA(C:C)),1,2)&"."&MID(C2:INDEX(C:C,COUNTA(C:C)),3,2)&".2020"})
或使用:

然后,该表变为:

|    | C                               | D                                                                                                                   |
|----+---------------------------------+---------------------------------------------------------------------------------------------------------------------|
| 1> | From IFTTT                      | =ARRAYFORMULA({"Extracted Date";MID(C2:INDEX(C:C,COUNTA(C:C)),1,2)&"."&MID(C2:INDEX(C:C,COUNTA(C:C)),3,2)&".2020"}) |
| 2> | 0809 1800 0909 0600 RLK Steiger |                                                                                                                     |
| 3> | 0809 1800 0909 0600 RLK Dvorak  |                                                                                                                     |
| 4> | 0909 0600 0909 1800 UNIS Brando |                                                                                                                     |
在这里,D:D的其余部分自动填充

  • 我们在标题行上使用:
    {“提取日期”;列其余部分的公式}

  • 每当出现新行时,
    INDEX/COUNTA()
    auto将计算最后一行,并自动将公式填充到最后一行。有关
    索引/COUNTA
    的详细说明,请参阅

解决方案:
  • 此解决方案使用。这不需要数组公式,但使用自动填充。要使解决方案起作用,不应使用数组公式,而应使用普通公式
  • 获取活动范围,它将表示在更改或表单提交时插入的当前范围
  • 右侧的范围,以获取计算列并将范围扩展到右侧的所有计算列
  • 用于填充范围内的所有计算区域
示例脚本: 参考资料:

我不得不为我糟糕的英语技能道歉。不幸的是,从您的问题和共享的电子表格中,我无法理解您当前的问题和目标。我无法理解您共享的电子表格中的大约3张表格。而且,我无法理解
我的想法是,如果(设置公式)以其他方式删除它
理想情况下,如果D:D列最后一行包含文本,则使用我在那里的公式
。我能问一下他们的详细情况吗?嗨,很抱歉回答晚了。当然那里的第一张纸是我从程序本身获得自动短信的地方。第二个是周末工作时间、晚上工作时间等。最后一个“短信tabulka”我试图绕过短信进入最后一个空白行的问题,简单地将数据复制到新的工作表中,但不幸的是,这不起作用,因为它将所有公式移动了1。感谢您的回复和添加更多信息。现在我注意到一个答案已经发布了。在这种情况下,我要尊重现有的答案。我认为这将解决您的问题。@Tanaike如果您愿意,可以随意添加任何其他答案或方法。您发布另一个答案并不是不尊重我的回答。@TheMaster感谢您的回复。当我找到另一个解决方案时,我想提出它。您好,非常感谢您的帮助!我试过这么做,但我不知道为什么,但我认为由于语言的不同,会有一些差异。例如,我不能使用,但我必须使用;没关系,我可以检查一下。但是,它不会填满表格,因为根据工作表,MID函数有3个参数,而不是3个。我不确定我在那里是否做错了什么?如果可能的话——我不想太麻烦,这已经帮了大忙了!要从另一张表“List2”中获取数据,可以使用函数counta,对吗?再次感谢你@PatrikGremlica大约在年中,你能展示一下你在这里编辑的当前公式吗?请就非相关问题提出新问题。好的,对不起,这是我第一次亲自使用这个网站,我真的很感谢您的提问,同时也对原始问题进行了编辑。我用过这个,不幸的是它会翻译成捷克语:=ARRAYFORMULA({“数据”;ÁST(C2;索引(C:C;POČET2(C:C));1;2)和“&”ST(C2;索引(C:C;POČET2(C:C));3;2)和“.2020”@PatrikGremlica
=ARRAYFORMULA({“数据”;ÁST(C2:索引(C:C;POČET2(C:C));1;2)
@PatrikGremlica这是不应该发生的。在
C:C
中的行与行之间是否有额外的空格?如果是这样,您应该将其删除。或者,只需将+1添加到counta:
counta(…)+1
。如果答案是“点击左边的答案”,请考虑接受答案。
=ARRAYFORMULA({"Extracted Date";MID(C2:INDEX(C:C,COUNTA(C:C)),1,2)&"."&MID(C2:INDEX(C:C,COUNTA(C:C)),3,2)&".2020"})
=ARRAYFORMULA({"Extracted Date";REGEXREPLACE(C2:INDEX(C:C,COUNTA(C:C)),"(\d{2})(\d{2}).*","$1.$2.2020")})
|    | C                               | D                                                                                                                   |
|----+---------------------------------+---------------------------------------------------------------------------------------------------------------------|
| 1> | From IFTTT                      | =ARRAYFORMULA({"Extracted Date";MID(C2:INDEX(C:C,COUNTA(C:C)),1,2)&"."&MID(C2:INDEX(C:C,COUNTA(C:C)),3,2)&".2020"}) |
| 2> | 0809 1800 0909 0600 RLK Steiger |                                                                                                                     |
| 3> | 0809 1800 0909 0600 RLK Dvorak  |                                                                                                                     |
| 4> | 0909 0600 0909 1800 UNIS Brando |                                                                                                                     |
/**
 * @param {GoogleAppsScript.Events.SheetsOnChange|GoogleAppsScript.Events.SheetsOnFormSubmit} e
 */
const onFormSubmitORonChange = e => {
  const rg = SpreadsheetApp.getActiveRange(),
    wd = rg.getWidth(),
    sh = rg.getSheet(),
    lc = sh.getLastColumn(),
    numRows = Math.max(
      rg
        .offset(0, wd, 1, 1)
        .getNextDataCell(SpreadsheetApp.Direction.UP)
        .getRow() - 1,
      1
    ),
    numCols = lc - wd;
  sh.getRange(2, wd + 1, numRows, numCols).autoFillToNeighbor(
    SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES
  );
};