从另一个 Google Sheet 获取条件格式数据(颜色)
Get Conditional Formatting Data (color) from another Google Sheet
在 sheet 1 中,我有一个条件规则,如果单元格有数据则显示为红色,如果单元格为空则显示为绿色。
在sheet 2中,我使用公式=Sheet1!A1
从sheet 1中检索对应的sheet 2单元格中的数据。但是,我只想检索单元格颜色而不是数据值。
如何从单元格而不是数据中检索颜色?
根据您的情况,我认为需要使用 Google Apps 脚本。那么,例如,下面的示例脚本怎么样?
示例脚本:
请将以下脚本复制并粘贴到电子表格的脚本编辑器中并保存脚本。
const GETCOLOR = range => SpreadsheetApp.getActiveSpreadsheet().getRange(range).getBackgrounds();
function onEdit(e) {
const sheet = e.source.getActiveSheet();
if (sheet.getSheetName() != "Sheet1") return;
const f = "=GETCOLOR";
const t = "=sample";
[[f, t], [t, f]].forEach(([a, b]) => e.source.createTextFinder(`^\${a}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(b));
}
当您使用此脚本时,请将=GETCOLOR("Sheet1!A1")
和=GETCOLOR("Sheet1!A1:B10")
的公式作为自定义函数。这样,背景颜色作为十六进制值返回。
关于新增的功能onEdit
,来自In sheet 1 I have a conditional rule that displays the cell as red if it has data or green if it is empty.
,在这种情况下,我认为当编辑单元格并更改背景颜色时,您可能想要更新 GETCOLOR
的自定义函数。为了实现这一点,我使用了onEdit
。编辑“Sheet1”的单元格时,更新GETCOLOR
的自定义函数。
注:
如果要将背景色从源范围复制粘贴到目标范围,下面的示例脚本怎么样?当您使用脚本编辑器运行此脚本时,背景颜色被复制。
function sample() {
const srcRange = "Sheet1!A1"; // Please set the source range as the A1Notation.
const dstRange = "Sheet2!A1"; // Please set the destination range as the A1Notation.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const bk = ss.getRange(srcRange).getBackgrounds();
ss.getRange(dstRange).offset(0, 0, bk.length, bk[0].length).setBackgrounds(bk);
}
参考:
在 sheet 1 中,我有一个条件规则,如果单元格有数据则显示为红色,如果单元格为空则显示为绿色。
在sheet 2中,我使用公式=Sheet1!A1
从sheet 1中检索对应的sheet 2单元格中的数据。但是,我只想检索单元格颜色而不是数据值。
如何从单元格而不是数据中检索颜色?
根据您的情况,我认为需要使用 Google Apps 脚本。那么,例如,下面的示例脚本怎么样?
示例脚本:
请将以下脚本复制并粘贴到电子表格的脚本编辑器中并保存脚本。
const GETCOLOR = range => SpreadsheetApp.getActiveSpreadsheet().getRange(range).getBackgrounds();
function onEdit(e) {
const sheet = e.source.getActiveSheet();
if (sheet.getSheetName() != "Sheet1") return;
const f = "=GETCOLOR";
const t = "=sample";
[[f, t], [t, f]].forEach(([a, b]) => e.source.createTextFinder(`^\${a}`).matchFormulaText(true).useRegularExpression(true).replaceAllWith(b));
}
当您使用此脚本时,请将
=GETCOLOR("Sheet1!A1")
和=GETCOLOR("Sheet1!A1:B10")
的公式作为自定义函数。这样,背景颜色作为十六进制值返回。关于新增的功能
onEdit
,来自In sheet 1 I have a conditional rule that displays the cell as red if it has data or green if it is empty.
,在这种情况下,我认为当编辑单元格并更改背景颜色时,您可能想要更新GETCOLOR
的自定义函数。为了实现这一点,我使用了onEdit
。编辑“Sheet1”的单元格时,更新GETCOLOR
的自定义函数。
注:
如果要将背景色从源范围复制粘贴到目标范围,下面的示例脚本怎么样?当您使用脚本编辑器运行此脚本时,背景颜色被复制。
function sample() { const srcRange = "Sheet1!A1"; // Please set the source range as the A1Notation. const dstRange = "Sheet2!A1"; // Please set the destination range as the A1Notation. const ss = SpreadsheetApp.getActiveSpreadsheet(); const bk = ss.getRange(srcRange).getBackgrounds(); ss.getRange(dstRange).offset(0, 0, bk.length, bk[0].length).setBackgrounds(bk); }