是否有一个函数可以将数据填充到上面一行中的所有空单元格?
如果没有,任何人都可以帮助我使用Google Apps脚本(或其他解决方案)来浏览我的Google电子表格中的每一行,检查空单元格,如果找到,请用上面一行中的数据填写它们?
这样的功能应该已经包含在我认为的电子表格程序中(并且“填满”)。
谢谢!
答案 0 :(得分:44)
这样的功能应该已经包含在电子表格程序I中 思考(以及“填补”)。
我将尝试描述GSheets中与此相关的原生功能。
如果双击所选单元格或范围右下方的蓝色小方块,则会自动将该单元格填充到左侧填充单元格块的末尾。或者,您可以将这个小蓝框(向下,向上,向左或向右)拖动到自动填充。
您可以选择下面的源单元格和单元格(请参阅第4点),然后按 Ctrl + D 来填充。您也可以使用 Ctrl + R 填写右侧。
您可以选择源单元格,按 Ctrl + C 进行复制,然后选择上方的单元格(或左侧 - 再次参考第4点) ),然后按 Ctrl + V 进行粘贴。这具有填充(或左)的效果。
您可以通过按 Ctrl + Shift + 向下(或向上,向右或向左)。这将带您进入工作表的限制或下一个填充的单元格。如果是后者,则可以按 Shift + Up (或向下,或向左或向右)以回溯到最后一个空白单元格。然后根据要求填写第2点和第3点。
您需要为每个不连续的空白单元组执行此操作。如果您希望能够快速自动填充不连续的空白单元组,那么是的,需要一个脚本。
答案 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();
}