ezu*_*zuk 46 google-sheets google-apps-script
我在Google表格(activerange)中选择了一系列单元格.我想迭代该范围内的每个单元格,并在末尾添加一个字符串.字符串始终相同,可以硬编码到函数中.
这似乎是一件非常简单的事情,但我现在已经搞乱了一小时的代码并且无法获得任何有用的东西,并且文档实际上没有帮助.
这就是我现在拥有的.我不编码JS(我知道VBA,对所有有帮助的人......).
function appendString() {
var range = SpreadsheetApp.getActiveSheet().getActiveRange();
for (var i = 0; i < range.length; i++) {
var currentValue = range[i].getValue();
var withString = currentValue + " string";
range[i].setValue(withString);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 84
你可以尝试这样的事情:
function appendString() {
var range = SpreadsheetApp.getActiveSheet().getActiveRange();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 1; i <= numRows; i++) {
for (var j = 1; j <= numCols; j++) {
var currentValue = range.getCell(i,j).getValue();
var withString = currentValue + " string";
range.getCell(i,j).setValue(withString);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Voy*_*Voy 20
或者使用setValues(),它同时写入所有值.似乎执行得更快.
var range = SpreadsheetApp.getActiveSheet().getActiveRange();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
var writeValues = []
for (var i = 1; i <= numRows; i++) {
var row = []
for (var j = 1; j <= numCols; j++) {
var currentValue = range.getCell(i,j).getValue();
var withString = currentValue + " string";
row.push(withString)
}
writeValues.push(row)
}
range.setValues(writeValues)
Run Code Online (Sandbox Code Playgroud)
Ste*_*amm 10
编辑 2020 年 3 月:您现在可以使用现代 ECMAScript。如果您启用 V8 运行时,这将起作用:
function appendString() {
const range = SpreadsheetApp.getActiveSheet().getActiveRange();
const values = range.getValues();
const modified = values.map(row => row.map(currentValue => currentValue + " string"));
range.setValues(modified);
}
Run Code Online (Sandbox Code Playgroud)
如果您必须使用较旧的 Javascript 版本,您可以:
function appendString() {
var range = SpreadsheetApp.getActiveSheet().getActiveRange();
var values = range.getValues();
values.forEach(function(row, rowId) {
row.forEach(function(col, colId) {
values[rowId][colId] += " string";
});
});
range.setValues(values);
}
Run Code Online (Sandbox Code Playgroud)
请注意,rowId并且colId是从零开始的。在接受的答案中,索引是基于一个的。或者您map不使用箭头运算符使用:
function appendString() {
var range = SpreadsheetApp.getActiveSheet().getActiveRange();
var values = range.getValues();
var modified = values.map(function (row) {
return row.map(function (col) {
return col + " string";
});
})
range.setValues(modified);
}
Run Code Online (Sandbox Code Playgroud)
这是Voy 帖子的更新,使用range.getValues()获取所有值并省略临时数组。应该更快,因为range.getCell().getValue()在二维循环中被省略了。请注意,索引从此0代码段开始。我也发现这更具可读性。
var cells = range.getValues();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 0; i < numRows; i++) {
for (var j = 0; j < numCols; j++) {
cells[i][j] += " string";
}
}
range.setValues(cells);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59536 次 |
| 最近记录: |