2015-12-07 2 views
1

Я пытаюсь создать Google Script, который копирует строки из одного листа 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); 
} 
} 
+0

ли регистрационную форму Форму Google? –

+0

No Sandy, регистрационная форма - это форма формы Gravity Forms, которая импортируется в Google Таблицы через Zapier. –

+0

Возможно, вам понадобится использовать триггер, основанный на времени, который запускает каждую единицу времени «x». Я не уверен, как обновление вызовет запуск сценария или, если это возможно. Если вы не знакомы с инструментами устранения неполадок, это одна из лучших вещей, которые вы могли бы изучить. [Ссылка на поиск и устранение неисправностей] (https://developers.google.com/apps-script/troubleshooting). Вам нужно все это прочитать. –

ответ

2

С помощью этого кода:

// 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() возвращает 2-мерный массив, поэтому он должен быть преобразован. Поскольку вы получаете только одну строку данных, ее легко конвертировать. Внешний массив имеет только один внутренний массив. Один внутренний массив имеет все значения ячейки строки.

+0

WOW, Sandy Good, СПАСИБО ВАМ ТАК. Я просто должен спросить, метод getRange, почему данные идут последним Row, затем 1, затем 1 снова, затем последний столбец? Я смотрел документы Google Script и, похоже, прошёл последнюю строку, последний столбец, количество строк, количество столбцов. –

+0

Существует 4 варианта 'getRange()'.Для параметра, имеющего 4 параметра, первым параметром является номер строки строки, для которой используется START. Второй параметр - столбец START at. Итак, чтобы получить последнюю строку, вам нужно начать с последней строки, и вы, вероятно, захотите начать в столбце 1. Третий параметр - это количество строк. Вы хотите получить только одну строку. Последний параметр - количество столбцов для получения. Количество столбцов, которые нужно получить, совпадает с числом последнего столбца. (если вы хотите получить все столбцы). –

1

Вот ответ на то, что я придумал для кода:

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); 
} 

}