Google表格:基于其他单元格样式的条件格式

时间:2020-04-27 15:54:09

标签: google-sheets google-sheets-formula

我正在尝试基于另一个工作表中的单元格在Google工作表中创建选择列表。这些单元格包含我的列表应显示的所有值。

它运作良好,但我也想检索这些单元格的样式以及值。因此,在我的主表中,根据选择的值,从“源”单元格中复制样式。

我知道我可以设置条件格式,因此如果值是X或Y或ZI可以应用样式,但是由于要更新“源”单元格,因此我还必须更新那些条件,即过程缓慢。

我想知道是否有一种方法可以动态地复制另一个单元格的样式。

这是我的源单元格的一个示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

使用Apps脚本,您可以创建一个onEdit trigger来执行以下操作:

  • 根据范围内的值跟踪对包含数据验证的单元格的更改。
  • 如果已编辑的单元格包含此数据验证,请在源范围中查找与所选值相对应的值。
  • 将源范围内的单元格格式复制并粘贴到所选单元格中。

为此,只需选择工具>脚本编辑器来创建绑定脚本,然后复制以下代码并保存项目。

代码示例(检查注释):

const onEdit = e => {
  // Get information on edited cell (column, row, value):
  const range = e.range;
  const column = range.getColumn();
  const row = range.getRow();
  const value = range.getValue();
  // Check that edited cell contains a validation rule and that its criteria type is "VALUE_IN_RANGE":
  const validation = range.getDataValidation();  
  if (validation && validation.getCriteriaType() == "VALUE_IN_RANGE") {
    const sourceRange = validation.getCriteriaValues()[0]; // Get range validation is based on
    // In source range, get index of the cell that corresponds to selected value in edited cell:
    const values = sourceRange.getValues();
    let i, j;
    for (i = 0; i < values.length; i++) {
      j = values[i].indexOf(value);
      if (j != -1) break;      
    }    
    const rangeToCopy = sourceRange.getSheet().getRange(sourceRange.getRow() + i, sourceRange.getColumn() + j); // Get cell in source range to copy format
    rangeToCopy.copyFormatToRange(range.getSheet(), column, column, row, row); // Copy format to edited cell
  }
}

enter image description here

参考:

相关问题