该copyTo()
方法仅在目的地位于同一个电子表格中时才有效。要将数据从一个电子表格复制到另一个电子表格,您必须将源范围中的值(以及任何格式、颜色、字体大小...)转换为变量(二维数组或如 Srik 所指的教程中所示)并将其写回目标范围。
例如 :
function copytest()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("0AnqSFd3iikE3dEpHUGJod2xwbXRqU25wS25HWF9pdEE");
var source_sheet = ss.getSheetByName("Sheet1");
var target_sheet = target.getSheetByName("Sheet1");
var source_range = source_sheet.getRange("A1:B2");
var target_range = target_sheet.getRange("A1:B2");
var values = source_range.getValues();
var bGcolors = source_range.getBackgrounds();
var colors = source_range.getFontColors();
var fontSizes = source_range.getFontSizes();
// make use of autocomplete to find other methods...
target_range.setValues(values);
target_range.setBackgrounds(bGcolors);
target_range.setFontColors(colors);
target_range.setFontSizes(fontSizes);
}
新更新的代码如下(由问题作者编辑)
function copyTest()
{
//gets and formats data ranges, to and from sheets.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("idspispopd1234567890");
var source_sheet = ss.getSheetByName("one");
var target_sheet = target.getSheetByName("Sheet1");
var source_range = source_sheet.getRange("A2:A");
var target_range = target_sheet.getRange("A2:A");
//gets then writes values defined in setup
var values = source_range.getValues();
target_range.setValues(values);
//for checking last row with data in cell and formatting range
var lastRow = source_sheet.getLastRow();
//FOR MAIL
var emailAddress = "test@test.test";
var subject = "Compass import information from Montessori Community School";
var message = values;
MailApp.sendEmail(emailAddress, subject, message);
}
编辑2(由回答者)
要获得完整的列,请像这样更改范围定义:
var source_range = source_sheet.getRange("A2:A");
var values = source_range.getValues();
var target_range = target_sheet.getRange(2,1,values.length,values[0].length);// use the array size to define the range because the target column A is not necessarily the same size at this time.
如果要复制多个连续列,只需相应地定义源工作表,在 A1 表示法中,A+B+C 列将是.getRange("A2:C")
;。
尝试使用范围的整数定义,IMO 它更容易且更具可读性:例如,完整列 A+B+C 的范围将是sh.getRange(1,1,sh.getLastRow(),3)
对于不连续的列,它变得有点复杂......也许是一个新线程?