![](/img/trans.png)
[英]How do I get arrays mapped in a row in google sheet using JavaScript/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]);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.