
[英]How to copy specific rows from 3 google spreadsheet to another spreadsheet using google apps script
[英]How to copy a row from one google spreadsheet to another google spreadsheet using google apps script?
我想使用谷歌应用程序脚本将特定行从一个电子表格复制到另一个电子表格。
谁能帮我找到答案。
注意:此解决方案适用于将同一电子表格中的一个工作表中的行复制到另一个工作表,不适用于将工作表中的行复制到不同的电子表格中。
在此处查看文档:
http://code.google.com/googleapps/appsscript/service_spreadsheet.html
假设您正在从中复制的电子表格中工作。
您必须获得当前电子表格和目标电子表格的句柄。 您需要获取目标电子表格的 ID。 详情在上面的链接中。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("abc1234567");
接下来我们需要在这些电子表格中选择特定的工作表。 假设您的行位于名为“New Stuff”的工作表上,并且您在目标电子表格中有一个名为“Archive”的工作表。
var source_sheet = ss.getSheetByName("New Stuff");
var target_sheet = target.getSheetByName("Archive");
现在,谷歌应用程序电子表格使用的概念是范围。 范围只是一大块单元格。 所以我们需要确定起始范围和终止范围。 假设您的工作表有 7 列,而您想要第 10 行。
var source_range = source_sheet.getRange("A10:G10");
var target_range = target_sheet.getRange("A1:G1");
所以我们要把那一行放在目标工作表的第一行。 现在为实际副本:
source_range.copyTo(target_range);
你完成了!
现在,这将始终破坏目标工作表的第一行。 你可以做很多事情来阻止它。 您可以使用工作表对象方法找到最后一行,在后面添加一行,然后将其用作您的范围,而不是总是使用第一行。
var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
这样,每次您复制一行时,它只会被添加到工作表的底部。
copyTo
方法的文档很少,因为它不允许您将内容复制到另一个电子表格中的工作表。
您可能想像下面这样使用getValues
和setValues
:
function CopyDataToNewFile() {
var sss = SpreadsheetApp.openById('0AjN7uZG....'); // sss = source spreadsheet
var ss = sss.getSheetByName('Monthly'); // ss = source sheet
//Get full range of data
var SRange = ss.getDataRange();
//get A1 notation identifying the range
var A1Range = SRange.getA1Notation();
//get the data values in range
var SData = SRange.getValues();
var tss = SpreadsheetApp.openById('8AjN7u....'); // tss = target spreadsheet
var ts = tss.getSheetByName('RAWData'); // ts = target sheet
//set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
}
我也遇到了这个。 我想出了一个很好的解决方法,将所有内容从一张纸复制到另一张纸(图像、图形、脚本和其他内容除外)。 它肯定会复制公式、值和格式。
基本上解决方案是
代码:
var sss = SpreadsheetApp.openById(spreadsheet); // sss = source spreadsheet
var ss = sss.getSheetByName(sheet); // ss = source sheet
var ss_temp = ss.copyTo(targetsheet);
var tss = SpreadsheetApp.openById(spreadsheet); // tss = target spreadsheet
var ts = tss.getSheetByName(sheet); // ts = target sheet
var range2Copy = ss_temp.getRange(range);
range2Copy.copyTo(ts.getRange(range));
bss.setActiveSheet(ss_temp);
bss.deleteActiveSheet()
基于以上内容,我创建了一个电子表格,允许我从主电子表格更新许多副本。 大约15个副本,它节省了很多复制粘贴操作。
另一种方法是将行(或任何范围)从源导入到目标电子表格中。
假设您要从名为“source-spreadsheet-sheet-name”的源电子表格工作表中导入第 3 行,请在目标位置的第一列中输入以下公式:
=IMPORTRANGE("source-spreadsheet-key","source-spreadsheet-sheet-name!3:3")
其中"source-spreadsheet-key"
是您从其 URL 中提取的源电子表格的唯一 ID。
如果您是第一次这样做,将出现安全消息:
只需确认,整行将自动填写。
请记住,在源区域中进行更改后,有时需要几分钟时间来更新导入的单元格。 但是,您可以通过按ctrl-E或ctrl-shift-E来加快速度,同时在目标电子表格中发出蜂鸣声,以工作为准。
我想使用谷歌应用程序脚本将特定行从一个电子表格复制到另一个电子表格。
任何人都可以帮我得到这个答案。
使用range.setValues,是最好的选择。 适用于任何工作表中的任何范围,只要起点和目的地范围相似。
这是一个示例代码:
function openCSV() {
//Buscamos el archivo
var files = DriveApp.getFilesByName("ts.csv");
//Cada nombre de archivo es unico, por eso next() lo devuelve.
var file = files.next();
fileID = file.getId();
//Abrimos la spreadsheet, seleccionamos la hoja
var spreadsheet = SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheets()[0];
//Seleccionamos el rango
var range = sheet.getRange("A1:F1");
values = range.getValues();
//Guardamos un log del rango
//Logger.log(values);
//Seleccionamos la hoja de destino, que es la activeSheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var SSsheet = ss.getSheets()[0];
//Seleccionamos el mismo rango y le asignamos los valores
var ssRange = SSsheet.getRange("A1:F1");
ssRange.setValues(values);
}
这不起作用 - 返回错误“目标范围和源范围必须在同一个电子表格中。” 看起来我们需要做类似的事情:
function copyRow_ (origSheetName, destSheetName, origRowNumber, destRowNumber)
{
var origSheetObject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(origSheetName);
var destSheetObject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(destSheetName);
var origLastCol = origSheetObject.getLastColumn();
var arrOrigData = origSheetObject.getRange(origRowNumber, 1, 1, origLastCol).getValues();
var destlastRow = destSheetObject.getLastRow() + 1;
if (destRowNumber)
destlastRow = destRowNumber;
var cont;
for (cont = 0; cont < origLastCol; cont++)
destSheetObject.getRange(destlastRow, 1+cont).setValue(arrOrigData[0][cont]);
}
(公然从这里偷来的)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.