当前位置: 首页 > 知识库问答 >
问题:

基于列名删除Google Sheets列

秦钟展
2023-03-14

我有一个系统导出的谷歌表。我想根据名称删除某些列。这些列没有并排排列。

要一起删除所有内容,我想获取range,其中range变量具有特定的头名称。

我遇到了一个问题,即如何定义一个范围,然后将其删除。

编辑:我不能使用标准的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;
    }
        }}

共有1个答案

岳承悦
2023-03-14

可以使用方法deleteColumn(column\u 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)。因此,如果单元格的值与您定义的值相同,则列的索引就是计数器的值。即:

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;
    }
  }
}
 类似资料:
  • 问题内容: 我使用以下方式列出了重复项: 现在,如何删除除一条消息以外的所有消息(我正在尝试删除重复项,以便可以在上应用唯一索引)。 问题答案: 使用和分配行号,以便删除重复对中除一个以外的所有行。

  • 问题内容: 在我们的系统中,我们每小时从外部数据库导入一次。由于导入脚本中的错误,现在有一些重复的记录。 如果任何记录具有和,则视为重复。 我可以运行什么代码来查找和删除这些重复项? 我在玩这个: 它似乎返回了一些重复项,但是我不确定如何从那里删除? 有任何想法吗? 问题答案: 您可以尝试以下方法: 还是纯sql:

  • 我有一个这样的数据帧(): 我想基本上删除重复记录,以便字段是唯一的。我不关心被丢弃的记录,在这种情况下,地址已经被删除,所以唯一通过的是拼写错误。我想要以下结果的数据框: 在R中,基本上是这样做的: 但是我需要一种方法在熊猫身上做到这一点。

  • 我有以下数据帧: 我需要删除等于的行。最有效的方法是什么?

  • 我有一个数据集,我想根据该行的2或列值从数据框中删除行。例如-我有关于美国所有电视节目的数据帧,我需要根据电视节目的季节和剧集删除电视节目的特定行。就像我需要删除高谭市电视台的行,但只删除包含第四季和第十集的行。 如果我能在这方面得到帮助,我将不胜感激。

  • 我有这样一个数据帧: 我如何摆脱第四行,因为它有sq_resid的最大值?注意:最大值将从一个数据集更改到另一个数据集,所以仅仅删除第4行是不够的。 我已经尝试了一些方法,比如我可以删除像下面这样留下数据帧的最大值,但是无法删除整行。