2016-05-31 4 views
0

У меня есть электронная таблица Google с тремя разными листами, которые вы можете увидеть в here.Значения копирования таблицы Google из одной строки в другую.

Что бы я хотел сделать, это за каждого человека на листе «человек», создайте строку лица на листах «стаков», которые будут повторяться столько раз, сколько будет из числа «блюд», которые мы есть в «блюде». Итак, для каждого человека, я хочу создать personA + meal1 в строке №1, personA + meal2 в строке №2, personA + meal3 в строке № 3 и т. Д.

Я понял, как это сделать, повторяя один и тот же код снова и снова. Код работает, но он очень неэффективен. Я предполагаю, что должен быть способ сделать то же самое повторение, которое я делаю гораздо более простым и простым способом. Я просто изучаю, как вам использовать некоторые скрипты для улучшения моей таблицы, поэтому любая помощь с этим будет очень желанной!

Некоторые Предостережения:

  • Если вы посмотрите на таблицу, вы увидите, что я использую формулы в некоторой ячейке, чтобы вычислить последнюю строку со значением или размеров диапазонов.
  • На вкладке «Питание» я определил диапазон имен с едой. Я не очень горжусь этим, потому что список еды будет расти, поэтому я задаюсь вопросом, есть ли более динамичный способ справиться с этим, вместо того, чтобы корректировать диапазон каждый раз, когда я добавляю новую еду.

Вот код, который вы также найдете в таблице:

function copyValuesA() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("names"); 
var name = sheet.getRange("A2"); 
var sheetMeals = ss.getSheetByName("meals"); 
var rangeMeals = sheet.getRange("mealsNames"); 
var sheetstacs = ss.getSheetByName("stacs"); 
var lastRow = sheetstacs.getRange("B1").getValue(); 
var mealCount = sheetstacs.getRange("D1").getValue(); 
var lastRowMeals = sheetstacs.getRange("C1").getValue(); 
var rangeOrigname01 = sheetstacs.getRange("A" + lastRow + ":A" + mealCount); 
var rangeOrigname02 = sheetstacs.getRange("A1"); 

name.copyTo(rangeOrigname01); 

var rangeDestMeals01 = sheetstacs.getRange("B" + lastRowMeals); 

rangeMeals.copyTo(rangeDestMeals01); 

} 


function copyValuesB() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("names"); 
var name = sheet.getRange("A3"); 
var sheetMeals = ss.getSheetByName("meals"); 
var rangeMeals = sheet.getRange("mealsNames"); 
var sheetstacs = ss.getSheetByName("stacs"); 
var lastRow = sheetstacs.getRange("B1").getValue(); 
var mealCount = sheetstacs.getRange("D1").getValue(); 
var lastRowMeals = sheetstacs.getRange("C1").getValue(); 
var rangeOrigname01 = sheetstacs.getRange("A" + lastRow + ":A" + mealCount); 
var rangeOrigname02 = sheetstacs.getRange("A1"); 

name.copyTo(rangeOrigname01); 

var rangeDestMeals01 = sheetstacs.getRange("B" + lastRowMeals); 

rangeMeals.copyTo(rangeDestMeals01); 
} 


function copyValuesC() { 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName("names"); 
var name = sheet.getRange("A4"); 
var sheetMeals = ss.getSheetByName("meals"); 
var rangeMeals = sheet.getRange("mealsNames"); 
var sheetstacs = ss.getSheetByName("stacs"); 
var lastRow = sheetstacs.getRange("B1").getValue(); 
var mealCount = sheetstacs.getRange("D1").getValue(); 
var lastRowMeals = sheetstacs.getRange("C1").getValue(); 
var rangeOrigname01 = sheetstacs.getRange("A" + lastRow + ":A" + mealCount); 
var rangeOrigname02 = sheetstacs.getRange("A1"); 

name.copyTo(rangeOrigname01); 

var rangeDestMeals01 = sheetstacs.getRange("B" + lastRowMeals); 

rangeMeals.copyTo(rangeDestMeals01); 
} 


function copyValuesAll() { 

copyValuesA(); 
copyValuesB(); 
copyValuesC(); 
} 

ответ

0

Если заинтересованы в динамической формуле для достижения этого:

в вашем stacs листа в колонке Клетки 2 пут :

=TRANSPOSE(SPLIT(JOIN(";",ARRAYFORMULA(REPT(A2:A&";",COUNTA(meals!$A$2:$A)))),";")) 

и в ячейке B2:

=TRANSPOSE(SPLIT(ARRAYFORMULA(REPT(JOIN(";",meals!$A$2:$A$8),COUNTA(names!A2:A))),";")) 

делает это автоматически учитывает новые значения

enter image description here

+0

Эти формулы УДИВИТЕЛЬНЫЙ! Они просто решают проблему очень легко. Большое спасибо Aurielle! –

+0

Привет, Ауриэль, я не уверен, что вы собираетесь это прочитать, потому что прошло какое-то время. Я должен сказать, что ваше решение работало amanzingly в течение всего этого времени. Дело в том, что моя таблица стала огромной, и на этой неделе я получил эту ошибку в формуле: Ошибка Текст результата REPT длиннее лимита в 32000 символов. Кроме того, Google Spreadsheet теперь очень тяжелая, и для вычисления требуется много времени. Я подумываю о переносе этой таблицы в файл Excel, и я буду в курсе, если вы знаете какую-либо формулу, которую я могу использовать для получения этого же результата, это Excel. Заранее спасибо! –

Смежные вопросы