【问题标题】:Copy a row to new sheet based on value in a cell根据单元格中的值将行复制到新工作表
【发布时间】:2015-12-07 23:29:11
【问题描述】:

我正在尝试创建一个 Google 脚本,它可以根据单元格的值将行从一个 Google 表格复制到不同的表格中。

单元格值是美国的州。主电子表格包含注册表中的数据,这些数据一直被导入其中。当发生新的注册(并且数据被导入主表)时,我希望脚本运行并将该行数据复制到适当的状态表中。

这是我所在的位置:

  1. 获取母版表
  2. 找到最后一行
  3. 获取“状态”列中单元格的值
  4. 根据它的状态将该行复制到 50 张不同的工作表中的一张。
  5. 每次更新主表时运行脚本(通过 API)。

任何帮助将不胜感激。在编写脚本时,我绝对是一个新手,这让我很头疼。

这是我目前的代码:

function myFunction() {

// Get Source Spreadsheet
var source = SpreadsheetApp.getActiveSpreadsheet();

// Get Source Sheet from Spreadsheet
var source_sheet = source.getActiveSheet();

// Get Active Range from Sheet
var lastRow = sheet.getLastRow();

// Get the Value of the State Cell
var cellValue = Range.getCell(lastrow,3);

// Copy Last Row to Appropriate State Sheet
if ( cellValue == 'Alaska') {
    var target = SpreadsheetApp.openById("");
    var target_sheet = target.getSheetByName("Sheet1");
    target_sheet.appendRow(lastRow);
}
}

【问题讨论】:

  • 注册表是谷歌表单吗?
  • 不,桑迪,注册表是通过 Zapier 导入 Google 表格的重力表格。
  • 您可能需要使用基于时间的触发器,该触发器每隔“x”个时间单位运行一次。我不确定更新将如何触发脚本运行,或者是否可能。如果您不熟悉故障排除工具,这是您可以学到的最好的东西之一。 Link to Troubleshooting你需要阅读所有这些。

标签: google-apps-script google-sheets


【解决方案1】:

使用此代码:

// Get Active Range from Sheet
var lastRow = sheet.getLastRow();

getLastRow() 方法返回一个整数。然后在您的代码中进一步向下,您将使用 lastRow 变量作为 appendrow() 的数据,这将不起作用;

target_sheet.appendRow(lastRow);

代码应该是这样的:

var target = SpreadsheetApp.openById("");
var target_sheet = target.getSheetByName("Sheet1");

var lastRowOfData = source_sheet
  .getRange(source_sheet.getLastRow(), 1, 1, source_sheet.getLastColumn())
  .getValues();  //Returns a two dimensional array

var oneD_Array = lastRowOfData.join().split(","); //Creates a one D array
target_sheet.appendRow(oneD_Array);

appendRow() 方法采用一维数组。 getValues() 方法返回一个二维数组,因此必须对其进行转换。因为你只得到一行数据,所以很容易转换。外部数组只有一个内部数组。一个内部数组包含该行的所有单元格值。

【讨论】:

  • 哇,桑迪·古德,非常感谢。我只想问,getRange这个方法,为什么数据走最后一行,然后是1,又是1,最后是Last Column?我正在查看 Google Script 文档,它似乎是最后一行、最后一列、行数、列数。
  • getRange() 有 4 种变体。对于有4个参数的,第一个参数是要开始的行的行号。第二个参数是要开始的列。因此,要获取最后一行,您需要从最后一行开始,并且您可能希望从第 1 列开始。第三个参数是要获取的行数。你只想得到一排。最后一个参数是要获取的列数。要获取的列数与最后一列的数相同。 (如果你想得到所有的列)。
【解决方案2】:

这是我为代码想出的答案:

function myFunction() {

// Get Source Spreadsheet
var source = SpreadsheetApp.getActiveSpreadsheet();

// Get Source Sheet from Spreadsheet
var source_sheet = source.getActiveSheet();

// Get Last Row
var lastRow = source_sheet.getLastRow();

// Get Last Column
var lastColumn = source_sheet.getLastColumn();

// Get Last Row of Data  
var lastRowOfData = source_sheet.getRange(lastRow, 1, 1, lastColumn).getValues();

// Creates a one dimensional array  
var oneD_array = lastRowOfData.join().split(",");

// Get the Value of the State Cell
var cellValue = source_sheet.getRange(2,7).getValue();


// Copy Last Row to Appropriate State Sheet
if ( cellValue == "New York" ) {
    var target = SpreadsheetApp.openById("");
    var target_sheet = target.getSheetByName("Sheet1");
    target_sheet.appendRow(oneD_array);
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多