0
我有一張帶有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。提前致謝! –