如何使用Google表格在一个单元格中读取数据并将数据写入另一个单元格?

时间:2019-10-16 04:36:10

标签: google-sheets-api

因此,我们都假定B列中填充了多个简短的语句。在整个列中,这些语句可以使用一次以上,而不是全部使用或仅使用一次。我希望能够使用Google表格脚本编辑器读取B列每个单元格中的内容,并在F列中为其分配一个类别。我将提供一些伪代码,说明我通常将如何执行此操作。

for (var i = 0; i < statements.length; i++) {
  if (statements[i] == 'Description One') {
     category[i] = 'Category One';
  }
  else if (statements[i] == 'Description Two') {
     category[i] = 'Category Two';
  }
  // and so on for all known categories....
}

如何访问用于读取的单元格并访问用于写入的不同单元格?

预先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

好了,所以在对这个问题再想一想之后,我找到了解决方案。超级简单,尽管很乏味

function assignCategory(description) {
  if (description == 'Description One') {
    return 'Category One';
  }
  // and so on for all known categories
}

希望你们能看到并获得帮助,如果你们想到一种更有效,更容易维护的方式,那就尽一切办法。

答案 1 :(得分:0)

假设一个工作表(例如this)具有标题和六个不同的列(其中B为描述,F为类别);您可以使用字典按如下方式转换值:

// (description -> category) dictionary
var translations = {
  "cooking": "Cooking",
  "sports": "Sport",
  "leisure": "Leisure",
  "music": "Music",
  "others": "Other"
}

function assignCategories() {
  var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
  for (var i=2; i<=dataRange.getNumRows(); i++) {
    var description = dataRange.getCell(i, 2).getValue();
    var category = translations[description];
    dataRange.getCell(i, 6).setValue(category);
  }
}

如果您需要其他裁决(例如,必须将“ 包含”板球归类为运动的描述),则可以通过实现自己的自定义函数并使用字符串函数(例如{{ 3}})或indexOf

使用indexOf

// (description -> category) dictionary
var translations = {
  "cooking": "Cooking",
  "sports": "Sport",
  "leisure": "Leisure",
  "music": "Music",
  "others": "Other"
}

function assignCategories() {
  var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
  for (var i=2; i<=dataRange.getNumRows(); i++) {
    var description = dataRange.getCell(i, 2).getValue()
    var category = assignCategory(description);
    if (category) dataRange.getCell(i, 6).setValue(category);
  }
}

function assignCategory(description) {
  description = description.toLowerCase();
  var keys = Object.keys(translations);
  for (var i=0; i<categories.length; i++) {
    var currentKey = keys[i];
    if (description.indexOf(currentKey) > -1)
      return translations[currentKey];
  }
}

此版本更加复杂。它将使每行的“描述”变为小写,以便更好地与您的字典进行比较,并且还使用indexOf来检查描述中是否存在“翻译键”,而不是检查是否完全匹配。

但是,您应该知道此方法会相当慢,并且脚本可能会超时(请参见regular expressions)。您可以实现“恢复”脚本操作的方法,以便您重新运行该脚本并在中断的地方继续执行,以免妨碍操作。