簡體   English   中英

將一行從一個Google表格電子表格復制到表單提交中的另一表格

[英]Copy a row from one Google Sheet Spreadsheet to Another on Form Submit

我已經閱讀了很多其他文章並嘗試了一些方法,但是我還沒有找到解決方案。

我有一個可以輸入電子表格的Google表單。 當有人提交時,我想根據第N列(14)中的數據來確定將新行復制到的位置。 如果是A,則將整行復制到電子表格A,如果是B,則將整行復制到電子表格B。

這些URL是原始文件的副本,以防有人需要玩轉。 表格在這里: 新標牌表格的副本

function movingRows() {

var spreadsheetUrlToWatch = 'https://docs.google.com/spreadsheets/d/1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc/edit#gid=291411519';

var columnNumberToWatch = 14; // column A = 1, B = 2, etc.
var valueToWatchA = "Fusion";
var valueToWatchB = "LightSource";
var spreadsheetUrlToMoveTheRowToA = "https://docs.google.com/spreadsheets/d/1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g/edit#gid=0";
var spreadsheetUrlToMoveTheRowToB = "https://docs.google.com/spreadsheets/d/1BM7x-5STx5DsEtzRiZEq8qxVXgjPjtIZoTxxWuAk46c/edit#gid=0";

var ss = SpreadsheetApp.openByUrl(spreadsheetUrlToWatch);
var sheet = ss.getSheets()[0];
var range = sheet.getActiveCell();
var sheetNameToWatch = ss.getSheets()[0].getSheetName();
console.log(sheetNameToWatch);

if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatchA) {

  var targetSheet = SpreadsheetApp.openByUrl(spreadsheetUrlToMoveTheRowToA).getSheets()[0];
  var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange);
}
else if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatchB) {
  var targetSheet = SpreadsheetApp.openByUrl(spreadsheetUrlToMoveTheRowToB).getSheets()[0];
  var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
  sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).copyTo(targetRange);
}

}

通過Google腳本編輯器將代碼附加到表單。 庫珀提供的解決方案之后使用的代碼:

function copyToSpreadsheet()
 {
   var ss0=SpreadsheetApp.openById('1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc');
   var sht0=ss0.getSheetByName('Form Responses 1');
   var rng0=sht0.getDataRange();
   var rng0A=rng0.getValues();
   //Fusion Spreadsheet
   var ssA=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
   var shtA=ssA.getSheetByName('Sheet1');
   //LightSource Spreadsheet
   var ssB=SpreadsheetApp.openById('1BM7x-5STx5DsEtzRiZEq8qxVXgjPjtIZoTxxWuAk46c');
   var shtB=ssB.getSheetByName('Sheet1');
   var row= rng0A[rng0A.length-1];
   if(row[13]== "Fusion")
   {
     shtA.appendRow(row);
   }
   if(row[13]== "LightSource")
   {
    shtB.appendRow(row);
   }
  }

我沒有測試此代碼,但我認為它已經接近。 這很簡單。 只需將其綁定到onFormSubmit,它將獲得最后一個條目。 我假設所有電子表格均已創建,並且它們具有Sheet1。

function copyToSpreadsheet()
{
  var ss0=SpreadsheetApp.openById('1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc');
  var sht0=ss0.getSheetByName('Sheet1');
  var rng0=sht0.getDataRange();
  var rng0A=rng0.getValues();
  var ssA=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
  var shtA=ssA.getSheetByName('Sheet1');
  var ssB=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
  var shtB=ssB.getSheetByName('Sheet1');
  var row= rng0A[rng0A.length-1];
  if(row[13]==1)
  {
    shtA.appendRow(row);
  }
  if(row[13]==2)
  {
    shtB.appendRow(row);
  }
}

我確實認為,如果onFormSubmits快速進入,這種方法可能無法跟上,並可能獲取錯誤的數據。 我會考慮添加另一列稱為Copied的列,並遍歷所有行,然后復制在Copied Column中沒有時間戳的行。 循環版本是下面的代碼。

function copyToSpreadsheetWithLoop()
{
  var CopiedColumn=20;//Don't really know
  var ss0=SpreadsheetApp.openById('1q7HyUL3bhd_gLEAfVJrH4strnkF9_UP6uhY4Qy5A6Vc');
  var sht0=ss0.getSheetByName('Sheet1');
  var rng0=sht0.getDataRange();
  var rng0A=rng0.getValues();
  var ssA=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
  var shtA=ssA.getSheetByName('Sheet1');
  var ssB=SpreadsheetApp.openById('1sWSSHOgdum0LtCggtM6Gz-ytmFJJjMXH9pZ0NYGMV7g');
  var shtB=ssB.getSheetByName('Sheet1');
  for(var i=1;i<rng0A.length;i++)
  {
    var row= rng0A[i];
    if(row[CopiedColumn-1])
    {
      if(row[13]==1)
      {
        shtA.appendRow(row);
        sht0.getRange(i+1,CopiedColumn).setValue(Utilities.formatDate(new Date(), "GMT-6", "dd/MM/yyyy HH:mm:ss"));
      }
      if(row[13]==2)
      {
        shtB.appendRow(row);
        sht0.getRange(i+1,CopiedColumn).setValue(Utilities.formatDate(new Date(), "GMT-6", "dd/MM/yyyy HH:mm:ss"));
      }
    }
  }
}

暫無
暫無

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

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