填写 - 电子表格的Google Apps脚本

Mil*_*lle 21 google-sheets google-apps-script

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

如果没有,任何人都可以帮助我使用Google Apps脚本(或其他解决方案)来浏览我的Google电子表格中的每一行,检查空单元格,如果找到,请用上面的行填充数据?

这样的功能应该已经包含在我认为的电子表格程序中(并且"填满").

谢谢!

Ada*_*amL 51

这样的功能应该已经包含在我认为的电子表格程序中(并且"填满").

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

  1. 如果双击所选单元格或范围右下角的蓝色小方块,则会自动将该单元格填充到左侧填充单元格块的末尾.或者,您可以将这个小蓝框(向下,向上,向左或向右)拖动到自动填充.

  2. 您可以选择下面的源单元格和单元格(请参阅第4点),然后按Ctrl+ D,以填充.您也可以使用Ctrl+ R填充正确.

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

  4. 您可以按快速选择空白单元格下(或以上,或左或右的)源小区Ctrl+ Shift+ Down(或向上,或向右或向左).这将带您进入工作表的限制或下一个填充的单元格.如果是后者,则可以按Shift+ Up(或向下,或向左或向右)以追溯到最后一个空白单元格.然后根据要求填写第2点和第3点.

  5. 您需要为每个不连续的空白单元组执行此操作.如果您希望能够快速自动填充不连续的空白单元组,那么是的,需要一个脚本.

  • 此外,您可以使用Ctrl + Shift +向下突出显示整列,然后按Ctrl + Enter以使用顶行中的任何内容填充选区.仅供参考(可能很明显)在OS X上替换Ctrl for Command. (5认同)

cre*_*gox 9

使用copyTo.我大部分时间都会调整在这里找到的答案:

  var sheet = SpreadsheetApp.getActiveSheet();
  var originRange = sheet.getRange("A1:B1");
  var target = sheet.getRange("A2:B");
  originRange.copyTo(target);
Run Code Online (Sandbox Code Playgroud)

这将自动填充/扩展公式originRange下面的一切,如复制和粘贴.

  • 在我看来,这与填充不一样,只是一遍又一遍地重复内容.例如,1,2,3系列应继续不重复. (2认同)

小智 5

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);
Run Code Online (Sandbox Code Playgroud)

使用 getFormulasR1C1() 然后 setFormulasR1C1(formulas) 该函数模仿鼠标拖动公式

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


lre*_*der 5

这是一个工作脚本,可将自定义菜单添加到您的Google表格。加载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();
}
Run Code Online (Sandbox Code Playgroud)