在Google表格中,我尝试创建一个脚本,该脚本将从活动单元格中获取值并将该值粘贴到包含字符串“ HR”的B列中的任何单元格中。有什么想法吗?
答案 0 :(得分:0)
这还不错;您只需要围绕Apps脚本和Javascript的一些概念来提高效率即可。但是首先让我们从天真的方法开始!
function firstTry() {
var activeSheet = SpreadsheetApp.getActiveSheet(); // whatever is open
var activeCell = SpreadsheetApp.getCurrentCell(); // this is a single-cell range
var activeCellValue = activeCell.getValue(); // could be a string, number, etc
// Now let's look in column B for stuff to change
for (var i = 1; i <= activeSheet.getLastRow(); i++) {
var cell = activeSheet.getRange("B" + i);
var val = cell.getValue();
var valStr = String(val); // We could have gotten a number
if (valStr.indexOf("HR") != -1) {
cell.setValue(activeCellValue);
}
}
}
这可能会起作用,但效率不高:每次调用getValue()或setValue()都需要一些时间。最好一次获取所有值,然后在我们满意的时候粘贴修改后的B列:
function improvement() {
var activeSheet = SpreadsheetApp.getActiveSheet(); // whatever is open
var activeCell = SpreadsheetApp.getCurrentCell(); // this is a single-cell range
var activeCellValue = activeCell.getValue(); // could be a string, number, etc
// Now let's look in column B for stuff to change
var rowsWithData = activeSheet.getLastRow() - 1;
var colBRange = activeSheet.getRange(1, // start on row 1
2, // start on column 2
rowsWithData, // this many rows
1); // just one column
// Let's get the data as an array of arrays. JS arrays are 0-based, btw
var colBData = colBRange.getValues();
for (var i = 0; i < colBData.length; i++) {
var val = colBData[i][0]; // row i, first column
var valStr = String(val); // We might have gotten a number
if (valStr.indexOf("HR") != -1) {
colBData[i][0] = activeCellValue; // modify copied data
}
}
// Lastly, write column B back out
colBRange.setValues(colBData);
}
您可以使用高级过滤器功能,而不是显式地遍历数据,但这会变得越来越不清楚。
注意事项,如OP在下面的注释中所指出的那样,像这样盲目地调用setValues
将覆盖您拥有的所有公式。除了包括超链接之外,这没什么大不了的。您可以通过与getFormulas
并行调用getValues
来真正参与其中,然后根据原始内容决定是调用setValue
还是setFormula
每个单元格。