[英]Google spreadsheet copy values from one row to another sheet
I have a Google Spreadsheet with 3 different sheets that you can see here . 我有一个Google电子表格,其中包含3种不同的表格,您可以在此处看到。
What I would like to do is per each person in the 'person' sheet, create a row of the person in the 'stacs' sheets that will be repeated as many times based of the number of 'meals' that we have in the 'meals' sheet. 我想做的是在“人员”表中的每个人,在“ stacs”表中创建一行人,根据我们在“人员”表中拥有的“餐”的数量将其重复多次。餐单。 So, per each person, I want to create personA + meal1 in row #1, personA + meal2 in row #2, personA + meal3 in row #3, etc. 因此,对于每个人,我想在第1行中创建personA +餐1,在第2行中创建personA +餐2,在第3行中创建personA +餐3,等等。
I figured it out how to do this repeating the same code over and over again. 我想出了如何重复执行相同的代码。 The code works but it's very inefficient. 该代码可以工作,但是效率很低。 I guess that there has to be a way of doing the same repetition that I'm doing in a much cleaner and simpler way. 我猜必须要有一种方法,可以以更简洁,更简单的方式进行与我相同的重复。 I'm just learning how to you use some scripting to improve my spreadsheet so any help with this will be very welcome! 我只是在学习如何使用一些脚本来改善我的电子表格,因此非常欢迎您提供任何帮助!
Some Caveats: 一些警告:
Here is the code that you also find in the spreadsheet: 您也可以在电子表格中找到以下代码:
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();
}
If your interested in a dynamic formula to accomplish this: 如果您对动态公式感兴趣,请执行以下操作:
in your stacs sheet in column A cell 2 put: 在第2单元格的stacs表中:
=TRANSPOSE(SPLIT(JOIN(";",ARRAYFORMULA(REPT(A2:A&";",COUNTA(meals!$A$2:$A)))),";"))
and in cell B2: 并在单元格B2中:
=TRANSPOSE(SPLIT(ARRAYFORMULA(REPT(JOIN(";",meals!$A$2:$A$8),COUNTA(names!A2:A))),";"))
doing this will automatically account for new values 这样做将自动考虑新值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.