Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Google apps script 填写-用于电子表格的谷歌应用程序脚本_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 填写-用于电子表格的谷歌应用程序脚本

Google apps script 填写-用于电子表格的谷歌应用程序脚本,google-apps-script,google-sheets,Google Apps Script,Google Sheets,是否有一个函数可以将数据填充到上面一行的所有空单元格 如果没有,谁能帮我一个谷歌应用程序脚本(或其他解决方案),可以通过我的谷歌电子表格中的每一行,检查空单元格,如果找到,用上面一行的数据填充它们 我认为这样一个函数应该已经包含在电子表格程序中(以及“填充”) 谢谢大家! 这样的函数应该已经包含在电子表格程序I中 思考(以及“填充”) 我将尝试在GSheet中描述与此相关的本机功能 如果双击选定单元格或区域右下角的蓝色小正方形,将自动将该单元格填充到左侧已填充单元格块的末尾。或者,您可以拖动这个

是否有一个函数可以将数据填充到上面一行的所有空单元格

如果没有,谁能帮我一个谷歌应用程序脚本(或其他解决方案),可以通过我的谷歌电子表格中的每一行,检查空单元格,如果找到,用上面一行的数据填充它们

我认为这样一个函数应该已经包含在电子表格程序中(以及“填充”)

谢谢大家!

这样的函数应该已经包含在电子表格程序I中 思考(以及“填充”)

我将尝试在GSheet中描述与此相关的本机功能

  • 如果双击选定单元格或区域右下角的蓝色小正方形,将自动将该单元格填充到左侧已填充单元格块的末尾。或者,您可以拖动这个蓝色小框(向下、向上、向左或向右)以自动填充

  • 可以选择源单元格及其下方的单元格(请参见第4点),然后按Ctrl+Enter键进行填充。也可以使用Ctrl+Enter或Ctrl+R来填充右侧

  • 您可以选择源单元格,按Ctrl+C键进行复制,然后选择上面的单元格(或左边的单元格,再次参考第4点),然后按Ctrl+V键进行粘贴。这具有填充(或向左)的效果

  • 通过按Ctrl+Shift+Down(或Up、right或left),可以快速选择源单元格下方(或上方、右侧或左侧)的空白单元格。这将带您到达工作表的限制或下一个填充的单元格。如果是后者,则可以按Shift+Up(或Down,或Left,或Right)返回到最后一个空白单元格。然后按照第2点和第3点的要求进行填充

  • 您需要对每个非连续的空白单元格组执行此操作。如果希望能够快速自动填充非连续组的空白单元格,则需要脚本

  • 使用。我将主要适应这里:

    这将自动将
    originRange
    中的公式填充/扩展到以下所有内容,就像复制和粘贴一样

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name");
    var formulas = sheet.getRange(10, 1, 1, 10).getFormulasR1C1();
    var newRange = sheet.getRange(11, 1, 1, 10);
    newRange.setFormulasR1C1(formulas);
    
    使用getFormulasR1C1()然后使用setFormulasR1C1(公式) 此函数模拟鼠标拖动公式


    请注意,如果单元格不包含公式,它将显示错误。您需要通过清空单元格来解决此问题

    这里有一个工作脚本,可以在你的谷歌工作表中添加自定义菜单。加载Google工作表的脚本,在工作表上选择一个区域,然后从自定义菜单中选择“填充空白单元格”。空白单元格将填充上述单元格的值

    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      // Or DocumentApp or FormApp.
      ui.createMenu('Custom Menu')
          .addItem('Fill Blank Cells', 'menuItem1')
          .addToUi();
    }
    
    function menuItem1() {
      fillBlankWithAbove()
    }
    
    //Iterates over the range from top to bottom
    //and left to right, and fills blank cells 
    //with the value right above them.
    function fillBlankWithAbove() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var range = sheet.getActiveRange();
      Logger.log('Range height is: ' + range.getHeight());
      var values = range.getValues();
    
      var width = values[0].length;
      var height = values.length;
      Logger.log('Width is ' + width);
      Logger.log('Height is ' + height);
    
      for (var i = 0; i < width; i++) {
        var lastVal = '';
        for(var j = 0; j < height; j++) {   
          var currValue = values[j][i];
    
          var dataType = typeof(currValue);
          //Empty string check returns true if dataType
          //is a number, and value is zero.  In that case
          //we don't want to overwrite the zero, so only
          //check emptyString for string types.
          if(currValue === undefined || 
             (dataType === 'string' && currValue == '')
            )  {
            //getCell parameters are relative to the current range
            //and ones based
             var cell = range.getCell(j+1, i+1);
             cell.setValue(lastVal);
    
          }
          else {
            lastVal = currValue;
          }
        }
      }
      SpreadsheetApp.flush();
    }
    
    函数onOpen(){ var ui=SpreadsheetApp.getUi(); //或文档或格式。 ui.createMenu(“自定义菜单”) .addItem('填充空白单元格','菜单项1') .addToUi(); } 函数menuItem1(){ 用上面的()填充空格 } //在从上到下的范围内迭代 //并从左向右填充空白单元格 //值正好在它们上面。 函数fillblankwithover(){ var sheet=SpreadsheetApp.getActiveSheet(); var range=sheet.getActiveRange(); Logger.log('范围高度为:'+范围.getHeight()); var values=range.getValues(); 变量宽度=值[0]。长度; 变量高度=值。长度; Logger.log('宽度为'+宽度); Logger.log('高度为'+高度); 对于(变量i=0;i嗯,stackoverflow不是寻找现成代码的地方。因此,请尝试使用文档和教程自己编写一个脚本,如果遇到困难,请发布一个问题。非常相关:嗨,Adam,我从事文档工作已经两年多了,我不知道你在这里描述的所有技巧!所以非常感谢这个有用的总结:-)是的,那里有很好的键盘快捷键!但是,如果一张纸有几百行,天知道其中有多少行是未填充的,那么脚本将是首选。我完全理解如果没有人有时间写这样的脚本,但我想更多的人会喜欢并使用它。今天我只需要拖动右下角的控制柄就行了。所以,你可以用Ctrl+Shift+Down高亮显示整个列,然后按Ctrl+Enter以用最上面一行中的内容填充所选内容。仅供参考(这可能很明显)在OS X上用Ctrl代替命令。我很欣赏非脚本答案,这两个问答可能都偏离主题,但我认为这个答案需要编辑以包含@jtpeterson的评论。Ctrl+D将页面添加为书签(至少在Windows+Chrome上),但Ctrl+Enter是正确的替代方法。通过编辑,这是最好的答案。在我看来,这与填充不同,它只是一次又一次地重复内容。例如,系列1、2、3不应继续重复。@drye如果为true,则其行为类似于复制和粘贴,而不是完全类似于填充。解决这一问题的一种方法是使序列仅为
    1
    =A1+1
    ,并将其应用于公式(A2),它将展开我不确定是否还有其他更好的方法!:(谢谢你的剧本!我得先休息,然后再补
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      // Or DocumentApp or FormApp.
      ui.createMenu('Custom Menu')
          .addItem('Fill Blank Cells', 'menuItem1')
          .addToUi();
    }
    
    function menuItem1() {
      fillBlankWithAbove()
    }
    
    //Iterates over the range from top to bottom
    //and left to right, and fills blank cells 
    //with the value right above them.
    function fillBlankWithAbove() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var range = sheet.getActiveRange();
      Logger.log('Range height is: ' + range.getHeight());
      var values = range.getValues();
    
      var width = values[0].length;
      var height = values.length;
      Logger.log('Width is ' + width);
      Logger.log('Height is ' + height);
    
      for (var i = 0; i < width; i++) {
        var lastVal = '';
        for(var j = 0; j < height; j++) {   
          var currValue = values[j][i];
    
          var dataType = typeof(currValue);
          //Empty string check returns true if dataType
          //is a number, and value is zero.  In that case
          //we don't want to overwrite the zero, so only
          //check emptyString for string types.
          if(currValue === undefined || 
             (dataType === 'string' && currValue == '')
            )  {
            //getCell parameters are relative to the current range
            //and ones based
             var cell = range.getCell(j+1, i+1);
             cell.setValue(lastVal);
    
          }
          else {
            lastVal = currValue;
          }
        }
      }
      SpreadsheetApp.flush();
    }