28

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

如果没有,任何人都可以帮助我使用可以遍历我的谷歌电子表格中的每一行的谷歌应用程序脚本(或其他解决方案),检查空单元格,如果找到,用上面行中的数据填充它们?

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

谢谢!

4

4 回答 4

61

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

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

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

  2. 您可以选择源单元格及其下方的单元格(请参阅第 4 点),然后按Ctrl+ Enter, 向下填充。您也可以使用Ctrl+EnterCtrl+R来填充右边。

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

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

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

于 2012-09-27T21:58:04.160 回答
8

这是一个向您的 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();
}
于 2017-03-17T03:22:08.577 回答
7

使用copyTo. 我将主要调整我在这里找到的答案

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

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

于 2014-05-20T13:46:21.487 回答
4
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(formulas) 这个函数模拟鼠标拖动公式

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

于 2017-01-13T15:30:48.187 回答