Google电子表格将数据从一行复制到另一个表格
问题描述:
我有一张带有3张不同表格的Google电子表格,您可以看到here。Google电子表格将数据从一行复制到另一个表格
我想要做的是按照'人'表中的每个人,在'stacs'表中创建一行人,根据“餐”的数量重复多次在“餐”表中。所以,每个人,我想创建第1行的personA + meal1,第2行的personA + meal2,第3行的personA + meal3等。
我想出了如何做到这一点,重复一遍又一遍的相同的代码。代码有效,但效率很低。我猜想必须有一种方式来做同样的重复,以更简洁更简单的方式进行。我只是在学习如何使用一些脚本来改进我的电子表格,所以对此的任何帮助将非常受欢迎!
一些注意事项:
- 如果你看看电子表格中,你会看到,我使用的公式在一些细胞来计算最后一行数值或范围的大小。
- 在“用餐”选项卡中,我定义了一个名称范围和饭菜。我对此并不感到自豪,因为餐单会增加,所以我不知道是否有更加动态的方式来处理这个问题,而不是每次添加新餐时调整范围。
这里,你还可以找到在电子表格中的代码:
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();
}
这些公式是真棒!他们很容易解决问题。非常感谢Aurielle! –
嗨Aurielle,我不确定你是否会阅读这篇文章,因为它已经有一段时间了。我不得不说,你的解决方案在这段时间里一直在做着惊人的工作。问题是我的电子表格变得很庞大,本周我在公式中得到了这个错误:错误 REPT的文本结果比32000个字符的限制更长。此外,Google Spreadsheet现在非常沉重,需要花费大量时间进行计算。我正在考虑将此电子表格迁移到Excel文件中,如果您知道任何可用于获取相同结果的公式,我都会想到Excel。提前致谢! –