gpt4 book ai didi

google-apps-script - 使用脚本将谷歌电子表格列从一个电子表格复制到另一个电子表格

转载 作者:行者123 更新时间:2023-12-03 20:37:43 24 4
gpt4 key购买 nike

我希望能够将一个列(井 3)从电子表格复制到另一个电子表格(谷歌文档电子表格)。我还希望有某种触发器来查找修改并自动将它们复制到新电子表格中。

这是我的代码,它不起作用!谢谢!

function copytest()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("0AvxaM_p22RvwdHl2MFl4MkhteVhmVzFDY2FOblNpVEE");
var source_sheet = ss.getSheetByName("Sheet1");
var target_sheet = target.getSheetByName("Sheet1");
var source_range = source_sheet.getRange("A1:B2");

source_range.copyTo("A1:B2");

}

我认为除了最后一行 source_range.copyTo("A1:B2");
我是这个脚本业务的新手,所以感谢您的帮助。

最佳答案

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)
对于非连续列,它变得有点复杂......也许是一个新线程?

关于google-apps-script - 使用脚本将谷歌电子表格列从一个电子表格复制到另一个电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17117808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com