因此,我们都假定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....
}
如何访问用于读取的单元格并访问用于写入的不同单元格?
预先感谢您的帮助!
答案 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。
// (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)。您可以实现“恢复”脚本操作的方法,以便您重新运行该脚本并在中断的地方继续执行,以免妨碍操作。