簡體   English   中英

在Google表格中的同一功能中添加多個范圍

[英]Add multiple ranges in same function in google sheets

我最近開始為Google表格編寫簡單的函數,並且希望將以下函數擴展到所有范圍:D10:D12,H10:H12,D16:D18,H16:H18,D22:D24,H22:H24 ,D28:D30,H28:H30,D34:D36和H34:H36。

getRange括號中將包含什么語法?

function nextRound() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var spreadsheet = SpreadsheetApp.getActive();
 var cell = spreadsheet.getRange("D10");
 var cellValue = cell.getValue();

  cell.setValue(cellValue - 1);
}

由於此功能對單元格D10正常起作用,但是如果我將D10更改為D10:D12,它將把D10 -1的銷售價值放在其他兩個單元格中,這不是我想要的。 當我運行該函數時,我希望D10中的新值是D10-1(當前有效),但是D11的新值是D11-1,依此類推。

哦,同樣,如果可能的話,我想向按鈕添加第二個功能,以在其中一個單元格達到0或負數時清除此相同范圍的單元格中的數據。

例

  1. 您要為D10:D12,H10:H12,D16:D18,H16:H18,D22:D24,H22:H24,D28:D30,H28:H30,D34:D36和H34:H36的所有單元格加1。
  2. 當單元格的值小於0時,您想清除單元格。

如果我的理解是正確的,那么這個答案呢? 我針對您的情況使用了Sheets API的Values.batchGet()和Values.batchUpdate()的2種方法,因為在這種情況下,我認為Sheets API的處理成本低於gets的getValues()和setValues()的處理成本。 SpreadsheetApp。 因此,我認為您的情況有幾個答案。 因此,請僅考慮其中之一。

使用表格API時,請在高級Google服務和API控制台中啟用表格API。 您可以在此處了解有關如何啟用Sheets API的信息

對於問題1:

請如下修改nextRound()

function nextRound() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheet = SpreadsheetApp.getActive();
  var id = ss.getId();
  var sheetName = spreadsheet.getSheetName();
  var ranges = ["D10:D12", "H10:H12", "D16:D18", "H16:H18", "D22:D24", "H22:H24", "D28:D30", "H28:H30", "D34:D36", "H34:H36"];
  ranges = ranges.map(function(e) {return sheetName + "!" + e});
  var r = Sheets.Spreadsheets.Values.batchGet(id, {ranges: ranges});
  var resource = {
    data: r.valueRanges.map(function(e) {return {
      range: e.range,
      values: e.values.map(function(f) {return [Number(f[0]) + 1]}),
    }}),
    valueInputOption: "USER_ENTERED",
  };
  Sheets.Spreadsheets.Values.batchUpdate(resource, id);
}

對於問題2:

請如下修改“問題1”的腳本。

從:
 values: e.values.map(function(f) {return [Number(f[0]) + 1]}), 
至:
 values: e.values.map(function(f) {return [Number(f[0]) <= 0 ? "" : Number(f[0])]}), 

注意:

  • 關於“對於問題2”,關於“清除”,您說的,我了解您要刪除該值。 如果要輸入其他值,請對其進行修改。
  • 如果要在多個單元格值為空的情況下運行“對於問題2”的腳本,請進行以下修改。
    • values: e.values.map(function(f) {return [Number(f[0]) <= 0 ? "" : Number(f[0]) || ""]}),

參考文獻:

如果我誤解了您的問題,請告訴我。 我想修改它。

編輯:

錯誤的原因是由於單元格為空。 因此,請進行如下修改。

對於問題1的腳本,請進行以下修改。

從:
 values: e.values.map(function(f) {return [Number(f[0]) + 1]}), 
至:
 values: e.values ? e.values.map(function(f) {return [f[0] ? Number(f[0]) + 1 : ""]}) : null, 

對於問題2的腳本,請進行以下修改。

從:
 values: e.values.map(function(f) {return [Number(f[0]) <= 0 ? "" : Number(f[0])]}), 
至:
 values: e.values ? e.values.map(function(f) {return [Number(f[0]) <= 0 || !f[0] ? "" : Number(f[0])]}) : null, 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM