我最近一直在使用一個腳本,我在http://www.chicagocomputerclasses.com/google-sheets-apps-script-combine-multiple-tabs-to-a-master-tab-when-column-positions -不匹配/
function combineData() {
var masterSheet = "Master";
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(masterSheet);
var lc = ss.getLastColumn();
var lr = ss.getLastRow() > 1 ? ss.getLastRow() : 2;
ss.getRange(2, 1, lr-1, lc).clearContent();
var labels = ss.getRange(1, 1, 1, lc).getValues()[0];
labels.forEach(function(label,i){
var colValues = getCombinedColumnValues(label,masterSheet);
ss.getRange(2, i 1, colValues.length, 1).setValues(colValues);
})
}
function getCombinedColumnValues(label,masterSheetName) {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var colValues = [];
for (let [i, sheet] of Object.entries(sheets)) {
var sheetName = sheet.getSheetName();
if(sheetName !== masterSheetName) {
var tempValues = getColumnValues(label,sheetName);
colValues = colValues.concat(tempValues);
}
}
return colValues;
}
function getColumnValues(label,sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var colIndex = getColumnIndex(label,sheetName);
var numRows = ss.getLastRow() - 1;
var colValues = ss.getRange(2, colIndex, numRows, 1).getValues();
return colValues;
}
function getColumnIndex(label,sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var lc = ss.getLastColumn();
var lookupRangeValues = ss.getRange(1, 1, 1, lc).getValues()[0];
var index = lookupRangeValues.indexOf(label) 1;
return index;
}
這是一個很棒的劇本。不幸的是,腳本在執行時只會忽略“MasterSheet”。
請有人修改腳本,以便除了“MasterSheet”之外還有一個選項可以忽略多個作業表?
那將是真棒!
uj5u.com熱心網友回復:
function getCombinedColumnValues(label,shts) {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var colValues = [];
for (let [i, sheet] of Object.entries(sheets)) {
var sheetName = sheet.getSheetName();
if(!~shts.indexOf(sheetname)) {
var tempValues = getColumnValues(label,sheetName);
colValues = colValues.concat(tempValues);
}
}
return colValues;
}
function combineData() {
var shts = ["Master"];//add more sheet names as desired
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Master");
var lc = ss.getLastColumn();
var lr = ss.getLastRow() > 1 ? ss.getLastRow() : 2;
ss.getRange(2, 1, lr-1, lc).clearContent();
var labels = ss.getRange(1, 1, 1, lc).getValues()[0];
labels.forEach(function(label,i){
var colValues = getCombinedColumnValues(label,shts);
ss.getRange(2, i 1, colValues.length, 1).setValues(colValues);
})
}
uj5u.com熱心網友回復:
據我所知,如果您在第一個函式中更改三行,則可以完成:
function combineData() {
var masterSheet = "Master";
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(masterSheet);
var lc = ss.getLastColumn();
var lr = ss.getLastRow() 1; // <---------------------------------------- here
// ss.getRange(2, 1, lr-1, lc).clearContent(); // <--------------------- here
var labels = ss.getRange(1, 1, 1, lc).getValues()[0];
labels.forEach(function(label,i){
var colValues = getCombinedColumnValues(label,masterSheet);
ss.getRange(lr, i 1, colValues.length, 1).setValues(colValues); // <-- here
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365564.html
上一篇:玩家停止移動時如何關閉慣性?
