[英]How to append first row data while creating new sheets dynamically in Google Apps Script
我有這段代碼可以動態創建新工作表,但省略了第一行,因為它的結構使得它根據第一列A:A中的值創建新工作表。 在附加 rest 數據之前,如何構造它以捕獲第一個(標題行)。
function newSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = ss.getActiveSheet();
var sheet1 = ss.getSheetByName("main")
var getNames = [...new Set(sheet1.getRange("A2:A").getValues().filter(String).toString().split(","))];
var title = sheet1.getRange("A1:Z1").getValues().filter(String).toString().split(",");// Not sure
for (var i = 0; i < getNames.length; i++) {
var copy = ss.getSheetByName(getNames[i]);
if (copy) {
ss.deleteSheet(copy)
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();
sheet1.getLastColumn()).getValues();;
// Append title row first???
namedSheet.appendRow(rowValues[0]);
ss.setActiveSheet(ss.getSheetByName(getNames[i]));
ss.moveActiveSheet(ss.getNumSheets());
});
您想要執行以下操作:
main
) 中的第一行相同。function newSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var templateSheet = ss.getActiveSheet();
var sheet1 = ss.getSheetByName("main");
var getFirstColumn = sheet1.getRange(2, 1, sheet1.getLastRow() - 1).getValues().map(row => row[0]); // Get column A contents (excluding row 1)
var getNames = [...new Set(getFirstColumn)]; // Get unique values from column A (excluding row 1)
var title = sheet1.getRange(1, 1, 1, sheet1.getLastColumn()).getValues()[0]; // Get row 1 values
var data = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()).getValues(); // Get all data in "main" sheet (excluding row 1)
for (var i = 0; i < getNames.length; i++) { // Iterate through each unique value in column A
var copy = ss.getSheetByName(getNames[i]);
if (copy) ss.deleteSheet(copy); // If there is a sheet with this name, delete it
var filteredData = data.filter(row => row[0] === getNames[i]); // Get rows from "main" sheet with current unique column A value
var namedSheet = ss.insertSheet(getNames[i]); // Create sheet for current unique column A value
namedSheet.appendRow(title); // Append row 1 values to new sheet
namedSheet.getRange(2, 1, filteredData.length, filteredData[0].length).setValues(filteredData); // Copy filtered data to new sheet
}
}
title
數組添加到filteredData
數據數組的開頭並同時寫入所有數據,包括第一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.