2 回答
TA贡献1865条经验 获得超7个赞
在通过 sheets api 或 Google 表单处理自动插入的数据时,这是一个非常常见的问题。最简单的解决方案是将所有公式转换为arrayformulas。例如,您在 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"})
或使用正则表达式:
=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 | |
这里 D:D 的其余部分是自动自动填充的。
我们在标题行上使用数组文字:
{"Extracted Date";Formula for rest of the column}
每当出现新行时,
INDEX/COUNTA()
自动计算最后一行并自动将公式填充到最后一行。有关 的更深入解释,请参见此处INDEX/COUNTA
。
TA贡献1854条经验 获得超8个赞
解决方案:
该解决方案使用谷歌应用脚本. 这不需要数组公式,而是使用自动填充。为了使解决方案起作用,您不应使用数组公式,而应使用普通公式。
获取活动范围,它将代表当前插入的范围 onChange 或 onFormSubmit。
offset
右侧的范围以获取计算列并将范围扩展到右侧的所有计算列。用于
range.autoFillToNeighbor
填充范围的所有计算区域。
示例脚本:
/**
* @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
);
};
添加回答
举报