Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在google工作表中的行之前插入行_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 在google工作表中的行之前插入行

Javascript 在google工作表中的行之前插入行,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个有很多行的谷歌表。为了更好地查看工作表,我希望在单元格a中有数据的每一行之前添加一个空行 我想我需要先使用insertrowsb function Insert() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = ss.getActiveSheet(); s.insertRowsBefore(2, 1); // add 1 row before the 2nd } 当然,这个函数只对第二行起作用,我没有找到

我有一个有很多行的谷歌表。为了更好地查看工作表,我希望在单元格a中有数据的每一行之前添加一个空行

我想我需要先使用insertrowsb

function Insert() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  s.insertRowsBefore(2, 1); // add 1 row before the 2nd
}
当然,这个函数只对第二行起作用,我没有找到一个好的解决方案来对a中的每一行数据都这样做

有人有办法或建议来帮助我吗


:从您的问题和评论中,3个< /P> < P>,我可以理解,对于<代码> [[ Value1 ] ]、[ [ Value2 ] ] [[代码] >,您要插入空白行,如<代码> [[“Value1”],[ [“] ],[“Value2”],[ [“] ],[“Value3”] ] /代码>,并且每个空白行是A列到最后一列。如果我的理解是正确的,这次修改怎么样

修改点:
  • 我认为可以使用for循环的
    insertRowsBefore()
    by作为脚本插入行。但是在这种情况下,当它是大量的行时,处理速度会有点慢。所以我想建议使用Sheets API。这样,您就可以通过一个API调用来实现它
当您使用此修改后的脚本时,请在高级Google服务和API控制台启用Sheets API,如下所示

启用工作表API: 在高级Google服务中启用API v4
  • 关于脚本编辑器
    • 资源->高级谷歌服务
    • 打开GoogleSheetsAPI v4
  • 关于脚本编辑器
    • 资源->云平台项目
    • 查看API控制台
    • 开始时,单击启用API并获取密钥等凭据
    • 在左侧,单击“库”
    • 在搜索API和服务时,输入“工作表”。然后单击GoogleSheetsAPI
    • 单击启用按钮
    • 如果API已经启用,请不要关闭
如果现在使用“使用工作表API的脚本”打开脚本编辑器,则可以通过访问此URL为项目启用工作表API

修改脚本: 输入:

输出:

注:
  • 当这些行没有列“A”的值时,将跳过这些行。
    • 如果您不想跳过它,请删除
      If(e[0]){
      }else{adjustment++;requests.pop();}
参考资料:
  • 高级谷歌服务:
  • 表API v4:
如果我误解了你的问题,我很抱歉

编辑1: 我更改了创建BatchUpdate请求的方法。通过从最后一行创建请求,修改后的脚本变得更简单。我认为通过这种方式,脚本可以满足您想要的输出

function Insert() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
  var sheetId = sheet.getSheetId();
  var offset = 1; // For header
  var requests = [];
  for (var i = values.length - 1; i > offset + 1; i--) {
    if (values[i][0]) {
      requests.push({
        "insertRange": {
          "shiftDimension": "ROWS",
          "range": {
            "sheetId": sheetId,
            "startRowIndex": i,
            "endRowIndex": i + 1
          }
        }
      });
    }
  };
  Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}
编辑2: 此修改的脚本为添加的新空行提供while颜色。为此,使用了


从您的问题和评论中,我可以理解,对于<代码> [[ Value1 ] ]、[ [ Value2 ] ] [[代码] >,您要插入空白行,如<代码> [[“Value1”]、[ [“] ]、[“Value2”]、[ [“] ]、[ [ Value3 ] ] < /COD>,并且每个空行是A列到最后一列。如果我的理解是正确的,这次修改怎么样

修改点:
  • 我认为可以使用for循环的
    insertRowsBefore()
    by作为脚本插入行。但是在这种情况下,当它是大量的行时,处理速度会有点慢。所以我想建议使用Sheets API。这样,您就可以通过一个API调用来实现它
当您使用此修改后的脚本时,请在高级Google服务和API控制台启用Sheets API,如下所示

启用工作表API: 在高级Google服务中启用API v4
  • 关于脚本编辑器
    • 资源->高级谷歌服务
    • 打开GoogleSheetsAPI v4
  • 关于脚本编辑器
    • 资源->云平台项目
    • 查看API控制台
    • 开始时,单击启用API并获取密钥等凭据
    • 在左侧,单击“库”
    • 在搜索API和服务时,输入“工作表”。然后单击GoogleSheetsAPI
    • 单击启用按钮
    • 如果API已经启用,请不要关闭
如果现在使用“使用工作表API的脚本”打开脚本编辑器,则可以通过访问此URL为项目启用工作表API

修改脚本: 输入:

输出:

注:
  • 当这些行没有列“A”的值时,将跳过这些行。
    • 如果您不想跳过它,请删除
      If(e[0]){
      }else{adjustment++;requests.pop();}
参考资料:
  • 高级谷歌服务:
  • 表API v4:
如果我误解了你的问题,我很抱歉

编辑1: 我更改了创建BatchUpdate请求的方法。通过从最后一行创建请求,修改后的脚本变得更简单。我认为通过这种方式,脚本可以满足您想要的输出

function Insert() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
  var sheetId = sheet.getSheetId();
  var offset = 1; // For header
  var requests = [];
  for (var i = values.length - 1; i > offset + 1; i--) {
    if (values[i][0]) {
      requests.push({
        "insertRange": {
          "shiftDimension": "ROWS",
          "range": {
            "sheetId": sheetId,
            "startRowIndex": i,
            "endRowIndex": i + 1
          }
        }
      });
    }
  };
  Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}
编辑2: 此修改的脚本为添加的新空行提供while颜色。为此,使用了


为什么不在每一行上循环,如果你看到一些数据,你就添加这一行,我可以问一下你想要的输出吗?您希望在列a处有值的每一行之前插入一个空行。例如,当存在值
[[“value1”]、[“value2”]、[“value3”]
时,您希望添加空格,如
[[“value1”]、[“”]、[“value2”]、[“”]、[“value3”]
。我的理解正确吗?如果它是正确的,在您的情况下,您希望为其他专栏做什么?我很抱歉我的英语水平很差。@Tanaike我试着做类似的事情。从第一列到最后一列的空白行。谢谢您的回复。我张贴了我的答案。请确认。为什么不在每一行上循环,如果你看到一些数据,你就添加这一行。我可以问一下你想要的输出吗?您希望在列a处有值的每一行之前插入一个空行。例如,当存在值
[[“value1”]、[“value2”]、[”
function Insert() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
  var sheetId = sheet.getSheetId();
  var offset = 1; // For header
  var requests = [];
  for (var i = values.length - 1; i > offset + 1; i--) {
    if (values[i][0]) {
      requests.push({
        "insertRange": {
          "shiftDimension": "ROWS",
          "range": {
            "sheetId": sheetId,
            "startRowIndex": i,
            "endRowIndex": i + 1
          }
        }
      });
      requests.push({ // Give color to new blank row.
        "repeatCell": {
          "cell": {
            "userEnteredFormat": {
              "backgroundColor": {
                "red": 1,
                "green": 1,
                "blue": 1,
              }
            }
          },
          "range": {
            "sheetId": sheetId,
            "startRowIndex": i,
            "endRowIndex": i + 1
          },
          "fields": "*"
        }
      });
    }
  };
  Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}