javascript - 如果谷歌表格中的单元格值为空,如何删除整列
问题描述
我是谷歌表格的新手,如果单元格值为空,我想删除整个列。我尝试使用下面的代码片段来做到这一点。但是什么也没有发生,也没有提示任何错误。
function DeletColumn() {
var sheettest = SpreadsheetApp.getActive().getSheetByName("Data");
var lr=sheettest.getLastRow()
var columntest = sheettest.getRange(1, 10, lr).getValues().values;
for(var i=0; i<columntest.length ; i++){
if (columntest[i] ==""){
deleteColumn(i);
}
}
}
解决方案
问题:
sheettest.getRange(1, 10, lr).getValues().values
不返回值而是另一个长度为 0 的对象,因此您的[Function: values]
循环甚至for
在开始之前终止,这就是您没有收到任何错误的原因。删除.values
,您将获得值。deleteColumn(i)
是一个您没有在脚本中任何地方定义的函数,因此它会抛出一个undefined
错误。您不需要使用
for
循环来检查至少一个单元格是否为空。您可以检查单元格是否为空。您可以简单地检查是否columntest
包含至少一个空单元格:columntest.includes('')
解决方案:
function DeletColumn() {
const sheettest = SpreadsheetApp.getActive().getSheetByName("Data");
const colNumber = 10;
const columntest = sheettest.getRange(1, colNumber, sheettest.getLastRow()).getValues().flat();
if(columntest.includes('')){
sheettest.deleteColumn(colNumber);
}
}
数据范围内所有列的更新解决方案:
function DeletColumn() {
const sh = SpreadsheetApp.getActive().getSheetByName("Data");
const values = sh.getDataRange().getValues();
Array(sh.getLastColumn()).fill().map((v,i)=>i).
reverse().forEach(c=>{
let cTemp = values.map(d => d[c]);
if(cTemp.includes('')){
sh.deleteColumn(c+1)
}
});
}
注意:
记住getLastRow()给出了整个工作表中的最后一行内容,而不是特定列 ( J
) 中的内容。例如,如果最后一行的内容在 columnJ
中,15
但在 columnA
中是30
,sheettest.getLastRow()
则将返回30
,假设它包含具有整个工作表内容的最后一行。
推荐阅读
- java - 是否有任何编码可以让我安全地在文件中写入和读取任何 8 位字符代码(整个 256 而不仅仅是 128)?
- javascript - 如何使用 ES6 功能减少 3 个 for 循环以提高 javascript 性能?
- angular - Angular 7 如何在打字稿中使用给定的 API 引用
- python-3.x - 错误:没有为 webdriver 找到匹配的发行版
- javascript - 如何在具有大型数据集的 JavaScript 中使用图表
- c# - 如何修复错误类型“IObjectContainer”都存在于两者中
- ruby-on-rails - 源代码中有图像标签时无法加载图像?
- react-native - React Native 打包器:如何同时拥有平台和视网膜后缀
- javascript - 在vue组件中导入promise时无法设置未定义的属性
- php - mysql 数据库错误:在 null 上调用成员函数 query()