簡體   English   中英

Google腳本編寫了一個單元格,以在nanother電子表格中運行

[英]Google script write one cell to range i nanother Spreadsheet

在這里拉我的頭發。

我正在嘗試在Google表格上構建“類似於數據庫”的結構(修改一個文檔中的條目,然后在其他位置進行更新)。

  • 2個電子表格,需要將數據從一個移到另一個
  • 選擇“ Spreadsheet1”上的單個單元格,復制到“ Spreadsheet2”上的單元格范圍
  • 我克服了許多錯誤並修復了這些錯誤,但這是無敵的:

找不到范圍(第10行,文件“代碼”)

我究竟做錯了什么?

function ImportDataRange() {

  var activeSs = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = activeSs.getSheetByName("PRODUCT dashboard");
  var ssOrigin = SpreadsheetApp.openById("1gF-IsnPdnjAaoUSwOOaBfWTmK1eVzxDG87XPzjjsWxA");
  var sheetOrigin = ssOrigin.getSheetByName("INITIAL_BUDGETS");

  for (var i = 7; i < 26; i++) {

    var rangeOrigin = sheetOrigin.getRange("i, 1");
    var dataOrigin = rangeOrigin.getValues();

    for (var i = 10; i < 275; i += 6) {
      sheet.getRange("i, 1").setValues(dataOrigin);
    }
  }

} 

您可能知道了,但是我需要:將document1的A7復制到document2的15個單元格中,然后將document1復制的A8單元格復制到document2的下一個15個單元格中,然后取A9...。

這是我的處理方式:

function ImportDataRange() {

  var activeSs = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = activeSs.getSheetByName("PRODUCT dashboard"),
      rangeSheet = sheet.getRange(10, 1, 265), // 3rd number is the number of rows to get into the range, as described in documentation
      valsSheet = rangeSheet.getValues(); //Get all values in a double array, this is to keep any previous values in the sheet, also it already gets the array just as it is needed to use in setValues()
      ssOrigin = SpreadsheetApp.openById("1gF-IsnPdnjAaoUSwOOaBfWTmK1eVzxDG87XPzjjsWxA"),
      valsOrigin = ssOrigin.getRange(7, 1, 15).getValues(), // Same as the other getRange, gets 15 lines, starting in line 7
      sheetOrigin = ssOrigin.getSheetByName("INITIAL_BUDGETS");

  for ( origins in valsOrigin  ) { // For each value in the valsOrigin array, do something -> in each loop origins will be the next index, Eg. 0, then 1, then 2...
    for (var i = 10; i < 275; i += 6) {
      i = (+i) + (+origins); // Add the origins so it don't begin in the same line, altough it will start to overwrite after 6 loops, you should look into this logic - also, the '+' converts it to number, as they can be strings
      valsSheet[i][0] = valsOrigin[origins][0]; // Puts the current value of origins in the target array
    }
  }
  rangeSheet.setValues( valsSheet ); // Inserts all values at once in the range
}

盡量減少SpreadsheetApp調用,這些調用很耗時,而且在GAS中受到限制,這也使代碼更簡潔。

不用getRange()參數中的引號,您就不用字符串了。 只需要.getRange(i, 0)

另外,如果只是將一個單元格作為范圍和一個設置值,則可以使用.setValue()

暫無
暫無

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

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