首页 > 解决方案 > 根据列名删除 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;
    }
        }}

标签: google-apps-scriptgoogle-sheets

解决方案


您可以使用方法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;
    }
  }
}

推荐阅读