【问题标题】:Copy from the last row of a column until the end of spreadsheet (variable number every time) [closed]从一列的最后一行复制到电子表格的末尾(每次都可变)[关闭]
【发布时间】:2020-05-23 16:29:31
【问题描述】:

使用谷歌应用程序脚本,我需要从电子表格 #1 复制数据,将其带到电子表格 #2 的最后一行,然后复制最后一行 - 1 中的公式(粘贴数据之前的行数)电子表格 #2 我刚刚复制的数据的长度

我尝试了几种方法,但没有一个能正常工作。 对于下面的一个,我尝试在电子表格 #2 的单元格 N1 中插入一个公式,以便它显示两个不同列中包含数据的行数的差异。然后我告诉脚本将公式从 lastrow 设置为 lastrow + 该值。

当我运行脚本时,它会复制公式 19 次,但 N1 是 4 次。然后我试图纠正它并说:lastrow + N1-15 的值并且工作正常。 然而,下次我尝试插入 8 个值而不是 4 个时,它复制了 12 次公式。

function OrdenarRango() {

//  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PEDIDOS SIN ORDENAR").sort(5)

  //Ordena los datos del rango según la columna E en orden descendente
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet1 = ss.getSheetByName("PEDIDOS SIN ORDENAR");
var range = sheet1.getRange("A2:F");
range.sort({column: 5, ascending: false})

//Borra los valores del rango A2:D
var A = sheet1.getRange("A2:F").getValues();
var borrar = sheet1.getRange("A2:D").clearContent();

//Pega los valores en la última fila de PEDIDOS 2020
var ss1 = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1zF84h_gR0zHPqwobYyuOQlo50L2ktpZr2e4orMNtqE8/edit#gid=382646794'); 
var sheet2 = ss1.getSheetByName("PEDIDOS 2020"); 
var lastRow = sheet2.getLastRow() + 1; 

var destRange = sheet2.getRange(lastRow, 1, A.length, A[0].length).setValues(A);

//Copia las fórmulas del rango

var rango = sheet2.getRange("N1").getValue()
var formulas = sheet2.getRange(lastRow-1, 10, 1, 1).getFormulasR1C1();
var destino = sheet2.getRange(lastRow, 10, lastRow+rango, 1);
destino.setFormulaR1C1(formulas)
}

我也试过这个,只复制一次公式:

var rango = sheet2.getRange("N1").getValue()
var formulas = sheet2.getRange(lastRow-1, 10, 1, 1).getFormulasR1C1();
for (i= 0; i<=rango; i++) {
var destino = sheet2.getRange(lastRow, 10, 1, 1);
destino.setFormulaR1C1(formulas)}

还有这个,它会创建一个无限循环:

var rango = sheet2.getRange("N1").getValue()

while (rango > 0) {
var formulas = sheet2.getRange(lastRow-1, 10, 1, 1).getFormulasR1C1();
var destino = sheet2.getRange(lastRow, 10, 1, 1);
destino.setFormulaR1C1(formulas)}

一开始我尝试插入类似于 A.length 的内容,尽管我不记得确切的代码。反正也没用。

代码有什么问题。怎么解决?

Data before running the script

Data after running the script. I need to know the code for each product and the number

【问题讨论】:

  • 也许你可以提供一些图片来给我们一个你正在尝试做的事情的例子。我很乐意提供帮助,但我就是不明白你在问什么。而且你的代码对我来说没有多大意义,当然你的 cmets 是西班牙语的,这对我不起作用。

标签: javascript google-apps-script string-length


【解决方案1】:

试试这个:

function OrdenarRango() {
  var ss=SpreadsheetApp.getActive(); 
  var sh1=ss.getSheetByName("sh1");
  var range=sh1.getRange(2,1,sh1.getLastRow()-1,6);
  range.sort({column: 5, ascending: false})
  var A=sh1.getRange(2,1,sh1.getLastRow()-1,6).getValues();
  var borrar=sh1.getRange(2,1,sh1.getLastRow()-1,4).clearContent();
  var ss1=SpreadsheetApp.openByUrl(''); 
  var sh2=ss1.getSheetByName("Sheet2"); 
  var lastRow=sh2.getLastRow() + 1; 
  var destRange=sh2.getRange(lastRow,1,A.length,A[0].length).setValues(A);
  var formulas=sh2.getRange(lastRow-1, 10, 1, 1).getFormulasR1C1();
  var destino=sh2.getRange(lastRow,10,sh2.getLastRow()-lastRow+1,1);
  destino.setFormulaR1C1(formulas)
}

【讨论】:

  • 非常感谢 Cooper,它现在完美地复制了公式。但是有一个我不明白的新问题:当它对数据进行排序时,它不尊重与其他列中包含的数据的关系。例如,如果在第 2 行有(想象每列一个词):red dog、bike、computer。第 3 行:绿猫船桌。在第 4 行中再次出现橙色、鸟、汽车、计算机。然后脚本对包含计算机的所有内容进行排序,在第 3 行中,您可以找到绿色、猫、船、计算机。这很奇怪,因为之前排序工作正常
  • 我不明白这个问题。您说的是前 4 列,并且您正在按 column5 降序排序。也许您可以更清楚地说明您所描述的内容。尝试一些不言而喻的图片。
  • 我编辑了问题,现在有 2 张图片。在按第 5 列排序后,每行的内容应保持在同一行,因为在该列中有供应商的名称,它必须与产品、项目数...
猜你喜欢
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2021-11-26
  • 2022-07-05
  • 2021-05-08
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多