使用应用程序脚本在另一个电子表格中复制数据,数据之间没有空格



我想从一个电子表格中复制数据,并将其放在另一个表格中,行之间没有空格,也就是说,继续复制它们。我试图使用Apps script制作一个脚本,但该代码从最后一行开始复制我的数据。我才刚刚开始,我正在尽可能多地学习应用程序脚本

我的代码:我设法编写了这段代码,但它一个单元接一个单元地向我写入,由于数据太多,它超过了脚本的执行时间并停止了。[1] :https://i.stack.imgur.com/vhlsT.png

为了更好地理解,我在电子表格上附上了一个链接。https://docs.google.com/spreadsheets/d/1lE8bTAZ1qtxZhHf_tCcDL4Fb9nQNRiDicc7GQyDiXmA/edit?usp=sharing

我的代码:

function myFunction (){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.openById("1lE8bTAZ1qtxZhHf_tCcDL4Fb9nQNRiDicc7GQyDiXmA")
var source_sheet= sheet.getSheetByName("Date importate");
//var source_sheet = ss.getSheetByName("Date importate");
var target = SpreadsheetApp.openById("1lE8bTAZ1qtxZhHf_tCcDL4Fb9nQNRiDicc7GQyDiXmA");
var target_sheet = target.getSheetByName("Date prelucrate");
var source_range = source_sheet.getRange("A3:BR100");
var target_range = target_sheet.getRange("A2:BR1000")
var lastRow_indexofsource = source_sheet.getLastRow();
var lastRow_indexoftarget = target_sheet.getLastRow();
var targetslno = lastRow_indexoftarget+1;
Logger.log(targetslno);
for(var i=2; i<=lastRow_indexofsource;++i)
{
for(var j=1; j<=70;++j)
{
var value =source_range.getCell(i,j).getValue();
target_range.getCell(targetslno,1).setValue(targetslno+1);
target_range.getCell(targetslno,j).setValue(value);
}
targetslno=targetslno+1;
}
}

描述

我相信您要做的是将值从源A4:BR(最后一行(复制到目标的下一行。但列A中的值将按目标中现有行的数量递增。我说源A4是因为你的source_range从A3开始,getCell偏移量从第2行开始,变成A4。

由于要复制连续的行和列,为了提高性能,我会使用getValues((/setValues(。此外,我还使用Array.forEach来增加行号。

脚本

function myFunction() {
try {
var sheet = SpreadsheetApp.openById("someid");
var source_sheet = sheet.getSheetByName("Date importate");
var target = SpreadsheetApp.openById("someid");
var target_sheet = target.getSheetByName("Date prelucrate");
var lastRow_indexoftarget = target_sheet.getLastRow();
// your source_range starts A3 but your getCell starts row 2
// get values from A4:BR??? (last row)
var values = source_sheet.getRange(4,1,source_sheet.getLastRow()-3,70);
// increase row numbers
values.forEach( row => row[0] = row[0]+lastRow_indexoftarget);
// put values at last row +1
target_sheet.getRange(lastRow_indexoftarget+1,1,values.length,values[0].length).setValues(values)
}
catch(err) {
console.log(err);
}
}

参考

  • https://developers.google.com/apps-script/reference/spreadsheet/range#getValues((
  • https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(对象(
  • https://developers.google.com/apps-script/guides/support/best-practices
  • https://www.w3schools.com/jsref/jsref_foreach.asp

试试这个:

function myFunction() {
const ss0 = SpreadsheetApp.openById("1lE8bTAZ1qtxZhHf_tCcDL4Fb9nQNRiDicc7GQyDiXmA");
const ss1 = SpreadsheetApp.openById("1lE8bTAZ1qtxZhHf_tCcDL4Fb9nQNRiDicc7GQyDiXmA");
if (ss0 && ss1) {
const ssh = ss0.getSheetByName("Date importate");
const svs = ssh.getRange("A3:BR100").getValues();
const tsh = ss1.getSheetByName("Date prelucrate");
if (ssh && svs && tsh) {
tsh.getRange(tsh.getLastRow() + 1, 1, svs.length, svs[0].length).setValues(svs);
} else {
SpreadsheetApp.getUi().alert("Invalid Sheets or Ranges");
}
} else {
SpreadsheetApp.getUi().alert("Invalid Source or Target or both ");//Check ssid
}
}

最新更新