2 回答

TA貢獻1806條經驗 獲得超8個贊
如果您想在“之間”添加一列A,然后B插入提到的值,您可能會受益于查看以下代碼:
function ADD_COLUMN() {
? let spreadsheet = SpreadsheetApp.getActive();
? let sheet = spreadsheet.getActiveSheet();
? sheet.insertColumns(2, 1);
? sheet.getRange(1,2).setValue(sheet.getRange(1,3).getValue()+1);
? var addedDateAndTime = Utilities.formatDate(new Date, spreadsheet.getSpreadsheetTimeZone(), "MMMM yyyy");
? sheet.getRange(2,2).setValue(addedDateAndTime)
}
然而,最顯著的變化是,根據Apps 腳本最佳實踐,最好僅調用服務一次 - 因此存儲spreadsheet
和 的值sheet
。此外,由于您只想插入列,因此無需激活工作表中的范圍。

TA貢獻1850條經驗 獲得超11個贊
說明/問題:
您邏輯中的問題是您在 A 和 B 之前添加了一個附加列,因此屬于單元格的值
C1
被轉移到D1
。然后,當您使用時,sheet.getRange(1,3)
您會得到單元格的新值C1
,這可能不是您想要的。我建議您獲取列的值3
加上之前添加的列數:sheet.getRange(1,3+columnsToAdd)
這樣,之前的值
C1
將用于計算 cell 的值B1
。在 Google Apps 腳本中,您無需設置活動范圍或工作表即可復制或粘貼數據。
setActive
自動創建的宏使用這些方法來向您顯示 中腳本的步驟ui
,但除非您有其他原因,否則您幾乎不需要它們。電子表格對象和工作表是兩個不同類的實例。這意味著他們使用不同的方法。閱讀我提供的鏈接的文檔,了解為什么使用每個實例以及用于什么場景。
解決方案:
function ADD_COLUMN() {
? ? const ss = SpreadsheetApp.getActiveSpreadsheet();
? ? const sheet = ss.getActiveSheet();
? ? const columnsToAdd = 1;?
? ? ss.insertColumnsBefore(2, columnsToAdd);
? ? sheet.getRange(1,2).setValue(sheet.getRange(1,3+columnsToAdd).getValue()+1);
? ? const addedDateAndTime = Utilities.formatDate(new Date, ss.getSpreadsheetTimeZone(), "MMMM yyyy");
? ? sheet.getRange(2,2).setValue(addedDateAndTime);
};
添加回答
舉報