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
);
};
添加回答
舉報