首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用细胞颜色提取数据

用细胞颜色提取数据
EN

Stack Overflow用户
提问于 2021-06-11 21:55:50
回答 1查看 139关注 0票数 1

工作表单元格包含数字。细胞里充满了不同的颜色。我想在列中对那些颜色相同的值​​进行加和。下面是我启动的代码,但没有完成,因为对我来说似乎很麻烦。

代码语言:javascript
复制
function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  
  var bg_1 = sheet.getRange("B3").getBackground();
  var bg_2 = sheet.getRange("B4").getBackground();
  var bg_3 = sheet.getRange("B5").getBackground();
  Logger.log(bg_1); Logger.log(bg_2); Logger.log(bg_3);
  
  var ROW = 7;
  var lr = sheet.getLastRow();
  var d = lr - ROW + 1;
  
  var step_1 = sheet.getRange(ROW, 3, d).getValues().filter(String);
  var step_2 = sheet.getRange(ROW, 4, d).getValues().filter(String);
  var step_3 = sheet.getRange(ROW, 5, d).getValues().filter(String);
  var step_4 = sheet.getRange(ROW, 6, d).getValues().filter(String);
  var step_5 = sheet.getRange(ROW, 7, d).getValues().filter(String);

  var vals = sheet.getRange(ROW, 3, d, 5).getValues();
  var bgs = sheet.getRange(ROW, 3, d, 5).getBackgrounds();
  Logger.log("pause");
}

在我看来,映射函数可以在这里使用。首先获取值、​​和颜色的数组。然后,从颜色数组中,为这三种颜色中的每一种得到3个数组(带有0和1)。然后将这些数组乘以一个值数组,将元素添加到3行中的每一行的5个单元格中。理论上,我理解,但实际上.我寻求帮助。

图中显示了所需的结果。

这里是工作表的链接

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-12 00:38:48

请参阅下面的解决方案。我遍历了每个列,然后使用一个2D数组来存储每个列的值,在背景颜色匹配时添加它们,然后设置列颜色求和。在这之后,继续进入下一篇专栏。

代码:

代码语言:javascript
复制
function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  
  var bg_1 = sheet.getRange("B3").getBackground();
  var bg_2 = sheet.getRange("B4").getBackground();
  var bg_3 = sheet.getRange("B5").getBackground();
  
  // how many colors
  colors = 3
  // C3 (where the data starts)
  startingRow = 7;
  startingColumn = 3;
  // how many rows and columns is the data
  rows = 6;
  columns = 5;

  // get all data
  var data = sheet.getRange(startingRow, startingColumn, rows, columns).getValues();

  // loop the data, but we start from columns then row instead
  for(j=0;j<columns;j++){
    // reset values per column
    values = [[0], [0], [0]];
    for(i=0;i<rows;i++){
      switch(sheet.getRange(i + startingRow, j + startingColumn).getBackground()) {
        // if yellow, add to 1st index
        case bg_1:
          values[0][0] += data[i][j];
          break;
        // if green, add to 2nd index
        case bg_2:
          values[1][0] += data[i][j];
          break;
        // if blue, add to 3rd index
        case bg_3:
          values[2][0] += data[i][j];
          break;
        default:
          break;
      }
    }
    // after processing all values in column, set value of the column per color 
    sheet.getRange(startingRow - 1 - colors, j + startingColumn, colors, 1).setValues(values);
  }
}

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67943857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档