【问题标题】:How to remove a blank row in google sheet using google sheets api v4 javascript?如何使用 google sheet api v4 javascript 删除 google sheet 中的空白行?
【发布时间】:2021-06-10 03:39:43
【问题描述】:
var params1 = {
      spreadsheetId: '1g9y32IkyujOupw6O6eRhtlCcwhn5vv9mM_Yr4peRRmo', 
      range: str,
};
    
var clearValuesRequestBody = {
};
    
var request = await gapi.client.sheets.spreadsheets.values.clear(params1, clearValuesRequestBody);

上面的代码是从谷歌表中删除一行。现在,我的问题是如何通过移动其余行从谷歌表中删除该空白行?

【问题讨论】:

    标签: javascript google-sheets-api


    【解决方案1】:

    答案:

    您需要使用 batchUpdate 来执行此操作。

    请求示例:

    {
      "requests": [
        {
          "deleteDimension": {
            "range": {
              "sheetId": sheetId,
              "dimension": "ROWS",
              "startIndex": 0,
              "endIndex": 1
            }
          }
        }
      ]
    }
    

    上述请求将从具有给定 gid 的工作表中删除第一行。

    这些行是 0 索引的,因此从 0 开始到 1 结束将删除第一行。同样,从 8 开始到 18 结束将删除第 9-18 行。

    方法如下:

    gapi.client.sheets.spreadsheets.batchUpdate(resource)
    

    注意:这是spreadsheets.batchUpdate不是 spreadsheets.values.batchUpdate

    现在齐心协力:

    const resource = {
      "requests": [
        {
          "deleteDimension": {
            "range": {
              "sheetId": sheetId,
              "dimension": "ROWS",
              "startIndex": 0,
              "endIndex": 1
            }
          }
        }
      ]
    }
    
    const response = gapi.client.sheets.spreadsheets.batchUpdate({
      "spreadsheetId": "your-spreadsheet-id",
      "resource": resource
    })
      .then(function(response) {
        console.log("Response is: \n", response)
      }, function(err) { 
           console.error("Execute error", err)
         })
    

    为了获得哪些行是空白的,您必须使用spreadsheets.values.get 并手动循环响应。

    响应将采用以下形式;您将需要遍历response.values

    {
      "range": "Sheet1!A1:Z1000",
      "majorDimension": "ROWS",
      "values": [
        [] // each row is an array
      ]
    }
    

    在此示例中,我使用的电子表格如下所示:

    对于此电子表格,response 将是:

    {
      "range": "Sheet1!A1:Z1000",
      "majorDimension": "ROWS",
      "values": [
        [ "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ],
        [ "2", "2", "2", "2", "2", "2", "2", "2", "2", "2" ],
        [ "3", "3", "3", "3", "3", "3", "3", "3", "3", "3" ],
        [ "4", "4", "4", "4", "4", "4", "4", "4", "4", "4" ],
        [],
        [ "6", "6", "6", "6", "6", "6", "6", "6", "6", "6" ],
        [],
        [],
        [ "9", "9", "9", "9", "9", "9", "9", "9", "9", "9" ],
        [ "10", "10", "10", "10", "10", "10", "10", "10", "10", "10" ],
      ]
    }
    

    所以我们只需要检查response.result.values 的哪些元素是空数组: 假设电子表格的列最多为 ZZZ,因此要封装整个范围,您可以提出请求:

    const emptyRows = []
    
    gapi.client.sheets.spreadsheets.values.get({
      "spreadsheetId": "your-spreadsheet-id",
      "range": "A:ZZZ"
    })
      .then(function(response) {
        response.result.values.forEach(function(row, index) {
          if (row.length == 0) emptyRows.push(index)
        })  
      }, function(err) { 
           console.error("Execute error", err)
         })
    

    然后循环遍历这个数组向后,将值传递到前面的batchUpdate 请求中以将它们从工作表中完全删除。重要的是从下往上删除,以免更改行号并意外删除包含数据的行。

    注意:这不会删除最后一个数据行之后的空行,只会删除数据集中的空行。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多