如何改变多个单元格值在谷歌表通过应用程序脚本
How to change multiple cell values in Google Sheets via Apps Script?
我想写一个脚本来格式化打印的生产计划。我想输入单个字母,然后运行脚本将这些单个字母更改为单词,并使用边框等设置单元格的格式。
下面的if/else if/else操作可以满足我对单个单元格的要求:
var TESTalpha = printCHSheet.getRange(4, 5, 1, 1);
var TESTalphaData = TESTalpha.getValue();
if (TESTalphaData == 'f') {
TESTalpha.clear();
TESTalpha.setValue('FAB').setBorder(true, true, true, true, true, true);
} else if (TESTalphaData == 'p') {
TESTalpha.clear();
TESTalpha.setValue('PAINT').setBorder(true, true, true, true, true, true);
} else if (TESTalphaData == 'c') {
TESTalpha.clear();
TESTalpha.setValue('FINISH').setBorder(true, true, true, true, true, true);
} else {
TESTalpha.setValue(null);
}
最终我想将此应用于行和列中的一系列单元格,但首先我试图评估单行上的五个单元格。
下面的循环运行,但是用它找到的最后一个值替换每个单元格(供参考…5个单元格E4:I4用f/f/p/c/c):
填充 var TESTalpha = printCHSheet.getRange(4, 5, 1, 5);
var TESTlength = TESTalpha.getLastColumn();
var TESTalphaData = TESTalpha.getValues();
for (var i=0; i < TESTlength+1; i++) {
if (TESTalphaData[0][i] == "f") {
TESTalpha.clear();
TESTalpha.setValue("FAB");
} else if (TESTalphaData[0][i] == "p") {
TESTalpha.clear();
TESTalpha.setValue("PAINT");
} else if (TESTalphaData[0][i] == "c") {
TESTalpha.clear();
TESTalpha.setValue("FINISH");
}
}
我在这里得到的结果是,范围E4:I4中的所有单元格都设置为FAB;然后开始画画;然后全部设置完成。相反,我想要的是FAB/FAB/PAINT/FINISH/FINISH。我知道上面的脚本正在替换所有的细胞,因为我正在编程,但我的各种修改都失败了,所以我把它贴在这里,可能朝着正确的方向前进。
我的另一个想法是运行一个循环来拼接数组,然后清除范围并设置(或push)由循环修改的新数组:
var TESTalpha = spreadsheet.getRange("E4:I4");
var TESTlength = TESTalpha.getLastColumn();
for (var i=0; i < TESTlength+1; i++) {
var TESTalphaData = TESTalpha.getValues();
if (TESTalphaData[0][i] == "f") {
TESTalphaData.splice([i], 1, "FAB");
} else if (TESTalphaData[0][i] == "p") {
TESTalphaData.splice([i], 1, "PAINT");
} else if (TESTalphaData[0][i] == "c") {
TESTalphaData.splice([i], 1, "FINISH");
}
spreadsheet.getRange("E4:I4").clear();
spreadsheet.getRange("E4:I4").setValues(TESTalphaData);
}
上面的问题是(至少)它是一个2D数组,但我试图像字符串的1D数组一样拼接。
我也试过开关,但没有成功。
提前感谢您的帮助!
不要只是复制和使用它,它有注释,这样你就知道下次怎么做了:
var TESTalpha = spreadsheet.getRange("E4:I4"),
TESTalphaData = TESTalpha.getValues();
var col = TESTalphaData[0].length; // use a meaningful name for a variable
while( --col >= 0 ) {
// Make the tests and assign the variable the array you pulled from the sheet with getValues(), it's exactly the same you need to input with setValues()
if (TESTalphaData[0][col ] == "f") {
TESTalphaData[0][col] = 'FAB';
} else if (TESTalphaData[0][col] == "p") {
TESTalphaData[0][col] = "PAINT";
} else if (TESTalphaData[0][col] == "c") {
TESTalphaData[0][col] = "FINISH";
}
// Setting the values should be after the loop is complete, so I removed it from inside the for (now a while), to the end of the code
}
// No need to get the Ranges again, you already save it up there
// No need to clear the range, it will all be re-written again
TESTalpha.setValues(TESTalphaData);
部分答案(仍然需要帮助,仅在包含值的单元格周围设置边框)。这个while
循环在另一个while
中改变了由行和列组成的多维数组的值。非常感谢@Kriggs。
var TESTalpha = printCHSheet.getRange(4, 5, 7, 7),
TESTalphaData = TESTalpha.getValues(),
rowOp = TESTalpha.getNumRows();
while ( --rowOp >= 0 ) {
var col = TESTalphaData[rowOp].length;
while( --col >= 0 ) {
if (TESTalphaData[rowOp][col] == "f") {
TESTalphaData[rowOp][col] = "FAB";
} else if (TESTalphaData[rowOp][col] == "p") {
TESTalphaData[rowOp][col] = "PAINT";
} else if (TESTalphaData[rowOp][col] == "c") {
TESTalphaData[rowOp][col] = "FINISH";
}
}
}
TESTalpha.setValues(TESTalphaData);
事情是,TESTalphaData是一个数组,所以我不能设置它的边界。我可以用TESTalpha设置边界(b/c它是一个范围),但然后我得到的边界正好是每行7个单元格(正如我定义的范围)。
我怎么能运行另一个循环做这样的事情(这不起作用)?if (rangeX != null) {rangeX.setBorder(true, true, true, true, true, true);
再次,一个范围不会检查值,但我不能设置值的边界,因为它们存在于数组中,除了单元格。
非常感谢您的帮助!
可以了!for
循环中的for
循环设置边界,如果单元格的空白为假——换句话说,如果它被填充。
for (var r = 4; r < 50; r++) {
for (var c = 5; c < 21; c++) {
var singleCell = printCHSheet.getRange(r, c, 1, 1);
var singleCellBlank = singleCell.isBlank();
if ( !singleCellBlank ) {
singleCell.setBorder(true, true, true, true, true, true)
}
}
}
我心花怒放。现在我所要做的就是格式化一些字体,将其他字母添加到else if
评估中,等等,我就完成了!
- 使用<ahref>使用谷歌脚本在谷歌表单GUI中标记
- 如何从谷歌脚本中获取JS变量
- 什么'这个谷歌脚本错了
- 如何使用谷歌脚本将html表单数据保存到谷歌电子表格中
- 在谷歌脚本中重新触发触发器
- 谷歌脚本在第二次调用Gmail后返回null
- 我可以在谷歌脚本编辑器(谷歌应用程序脚本)中调试JavaScript代码吗
- 将名称添加到上次编辑(谷歌脚本)
- 如何在谷歌脚本中使用函数.getLastRow()
- 在html中使用谷歌脚本api
- 谷歌脚本-从网站论坛解析HTML-并将数据写入工作表
- 谷歌脚本查看文本是否包含值
- 谷歌脚本在5分钟后删除电子表格行
- 谷歌脚本javascript中的谷歌函数=importhtml解析问题
- 谷歌脚本创建了两个电子表格,而不是一个
- 简单的谷歌脚本,将A列的内容复制到B列
- 谷歌脚本在对象中找不到函数LastIndexOf
- 谷歌脚本如果文件名包含x字符串日志“;x被发现“;缺少括号
- 加速谷歌脚本中的onEdit功能-有时没有响应
- 谷歌脚本从code.gs返回到index.html