簡體   English   中英

如何使用 Google App Script 執行行調用

[英]How do I perform row call using Google App Script

我已經對如何使用谷歌應用程序腳本執行 rowcall 進行了一些研究,但遇到了一些挑戰,我將不勝感激。

所以這段代碼查看第一列並獲取用於重命名新選項卡的值

function newSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var templateSheet = ss.getActiveSheet();
    var sheet1 = ss.getSheetByName("main")
    var getNames = sheet1.getRange("A2:A").getValues().filter(String).toString().split(",");

    for (var i = 0; i < getNames.length; i++) {
        var copy = ss.getSheetByName(getNames[i]);
        if (copy) {
            Logger.log("Sheet already exists");
        } else {
            templateSheet.copyTo(ss).setName(getNames[i]);
            ss.setActiveSheet(ss.getSheetByName(getNames[i]));
            ss.moveActiveSheet(ss.getNumSheets());
        }
    }
}

床單

在此處輸入圖像描述

我想做的並且正在成為一個挑戰,是在創建一個帶有名稱的新選項卡時,我想將整行復制到新選項卡/工作表。 例如,對於工作表Levi ,僅將帶有 Levi 數據的原始數據復制到工作表。

目前我的代碼將整個源工作表復制到新的選項卡/工作表。 我真的很感激任何幫助

建議的解決方案:

現在您正在使用主工作表作為模板,因此當您將其與 function .copyTo一起使用時,您將復制整個內容。 您將必須獲得與給定名稱的索引相對應的整行。

方法

您將需要額外的過濾才能獲得要放入新工作表中的正確行值。 我將過濾名稱列(A 列)並在循環中獲取名稱的索引。

(我假設你可以有一些差距,所以 for 循環的索引是不夠的)。

找到相應的索引后,我需要將其遞增 1,因為行索引在 Google Spreadsheets 中從 1 開始。

現在我可以使用 function .getRange(row, column, numRows, numColumns)輕松獲取行。 我正在使用 function .getLastColumn()來計算numColumns參數。

現在我可以使用 function .appendRow()將行插入到我剛剛使用.insertSheet() function 創建的新工作表中。

示例代碼:

function newSheet() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var templateSheet = ss.getActiveSheet();
    var sheet1 = ss.getSheetByName("main")
    var getNames = sheet1.getRange("A2:A").getValues().filter(String).toString().split(",");

    for (var i = 0; i < getNames.length; i++) {
        var copy = ss.getSheetByName(getNames[i]);
        if (copy) {
            Logger.log("Sheet already exists");
        } else {
            //The copyTo function will copy the entire sheet
            //templateSheet.copyTo(ss).setName(getNames[i]);

            var rowIndex = sheet1.getRange("A:A").getValues().flatMap(value => value[0]).indexOf(getNames[i]) + 1;
            var rowValues = sheet1.getRange(rowIndex, 1, 1, sheet1.getLastColumn()).getValues();
            ss.insertSheet(getNames[i]).appendRow(rowValues[0]);

            ss.setActiveSheet(ss.getSheetByName(getNames[i]));
            ss.moveActiveSheet(ss.getNumSheets());
        }
    }
}

編輯

如果名稱重復,您將不得不過濾列並提取相應的索引。

首先,您必須為 getNames 變量設置一個集合。 (否則你會重復)。

var getNames = [...new Set(sheet1.getRange("A2:A").getValues().filter(String).toString().split(","))];

然后,您必須將行索引 map 到列 A 中的名稱。現在您可以按 getNames 值進行過濾,您將獲得行索引。 最后,您可以將 append 到新表中相應索引處的行。

var rowIndexes = sheet1.getRange("A:A").getValues()
                                       .map((value, index) => [value[0], (index + 1)])
                                       .filter(value => value[0] === getNames[i]);
var namedSheet = ss.insertSheet(getNames[i]);
rowIndexes.map(index => {
                 var rowValues = sheet1.getRange(index[1], 1, 1, sheet1.getLastColumn()).getValues();
                 namedSheet.appendRow(rowValues[0]);
});

參考:

Class 表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM