1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
解決方案:
您可以使用使用getBackground()的自定義公式來(lái)獲取單元格背景顏色的十六進(jìn)制值,并根據(jù)顏色和點(diǎn)之間的映射計(jì)算點(diǎn)的總數(shù):
function getPoints(row, column) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getActiveSheet();
const start_cell = sh.getDataRange().getCell(row, column);
const cells_range = start_cell.offset(0, 0, 1, 3);
const cells_bg = cells_range.getBackgrounds().flat();
const colors_src_range = sh.getRange('C1:E1');
const colors_source = colors_src_range.getBackgrounds().flat();
const colors_pts = colors_src_range.getValues().flat().map(cv=>cv.replace( /^\D+/g, ''));
var total_pts = 0;
cells_bg.forEach(cbg=>{
colors_source.forEach( (col,index)=>{
total_pts += cbg == col ? parseInt(colors_pts[index]) : 0
});})
return total_pts;
}
然后您可以將它用作工作表中的公式:getPoints(row, column)
為此您需要指定具有顏色的最左側(cè)單元格的坐標(biāo)(在您的示例中為 C 列),它將返回顏色行的總點(diǎn)數(shù)。
更新:
腳本會(huì)自動(dòng)從范圍中獲取十六進(jìn)制值
C1:E1
,因此您無(wú)需手動(dòng)傳遞這些值。每種顏色的點(diǎn)數(shù)也由腳本使用正則表達(dá)式自動(dòng)拾取。
代碼更加優(yōu)化,因?yàn)樗褂?a >getBackgrounds()而不是getBackground()。
例子:
例如,這個(gè)公式:
=getPoints(row(C6),column(C6))
將導(dǎo)致:
添加回答
舉報(bào)