所以我有一个OnEdit函数,当用户从列表中选择一种颜色时,单元格的背景颜色即成为该选定值。
这可以正常工作,但是当数据复制并粘贴到电子表格以及用户编辑单元格时,我试图获取立即更新单元格背景色的功能。当前,当您将数据复制并粘贴到表中时,我编写的用于更改单元格背景色的代码不会触发,因为没有任何内容被“编辑”。我试图使代码适用于OnEdit,以及何时将数据复制并粘贴到工作表中。任何想法将不胜感激!谢谢!
这是我到目前为止所拥有的..
// Validates the colours using the above map and changes the cell background to the input colour..
function onEdit(e) {
try {
var range = e.range;
var sheet = range.getSheet();
var tabColumnData = getColumnData(sheet);
if(!tabColumnData.hasOwnProperty('Color')) return;
var col = range.getColumn();
if (col == tabColumnData['Color'] + 1) {
var color = e.value;
if(validateCellValue(color) || COLOR_TO_HEX_MAP.hasOwnProperty(color)) {
range.setBackground(color);
} else {
range.clear();
SpreadsheetApp.getUi().alert('Please select a color from the list or a hex color code.');
}
}
if (col == tabColumnData['Name'] + 1) {
setDataValidation(createColorList());
}
} catch(e) {
Logger.log(e);
}
}
// Sets the data validation when the spreadsheet is opened.
function onOpen(e){
setDataValidation(createColorList());
}
阅读您的问题后,我假设以下内容:
如果我的假设正确,则可以使用以下示例满足您的要求:
function onEdit(e) {
var firstRow = e.range.getLastRow() - e.range.getHeight() + 1;
var firstColumn = e.range.getLastColumn() - e.range.getWidth() + 1;
var values = e.range.getValues();
for (var i = 0; i < e.range.getHeight(); i++) {
for (var j = 0; j < e.range.getWidth(); j++) {
try {
e.source.getActiveSheet().getRange(firstRow + i, firstColumn + j)
.setBackground(values[i][j]);
} catch (e) {
// You might want some error handling or logging here
}
}
}
}
该代码将在每次编辑一个或一组单元格时运行。当检测到版本时,代码将迭代每个单元格并尝试将其背景色更改为单元格的内容。
onEdit
触发器的限制,如果修改是通过脚本进行的(与用户编辑相反),则此代码将无法运行。onEdit(event object)
简单触发getLastColumn()
/ getLastRow()
getHeight()
/ getWidth()
setBackground(color)
请不要犹豫,将任何其他疑问寄给我,或要求我进一步澄清。
先前的代码将仅在已编辑的单元格上迭代,而不会在所有工作表上迭代。此行为将在所有电子表格上发生。如果要在特定范围内减少效果(例如categorycolor列),则需要一个条件语句来检查修改后的单元格是否在所需范围内。
要解决这种情况的第一步是创建一个命名的范围作为描述在这里。在此示例中,我使用了name ColourRange
,但是您可以更改代码以设置自己的命名范围。将此作为可能的解决方案之一:
function onEdit(e) {
// Colour range
var colourRange = SpreadsheetApp.getActiveSheet().getRange('ColourRange');
var firstColourRow = colourRange.getRow();
var lastColourRow = colourRange.getLastRow();
var firstColourColumn = colourRange.getColumn();
var lastColourColumn = colourRange.getLastColumn();
// Modified range
var firstRow = e.range.getLastRow() - e.range.getHeight() + 1;
var firstColumn = e.range.getLastColumn() - e.range.getWidth() + 1;
var values = e.range.getValues();
for (var i = 0; i < e.range.getHeight(); i++) {
for (var j = 0; j < e.range.getWidth(); j++) {
var modifiedCell = e.source.getActiveSheet().getRange(firstRow + i,
firstColumn + j);
if (modifiedCell.getRow() >= firstColourRow && modifiedCell
.getLastRow() <= lastColourRow && modifiedCell.getColumn() >=
firstColourColumn && modifiedCell.getLastColumn() <= lastColourColumn) {
try {
e.source.getActiveSheet().getRange(firstRow + i, firstColumn + j)
.setBackground(values[i][j]);
} catch (e) {
// You might want some error handling or logging here
}
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句