首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Google展开单元格并填充

Google展开单元格并填充
EN

Stack Overflow用户
提问于 2020-05-14 13:25:45
回答 2查看 1.6K关注 0票数 1

我需要一个由其他人维护的表,并执行以下操作(以便我可以导出到csv):

  • 解开所有细胞
  • 向下填充值
  • 合并后的单元格位于多个列中,因此我需要遍历一个范围。

这是太多的手工做,它将需要定期完成。我的javascript和google对象模型知识接近于零,但我知道这是可能的,因为我可以在VBA中这样做。我搜索了,但只能找到VBA/Excel的编程答案。

我如何在谷歌单张中有效地做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2020-05-14 14:17:00

您可以使用breakapart() 班级来完成此操作。我假设合并的范围不是静态的,有多次出现。此脚本将解合并活动工作表中的所有合并区域。

代码语言:javascript
运行
复制
function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).breakApart();
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-05 11:07:48

改编自@lreeder的回答

以下内容在选定的范围内用上面的空白处打断并填充:

代码语言:javascript
运行
复制
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('BreakAndFill')
      .addItem('Break Fill Blank Cells', 'menuItem1')
      .addToUi();
}

function menuItem1() {
  BreakandfillBlankWithAbove()
}

//Breaks range
//Iterates over the range from top to bottom
//and left to right, and fills blank cells 
//with the value right above them.
function BreakandfillBlankWithAbove() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveRange();
  Logger.log('Range height is: ' + range.getHeight());
  var values = range.getValues();
  range.breakApart();
  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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61798539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档