在gdocs电子表格中单击时构建一个更改单元格颜色的脚本

时间:2012-12-31 09:23:15

标签: google-apps-script spreadsheet google-docs google-sheets google-drive-api

与标题建议一样,我需要google docs / drive上的一个函数,当单击特定单元格时,该函数会更改电子表格中单元格的颜色。它需要循环通过四种预定义的颜色。

我还需要移动设备或至少ipad的这个功能。我对如何在移动设备上加载脚本毫无头绪......

有关使用可点击的,颜色更改的单元格而不是docs / drive获取电子表格的其他建议,欢迎使用!

2 个答案:

答案 0 :(得分:1)

使用数据验证创建一个下拉列表,仅允许来自该列表的输入。然后使用条件格式设置使四个菜单项中的每一个都改变单元格的背景颜色。

转到电子表格,确保选中所需的单元格。在菜单栏上,转到日期>验证。将标准更改为“列表中的项目”。输入列表项“红色,绿色,蓝色,橙色”。选中“在下拉菜单中显示项目列表”。取消选中“允许无效数据,但会显示警告”。保存更改,并在单元格仍处于选中状态的情况下,继续进行菜单栏格式化>条件格式设置。使用包含这样的标准的文本... '文字包含'“{你会在这里输入,让我们说红色}”然后在背景旁边放一个复选标记,然后在最后一个框中选择你希望单元格改变的颜色(在这种情况下,红色)。您可以为此条件格式添加更多行(即 - 对于绿色和蓝色以及橙色,最后一部分也是如此)。

答案 1 :(得分:1)

以下是使用反映电子表格中的值的UI应用的示例。网格和小部件具有默认大小。基础数据的假定值为0 -3。在示例中,电子表格未更新 - 对于实际实现,如果需要并发更新,则需要使用锁定。这在ipad上按预期工作。

function doGet() {
    var colours = ["white","green","blue","red"];  // background colour names referenced by offset 0,1,2,3
    var app = UiApp.createApplication();
    var grid = app.createFlexTable();  // the grid for ui
    var ss=SpreadsheetApp.openById('your spreadsheet id here')      ;  // your spreadsheet
    var data = ss.getSheets()[0].getDataRange().getValues();  // all the data on sheet 0  (valid values correspond to colour offset)
    var handler = app.createServerHandler('myClickHandler');  
    // fill the grid with text widgets, all using same clickhandler, set colour according to current data value of cell, Tag carries value to server handler
    for (i=0;i<data.length;i++){
      for (j=0;j<data[i].length;j++){
        var widget = app.createTextBox().setText(data[i][j]).addClickHandler(handler).setId("CellR"+i+"C"+j).setTag(data[i][j]).setStyleAttribute("background-color", colours[data[i][j]]);
        grid.setWidget(i, j, widget);
      }
    }
    app.add(grid);
    return app;
    // need to update the spreadsheet to match tag values before closing app!
    }

  function myClickHandler(e) {
    var colours = ["white","green","blue","red"];
    var app = UiApp.getActiveApplication();
    var colourvalue = parseInt(e.parameter[e.parameter.source+"_tag"] )+ 1; // gets the current tag value of clicked widget and increments it
    if (colourvalue > 3) {
      colourvalue = 0;   // reset at 4
    };
    // update the widget
    app.getElementById(e.parameter.source).setStyleAttribute("background-color", colours[colourvalue]).setText(colourvalue).setTag(colourvalue);
    return app;
  }