Mon*_*ane 3 google-apps-script
我希望能够将电子表格(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");
}
Run Code Online (Sandbox Code Playgroud)
我认为它的全部工作除了最后一行source_range.copyTo("A1:B2"); 我是这个脚本业务的新手,所以感谢您的帮助.
copyTo()仅当目标位于同一电子表格中时,此方法才有效.要将数据从一个电子表格复制到另一个电子表格,您必须从源范围获取值(以及任何格式,颜色,字体大小......)到一个变量(一个2D数组或如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);
}
Run Code Online (Sandbox Code Playgroud)
新更新的代码如下(由问题作者编辑)
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);
}
Run Code Online (Sandbox Code Playgroud)
编辑2(作者:ANSWERER)
要获得完整列,请更改范围定义,如下所示:
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.
Run Code Online (Sandbox Code Playgroud)
如果要复制多个连续列,只需相应地定义源表,在A1表示法列中,A + B + C将是.getRange("A2:C");.
尝试使用范围的整数定义,IMO更容易和更易读:例如,一系列完整列A + B + C将是 sh.getRange(1,1,sh.getLastRow(),3)
对于不连续的列,它变得有点复杂......也许是一个新的线程?
| 归档时间: |
|
| 查看次数: |
6150 次 |
| 最近记录: |