Google 电子表格条件格式脚本

问题描述 投票:0回答:4

我正在尝试弄清楚如何在 Google 电子表格上使用条件格式,类似于通过公式在 Excel 中执行的操作。

如果单元格 O2 的值为“X”,我希望单元格 A2 更改为绿色,并且这将在两列上一直向下完成。我知道这需要一个脚本。

我遇到了一个类似的链接,但我不知道如何调整它以满足我的需求。这是可以做的事情吗?

链接:https://webapps.stackexchange.com/questions/16745/google-spreadsheets-conditional-formatting

google-apps-script google-sheets gs-conditional-formatting
4个回答
22
投票

这是一个您可以用来执行您所描述的操作的脚本:

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var columnO = sheet.getRange(2, 15, sheet.getLastRow()-1, 1);
  var oValues = columnO.getValues();

  for (var i = 0; i < oValues.length; i++) {
    if (oValues[i][0] == 'X') {
      sheet.getRange(i + 2, 1, 1, 1).setBackgroundColor('green');
    }
  }
}

12
投票

在新的 Google 表格中,这不再需要脚本。

相反,在条件格式中,选择“自定义公式”选项,然后输入类似

=O2="X"
的值 - 或者实际上返回布尔真/假值的任何表达式。

据我所知,这些自定义脚本中列出的引用有点奇怪,并且应用如下......

如果它是您所选范围内的单元格,则会更改为“突出显示的单元格”。

如果它是所选范围之外的单元格,则它将更改为“该位置,加上与当前单元格到所选范围左上角的偏移量相同的偏移量”。

也就是说,如果您的范围是

A1:B2
,那么上面的操作与在每个单元格上设置单独的格式相同,如下所示:

A1 =O2="X"
A2 =O3="X"
B1 =P2="X"
B2 =P3="X"

您还可以指定固定引用,例如

=$O$2="X"
- 它将检查所选范围内所有单元格的特定单元格 O2。


11
投票

使用最新的Sheet API,您可以通过编程方式向工作表添加条件格式规则以进行突出显示。

您可以添加自定义公式规则,将 A 列中的背景颜色设置为绿色,其中 O 列为“X”,如下所示:

function applyConditionalFormatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  
  var rangeToHighlight = sheet.getRange("A2:A");
  var rule = SpreadsheetApp.newConditionalFormatRule()
      .whenFormulaSatisfied('=INDIRECT("R[0]C[14]", FALSE)="X"')
      .setBackground("green")
      .setRanges([rangeToHighlight])
      .build();

  var rules = sheet.getConditionalFormatRules();
  rules.push(rule);
  sheet.setConditionalFormatRules(rules);
}

条件格式适用的范围是从第 2 行到工作表中最后一行的 A 列。

自定义公式为:

=INDIRECT("R[0]C[14]", FALSE)="X"
这意味着向所选范围列右侧移动 14 列,并检查其值是否为“X”。

O 列距 A 列右侧 14 列。


10
投票

(2017 年 2 月) 正如另一个答案中提到的,Google 表格现在允许用户直接从用户界面添加条件格式,无论是在台式机/笔记本电脑、Android 还是 iOS 设备上。

同样,通过

Google Sheets API v4(及更高版本),开发人员现在可以编写 CRUD 条件格式规则的应用程序。查看 guidesamples 页面了解更多详细信息以及 reference docs(搜索 {add,update,delete}ConditionalFormatRule

)。该指南提供了这个 Python 片段(假设文件 ID 为 
SHEET_ID
SHEETS
 作为 API 服务端点):

myRange = { 'sheetId': 0, 'startRowIndex': 1, 'endRowIndex': 11, 'startColumnIndex': 0, 'endColumnIndex': 4, } reqs = [ {'addConditionalFormatRule': { 'index': 0, 'rule': { 'ranges': [ myRange ], 'booleanRule': { 'format': {'textFormat': {'foregroundColor': {'red': 0.8}}} 'condition': { 'type': 'CUSTOM_FORMULA', 'values': [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}] }, }, }, }}, {'addConditionalFormatRule': { 'index': 0, 'rule': { 'ranges': [ myRange ], 'booleanRule': { 'format': { 'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4} }, 'condition': { 'type': 'CUSTOM_FORMULA', 'values': [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}] }, }, }, }}, ] SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID, body={'requests': reqs}).execute()

除了 Python 之外,Google API 还支持

多种语言,因此您有多种选择。无论如何,该代码示例格式化了一个工作表(见下图),使得那些比中位年龄年轻的人以浅红色突出显示,而那些超过中位年龄的人的数据以红色字体着色。

Conditional formatting example


公共服务公告

最新的 Sheets API 提供了旧版本中不可用的功能,即让开发人员能够以编程方式访问工作表,就像使用用户界面一样(条件格式[!]、冻结行、单元格格式、调整行/列大小、添加数据透视表、创建图表等)。

如果您是 API 新手,并且想要查看更长、更通用的使用 API 的“真实世界”示例,我创建了各种视频和相关博客文章:

正如您所知,Sheets API 主要用于如上所述的面向

文档的功能,但要执行文件级访问,例如上传和下载、导入和导出(与上传和下载相同,但转换为/)来自各种格式),请改用 Google Drive API。使用 Drive API 的示例:

    将 Google 表格导出为 CSV(仅限博客
  • post
  • “穷人的纯文本到 PDF”转换器(仅限博客
  • post)(*)
(*) - TL;DR:将纯文本文件上传到云端硬盘,导入/转换为 Google 文档格式,然后将该文档导出为 PDF。上面的帖子使用 Drive API v2;这个

后续帖子描述了将其迁移到Drive API v3,这里有一个视频结合了两个“穷人的转换器”帖子。

© www.soinside.com 2019 - 2024. All rights reserved.