google-apps-script - 根据列名删除 Google 表格列
问题描述
我有一个来自系统导出的 Google 表格。我想根据名称删除某些列。列不在彼此旁边。
要将所有内容一起删除,我将想要获取范围变量具有特定标题名称的范围。
我遇到了弄清楚如何定义范围然后删除它的问题。
编辑:我不能使用标准的 deleteColumn 方法,因为列的顺序每天都不同。
function deleteColumns() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('data'), true);
spreadsheet.getRange('1:1').activate();
var header = spreadsheet.getRange('1:1');
var deleteValues = (header.getValues());
var counter = 1;
for (i=0; i<header.length; i++) {
if
(
( deleteValues[i] == 'example A') ||
( deleteValues[i] == 'example B') ||
( deleteValues[i] == 'example C') ||
( deleteValues[i] == 'example D') ||
( deleteValues[i] == 'example E')
)
{
spreadsheet.deleteColumn(counter); }
else {
var counter = counter + 1;
}
}}
解决方案
您可以使用方法deleteColumn( column_position )删除列:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// Columns start at "1" - this deletes the first column
sheet.deleteColumn(1);
https://developers.google.com/apps-script/reference/spreadsheet/sheet#deletecolumncolumnposition
在您的情况下,一种方法应该是获取行的范围,其中有列的名称以及 for 循环和一个计数器(从 1 开始,每次检查增加 1)。因此,如果单元格的值与您定义的相同,则列的索引就是计数器的值。IE:
counter = 1;
for (i=0; i<range.length; i++) {
if (deleteValues[i] == 'exampleA' ||
deleteValues[i] == 'exampleB' ||
deleteValues[i] == 'exampleC' ||
deleteValues[i] == 'exampleD') {
sheet.deleteColumn(counter);
} else {
counter = counter + 1;
}
}
编辑:除了一些概念问题之外,您的代码还必须在其他地方进行修改才能正常工作。这是工作代码:
function deleteColumns() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Foglio2'), true);
spreadsheet.getRange('1:1').activate();
var header = spreadsheet.getRange('1:1');
var deleteValues = (header.getValues());
var counter = 1;
for (i=0; i<deleteValues[0].length; i++) {
if
(
deleteValues[0][i] == 'exampleA' ||
deleteValues[0][i] == 'exampleB' ||
deleteValues[0][i] == 'exampleC' ||
deleteValues[0][i] == 'exampleD'
)
{
spreadsheet.deleteColumn(counter); }
else {
counter = counter + 1;
}
}
}
推荐阅读
- java - Android 是否有“onInstall”方法?
- java - 接受右值引用作为参数的方法的 Swig 行为
- python-3.x - 将包含字符串和缺失的列转换为 DateTime
- python - 打印度数符号 (°) 会产生“未知符号”(romb 中的问号)
- c++ - C++ 编译器如何检测非常量函数体?
- ruby-on-rails - 没有路由映射到我的控制器的操作
- r - 使用 R 访问 Facebook 的 API,无需创建应用程序
- c# - 带有 LINQ 查询的长处理方法应该在队列中
- c - 编译步骤
- angular - 即使请求从 Angular 客户端传递访问令牌,Azure AD WebAPI 也会返回 Not Authorization