在单个电子表格中对多个工作表中的彩色单元格进行计数
Count colored cells in multiple sheets in a single Spreadsheet
我在Google有高手sheet 传播sheet如下;
我想要的是从 google spreadsheet 中给定的 tab/sheets(A 列)中获取颜色计数。根据我对 Whosebug 的研究,我发现代码在活动单曲中运行完美 sheet ();
function countColoredCells(countRange,colorRef) {
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
var backgrounds = activeSheet.getRange(countRange).getBackgrounds();
var colorRefBackground = activeSheet.getRange(colorRef).getBackground();
var count = 0;
for(var i=0;i<backgrounds.length;i++)
for(var j=0;j<backgrounds[0].length;j++)
if( backgrounds[i][j] == colorRefBackground )
count=count+1;
return count;
};
但我无法添加 sheet 名称(单元格值)作为参数。例如;要参考 B1 在给定范围内获得 sheet2 种颜色,我的函数可以是:
countColoredCells(countRange,colorRef,sheet_name) > countColoredCells(F1:F30,B1,A2)
该函数查找将搜索哪个 sheets' 范围和 return 来自主 excel 中参考颜色的计数值。有人可以帮我怎么做吗?
更新
这是修改后的代码,但我仍然收到“找不到范围错误”
function countColoredCells(countRange,colorRef,sheetName) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(sheetName));
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
var backgrounds = activeSheet.getRange(countRange).getBackgrounds();
var colorRefBackground = activeSheet.getRange(colorRef).getBackground();
var count = 0;
for(var i=0;i<backgrounds.length;i++)
for(var j=0;j<backgrounds[0].length;j++)
if( backgrounds[i][j] == colorRefBackground )
count=count+1;
return count;
}
列中的背景颜色计数
默认为活跃价差sheet、活跃sheet和第1列
function getBGColorCount(col, sh, ss) {
var ss = ss || SpreadsheetApp.getActive();
var sh = sh || SpreadsheetApp.getActiveSheet();
var col = col || 1;
const bgs = sh.getRange(1, col, sh.getMaxRows()).getBackgrounds().flat();
let colors = { pA: [] };
bgs.forEach((c, i) => {
if (!colors.hasOwnProperty(c)) {
colors[c] = 1;
colors.pA.push(c);
} else {
colors[c] += 1;
}
});
let html = '<style>td,th{border:1px solid black;width:25px;}</style><table>';
//add this to remove white filter(p => p != "#ffffff")
colors.pA.forEach(p => {
html += `<tr><td style="background-color:${p};"></td><td>${colors[p]}</td></tr>`;
});
html += '</table>'
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), 'Color Count');
}
多张纸
function getBGColorCountMultipleSheets(col, shts, ss) {
var ss = ss || SpreadsheetApp.getActive();
var shts = shts || ['Sheet1', 'Sheet2', 'Sheet0'];
var col = col || 1;
let colors = { pA: [] };
ss.getSheets().filter(s => ~shts.indexOf(s.getName())).forEach(sh => {
let bgs = sh.getRange(1, col, sh.getMaxRows()).getBackgrounds().flat();
bgs.forEach((c, i) => {
if (!colors.hasOwnProperty(c)) {
colors[c] = 1;
colors.pA.push(c);
} else {
colors[c] += 1;
}
});
});
let html = '<style>td,th{border:1px solid black;width:25px;}</style><table>';
//add this to remove white filter(p => p != "#ffffff")
colors.pA.forEach(p => {
html += `<tr><td style="background-color:${p};"></td><td>${colors[p]}</td></tr>`;
});
html += '</table>'
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), 'Color Count');
}
在你原来的函数中,只需更改var backgrounds = activeSheet.getRange(countRange).getBackgrounds();
到
const backgrounds = SpreadsheetApp.getActive()
.getSheetByName(sheetName)
.getRange(countRange)
.getBackgrounds();
这是在单个 google 电子表格中对多个工作表中的彩色单元格进行计数的工作代码:
function goToSheet(countRange,colorRef,sheetName) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(sheetName));
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
const backgrounds = SpreadsheetApp.getActive()
.getSheetByName(sheetName)
.getRange(countRange)
.getBackgrounds();
var colorRefBackground = activeSheet.getRange(colorRef).getBackgrounds();
var count = 0;
for(var i=0;i<backgrounds.length;i++)
for(var j=0;j<backgrounds[0].length;j++)
if( backgrounds[i][j] == colorRefBackground )
count=count+1;
return count;
}
感谢用户
https://whosebug.com/users/8404453/themaster谁帮我实现的,我也改变了
var colorRefBackground = activeSheet.getRange(colorRef).getBackground()
到
var colorRefBackground = activeSheet.getRange(colorRef).getBackgrounds()
范围内单元格的背景颜色returns。
我在Google有高手sheet 传播sheet如下;
我想要的是从 google spreadsheet 中给定的 tab/sheets(A 列)中获取颜色计数。根据我对 Whosebug 的研究,我发现代码在活动单曲中运行完美 sheet ();
function countColoredCells(countRange,colorRef) {
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
var backgrounds = activeSheet.getRange(countRange).getBackgrounds();
var colorRefBackground = activeSheet.getRange(colorRef).getBackground();
var count = 0;
for(var i=0;i<backgrounds.length;i++)
for(var j=0;j<backgrounds[0].length;j++)
if( backgrounds[i][j] == colorRefBackground )
count=count+1;
return count;
};
但我无法添加 sheet 名称(单元格值)作为参数。例如;要参考 B1 在给定范围内获得 sheet2 种颜色,我的函数可以是:
countColoredCells(countRange,colorRef,sheet_name) > countColoredCells(F1:F30,B1,A2)
该函数查找将搜索哪个 sheets' 范围和 return 来自主 excel 中参考颜色的计数值。有人可以帮我怎么做吗?
更新
这是修改后的代码,但我仍然收到“找不到范围错误”
function countColoredCells(countRange,colorRef,sheetName) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(sheetName));
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
var backgrounds = activeSheet.getRange(countRange).getBackgrounds();
var colorRefBackground = activeSheet.getRange(colorRef).getBackground();
var count = 0;
for(var i=0;i<backgrounds.length;i++)
for(var j=0;j<backgrounds[0].length;j++)
if( backgrounds[i][j] == colorRefBackground )
count=count+1;
return count;
}
列中的背景颜色计数
默认为活跃价差sheet、活跃sheet和第1列
function getBGColorCount(col, sh, ss) {
var ss = ss || SpreadsheetApp.getActive();
var sh = sh || SpreadsheetApp.getActiveSheet();
var col = col || 1;
const bgs = sh.getRange(1, col, sh.getMaxRows()).getBackgrounds().flat();
let colors = { pA: [] };
bgs.forEach((c, i) => {
if (!colors.hasOwnProperty(c)) {
colors[c] = 1;
colors.pA.push(c);
} else {
colors[c] += 1;
}
});
let html = '<style>td,th{border:1px solid black;width:25px;}</style><table>';
//add this to remove white filter(p => p != "#ffffff")
colors.pA.forEach(p => {
html += `<tr><td style="background-color:${p};"></td><td>${colors[p]}</td></tr>`;
});
html += '</table>'
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), 'Color Count');
}
多张纸
function getBGColorCountMultipleSheets(col, shts, ss) {
var ss = ss || SpreadsheetApp.getActive();
var shts = shts || ['Sheet1', 'Sheet2', 'Sheet0'];
var col = col || 1;
let colors = { pA: [] };
ss.getSheets().filter(s => ~shts.indexOf(s.getName())).forEach(sh => {
let bgs = sh.getRange(1, col, sh.getMaxRows()).getBackgrounds().flat();
bgs.forEach((c, i) => {
if (!colors.hasOwnProperty(c)) {
colors[c] = 1;
colors.pA.push(c);
} else {
colors[c] += 1;
}
});
});
let html = '<style>td,th{border:1px solid black;width:25px;}</style><table>';
//add this to remove white filter(p => p != "#ffffff")
colors.pA.forEach(p => {
html += `<tr><td style="background-color:${p};"></td><td>${colors[p]}</td></tr>`;
});
html += '</table>'
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(html), 'Color Count');
}
在你原来的函数中,只需更改var backgrounds = activeSheet.getRange(countRange).getBackgrounds();
到
const backgrounds = SpreadsheetApp.getActive()
.getSheetByName(sheetName)
.getRange(countRange)
.getBackgrounds();
这是在单个 google 电子表格中对多个工作表中的彩色单元格进行计数的工作代码:
function goToSheet(countRange,colorRef,sheetName) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(sheetName));
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
const backgrounds = SpreadsheetApp.getActive()
.getSheetByName(sheetName)
.getRange(countRange)
.getBackgrounds();
var colorRefBackground = activeSheet.getRange(colorRef).getBackgrounds();
var count = 0;
for(var i=0;i<backgrounds.length;i++)
for(var j=0;j<backgrounds[0].length;j++)
if( backgrounds[i][j] == colorRefBackground )
count=count+1;
return count;
}
感谢用户 https://whosebug.com/users/8404453/themaster谁帮我实现的,我也改变了
var colorRefBackground = activeSheet.getRange(colorRef).getBackground()
到
var colorRefBackground = activeSheet.getRange(colorRef).getBackgrounds()
范围内单元格的背景颜色returns。