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

时间:2012-09-27 12:53:08

标签: google-apps-script google-sheets

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:44)

  

这样的功能应该已经包含在电子表格程序I中   思考(以及“填补”)。

我将尝试描述GSheets中与此相关的原生功能。

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

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

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

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

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

答案 1 :(得分:8)

使用copyTo。我大部分都会在这里调整the answer I found about this

  var sheet = SpreadsheetApp.getActiveSheet();
  var originRange = sheet.getRange("A1:B1");
  var target = sheet.getRange("A2:B");
  originRange.copyTo(target);

这会将originRange中的公式自动填充/展开到以下所有内容,与copy&糊。

答案 2 :(得分:3)

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(公式) 此函数模仿鼠标拖动公式

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

答案 3 :(得分:3)

这是一个可以自定义菜单添加到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();
}