Javascript 将工作表复制到另一个电子表格[谷歌应用程序脚本]

Javascript 将工作表复制到另一个电子表格[谷歌应用程序脚本],javascript,google-apps-script,spreadsheet,google-drive-api,Javascript,Google Apps Script,Spreadsheet,Google Drive Api,我无法让这个函数工作。它必须将电子表格“A”的所有值复制到电子表格“B” 函数triggerOnTime(){ var SpreadSheetKeyA=“142wnsfqksx4bunhskdm9axd9ylrhnzh34oo5tbtt1g”; var SpreadSheetKeyB=“1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y”; var sheet1=SpreadsheetApp.openById(SpreadSheetKeyA.getActiv

我无法让这个函数工作。它必须将电子表格“A”的所有值复制到电子表格“B”

函数triggerOnTime(){
var SpreadSheetKeyA=“142wnsfqksx4bunhskdm9axd9ylrhnzh34oo5tbtt1g”;
var SpreadSheetKeyB=“1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y”;
var sheet1=SpreadsheetApp.openById(SpreadSheetKeyA.getActiveSheet();
var sheet2=SpreadsheetApp.openById(SpreadSheetKeyB.getActiveSheet();
var data=sheet1.getDataRange().getValues();
var数组=[];
对于(变量y=1;y
它现在复制两个或三个值,但复制多次(随机)。该函数还必须从sheetA中删除复制的值。但它只删除添加到sheetB的值

编辑(更新代码)

函数triggerOnTime(){
var SpreadSheetKeyA=“142wnsfqksx4bunhskdm9axd9ylrhnzh34oo5tbtt1g”;
var SpreadSheetKeyB=“1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y”;
var sheet1=SpreadsheetApp.openById(SpreadSheetKeyA.getActiveSheet();
var sheet2=SpreadsheetApp.openById(SpreadSheetKeyB.getActiveSheet();
var data=sheet1.getDataRange().getValues();
var数组=[];
对于(变量y=0;y
在玩了一会儿之后,我为您找到了一个解决方案(尽管我想是一个黑客。我相信有更好的方法)

发生的是,在第14行的appendRow(array)中,您正在将当前状态的数组追加到第二个工作表中;随着时间的推移,基本上会创建一个数组值的大金字塔

如果表1包含如下内容: 1,1,1

2,2,2

3,3,3

4,4,4

5,5,5

您的工作表2将附加以下内容: 1,1,1

1,1,1,2,2,2

1,1,1,2,2,2,3,3,3

。。。等等

你可以这样做:

function triggerOnTime() {
  var SpreadSheetKeyA = "142WNsfQQkSx4BuNhskDM9aXD9ylRHNZh34oO5TBTt1g";
  var SpreadSheetKeyB = "1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y";
  var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getActiveSheet();
  var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getActiveSheet();
  var data = sheet1.getDataRange().getValues();
  var array = [];
  for (var y = 1; y < data.length; y++) {

    for (var x = 0; x < 35; x++){
      array.push(data[y][x]);
    }
      sheet2.appendRow(array);
      sheet1.deleteRow(y);
      array = []; //reset the array contents
      }
}
函数triggerOnTime(){
var SpreadSheetKeyA=“142wnsfqksx4bunhskdm9axd9ylrhnzh34oo5tbtt1g”;
var SpreadSheetKeyB=“1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y”;
var sheet1=SpreadsheetApp.openById(SpreadSheetKeyA.getActiveSheet();
var sheet2=SpreadsheetApp.openById(SpreadSheetKeyB.getActiveSheet();
var data=sheet1.getDataRange().getValues();
var数组=[];
对于(变量y=1;y
附加的行只会重置数组并添加要复制的行


如果这对您有效,请告诉我。

谢谢您的回答,但它不起作用。它确实解决了您描述的问题(1,1,1,2,2,3,3问题)。如果我有a、b、c、d、e、f行并运行该函数。该函数将复制所有te值,但在我运行它的某些时候会复制这些值。它从不删除b,d和f。我已经在我原来的帖子中更新了我的代码。我不知道为什么你会遇到重复的代码,你一定有一些不在这里的代码正在运行。我的从来没有重复过。首先,在这两个for循环之外,尝试以下操作:
sheet1.deleteRows(1,sheet1.getLastRow())这将一次删除所有行,而不是迭代和删除。它的速度快得多,并给出相同的结果。关于重复项,我不知道,但我建议将
data.length
<35
的硬编码编号分别更改为
sheet1.getMaxRows()
sheet1.getMaxColumns()
。这也更加健壮。实际上,就上面的设置方式而言,不要替换
数据。length
,它在这种情况下有效。谢谢我解决了它。我使用了
sheet1.clear()。因为所有的值都已被复制。这就解决了重复问题。我不知道为什么,但我感觉GAS不是一种稳定的语言。谢谢你的帮助!哈哈,是的,它有点忘记了谷歌的项目。我相信随着它越来越受欢迎,他们会改进它,但是它有一些巨大的漏洞。不过这很有趣!很高兴你成功了:)
function triggerOnTime() {
  var SpreadSheetKeyA = "142WNsfQQkSx4BuNhskDM9aXD9ylRHNZh34oO5TBTt1g";
  var SpreadSheetKeyB = "1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y";
  var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getActiveSheet();
  var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getActiveSheet();
  var data = sheet1.getDataRange().getValues();
  var array = [];
  for (var y = 0; y < data.length; y++) {

    for (var x = 0; x < 35; x++){
      array.push(data[y][x]);
    }
      sheet2.appendRow(array);
      sheet1.deleteRow(y+1);
      array = [];
      }
}
function triggerOnTime() {
  var SpreadSheetKeyA = "142WNsfQQkSx4BuNhskDM9aXD9ylRHNZh34oO5TBTt1g";
  var SpreadSheetKeyB = "1h8fDwCUUPHRdmTHu-5gMyqU294ENZxCZcHCNCuN6r_Y";
  var sheet1 = SpreadsheetApp.openById(SpreadSheetKeyA).getActiveSheet();
  var sheet2 = SpreadsheetApp.openById(SpreadSheetKeyB).getActiveSheet();
  var data = sheet1.getDataRange().getValues();
  var array = [];
  for (var y = 1; y < data.length; y++) {

    for (var x = 0; x < 35; x++){
      array.push(data[y][x]);
    }
      sheet2.appendRow(array);
      sheet1.deleteRow(y);
      array = []; //reset the array contents
      }
}