仅在空白单元格中设置公式

时间:2017-08-16 15:39:27

标签: google-apps-script

我需要设置一个特定的公式,但只能在空白单元格中。 这是代码,我不需要得到“0”,我不需要一个值:我需要一个公式!

这是我想要的公式:

//formula "codice ditta" colonna D   
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 var cell = sheet.getRange('D2:D'+sheet.getLastRow());
 cell.setFormula('=IFERROR(INDEX(CO.Contatti!A:A;MATCH(E2;CO.Contatti!B:B;0)))')  

这是我得到公式的代码。 (不是setValues而是setFormula ......)

function onOpen() {
SpreadsheetApp.getUi().createMenu("Zeros")
.addItem("Sheet", "zeroSheet")
.addToUi();      
}   
function zeroSheet() {
var sheet = SpreadsheetApp.getActiveSheet();
var data, range;
var lastRow = sheet.getMaxRows();
var lastColumn = sheet.getMaxColumns();    
range = sheet.getRange(2, 4, (lastRow-1), 1);
data = range.getValues();
range.setValues( data.map( function(row) {
return row.map( function(cell) {
return !cell ? 0 : cell;
});
}));
}

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的。我主要使用你的代码。

function setFormulaInBlankCells() 
{
  var sheet=SpreadsheetApp.getActiveSheet();
  var lastRow=sheet.getMaxRows();
  var lastColumn=sheet.getMaxColumns();    
  var range=sheet.getRange(2, 4, (lastRow-1), 1);
  var data=range.getValues();
  for(var i=0;i<data.length;i++)
  {
    if(!data[i][0])
    {
      sheet.getRange(i+1,4).setFormula('=IFERROR(INDEX(CO.Contatti!A:A;MATCH(E2;CO.Contatti!B:B;0)))'); 
     //data[i][0]='=IFERROR(INDEX(CO.Contatti!A:A;MATCH(E2;CO.Contatti!B:B;0)))'; I have actually done this in the past and it will work this way. But your call.
    }
  }
  //range.setValues(data);//If you use commented code you'll need this.  It runs much faster.
}

更新后的版本,其中的单元格会更新当前的行

function setFormulaInBlankCells() 
{
  var sheet=SpreadsheetApp.getActiveSheet();
  var lastRow=sheet.getMaxRows();
  var lastColumn=sheet.getMaxColumns();    
  var range=sheet.getRange('D2:D'+sheet.getLastRow());
  var data=range.getValues();
  for(var i=0;i<data.length;i++)
  {
    if(!data[i][0])
    {
      var A1=sheet.getRange(i+1,5).getA1Notation();
      var formula='=IFERROR(INDEX(CO.Contatti!A:A;MATCH(' + A1 + ';CO.Contatti!B:B;0)))'
      sheet.getRange(i+1,4).setFormula(formula); 
    }
  }
}
相关问题