Google电子表格将值从一行复制到另一张表

时间:2016-05-31 23:22:52

标签: javascript google-sheets

我有一张包含3张不同表单的Google电子表格,您可以看到here

我想要做的是每个人中的每个人'表格,在“stacs”中创建一行人物。根据“餐食”数量重复多次的床单。我们在用餐中吃过饭。片。所以,每个人,我想在第1行创建personA + meal1,在第2行创建personA + meal2,在第3行创建personA + meal3等等。

我想通了一遍又一遍地重复相同的代码。代码有效,但效率很低。我想必须有一种方法可以用更清洁,更简单的方式做同样的重复。我正在学习如何使用某些脚本来改进我的电子表格,因此非常欢迎任何帮助!

一些注意事项:

  • 如果您查看电子表格,您会看到我在某个单元格中使用公式来计算最后一行的值或范围的大小。
  • 在用餐中#' tab我已经定义了一个名字范围与饭菜。我并不为此感到骄傲,因为这份餐的清单会增长,所以我想知道是否有更有活力的方式来处理这个问题,而不是每次添加新餐时调整范围。

以下是您在电子表格中找到的代码:

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

1 个答案:

答案 0 :(得分:0)

如果您对动态公式感兴趣,可以完成此任务:

在A栏单元格2中的stacs表中:

=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