我有一个电子表格,它的前四列(A、B、C、D)是从单独的主电子表格动态导入的。
列 E、F 旨在根据其左侧列中的动态数据进行静态输入。
A 列包含个人姓名。
我想使用 G 列作为 A 列的静态引用,以确保当 A 到 D 列中的动态数据随着新输入的到达而移动时,可以通过手动剪切和粘贴轻松地将 E 和 F 列中的输入维护在正确的行中或从母版中删除。
为此,我需要一个脚本,当 G 列中的条目与 A 列中的条目匹配(粗体、斜体、为文本着色)时,该脚本“有条件地格式化”这些条目,并且不会与使用剪切和粘贴相关的问题发生冲突谷歌表格中的标准 UI 条件格式,其中剪切和粘贴将“破坏”条件格式范围。
我们将动态列 A 中的值复制到静态列 G,然后使用条件格式引用回 A。
我这里有一个基本脚本(从另一个 stackoverflow 海报中收集),但是它需要一些工作来完成我需要它做的事情。
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A:G");
var values = range.getValues();
//for each row that data is present
for(var i = 0; i < values.length; i++) {
var cell = sheet.getRange(i + 1, 7);
//check if the first value of that row is exactly "Client Name"
if(values[i][0] === "Client Name") {
//if it is, check for "Client Name" in the same row in G [6]. If so, make
it green.
if(values[i][6] === "Client Name") {
cell.setBackground('green');
} else {
cell.setBackground('white');
}
} else {
//In any other case, make it white.
cell.setBackground('white');
}
}
}
我希望脚本检查单元格 A3:A 中的值是否等于 G3:G 中的值,以及它们是否按照指示格式化 G3:G 中的文本。
带有现有脚本的工作表“模型”在这里:
https://docs.google.com/spreadsheets/d/13iPM83I5ecskuBaBin8hepTyBqD29ng0Zp3e6DBcuEk/edit?usp=sharing
感谢所有帮助!
如果您将条件格式设置为使用自定义公式
=AND($G1=$A1, NOT(ISBLANK($A1)))
然后您使用“仅粘贴值”(编辑 > 特殊粘贴或cmd + shift + v
,ctrl
如果在 Windows 上),那么您将不需要脚本。
使用条件格式和粘贴值会快得多。
否则,当 G 列与 A 中的相应值不匹配时,您可以使用此脚本更改列中的格式。
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1"); // getActiveSheet() can yield unexpected results
var rangeA = sheet.getRange("A:A");
var rangeG = sheet.getRange("G:G");
var valuesA = rangeA.getValues();
var valuesG = rangeG.getValues();
var backgrounds = []; // Create an array for the background colors
var fontColors = []; // Create an array for the font colors
//for each row that data is present
for(var i = 0; i < valuesA.length; i++) {
var aValue = valuesA[i][0];
var gValue = valuesG[i][0];
if((aValue != "") && (gValue === aValue)) { // If value in A is NOT blank AND A == G
backgrounds.push(["green"]);
fontColors.push(["white"]);
} else {
backgrounds.push([null]); // Using null will reset the background color formatting
fontColors.push([null]); // Using null will reset the font color formatting
}
}
rangeG.setBackgrounds(backgrounds); // Set the background colors all at once for speed.
rangeG.setFontColors(fontColors); // Set the font colors all at once for speed.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句