基于日期调整字体样式的脚本也会覆盖单元格中的公式

时间:2018-01-25 00:41:41

标签: javascript google-apps-script google-sheets

我正在使用电子表格进行调度,并保持干净我使用的脚本将根据日期更改行字体样式,因此如果日期已经过去,则字体将变为斜体,变为灰色,并有直通。该脚本运行良好,但在使用时会覆盖电子表格中的所有公式。有没有办法编辑公式,所以它不会影响某些单元格? (对于尚未发生日期的行,它不应该执行任何操作。)

这是我正在使用的脚本:

function formatOnDate() {
  var sh = SpreadsheetApp.getActive().getActiveSheet();
  var range = sh.getDataRange();
  var data = range.getValues();
  var color = '#AAA';// value you want
  var style = 'italic';// value you want
  var line = 'line-through';// value you want
  var fontColors = range.getFontColors();// get all font colors
  var fontLines = range.getFontLines();// lines
  var fontStyles = range.getFontStyles();//style
  var today = new Date();// include today in sheet

  //var today = new Date(new Date().setDate(new Date().getDate()-1));// exclude today... uncomment the one you use
  for(var n=1 ; n<data.length ; n++){ // start on row 2 so that headers are not changed
    if(data[n][0] < today){
      for(var c in data[0]){
        fontColors[n][c]=color;//set format
        fontLines[n][c]=line;//set format
        fontStyles[n][c]=style;//set format

      }
    }
  }
  //sh.getRange(1,1,data.length,data[0].length).clear();
  // now update sheet with new data and style
  sh.getRange(1,1,data.length,data[0].length).setValues(data).setFontColors(fontColors).setFontLines(fontLines).setFontStyles(fontStyles);
}

是否可以在不覆盖单元格中的公式的情况下调整字体样式?是否可以不影响尚未发生的日期的行?如果没有,是否可能不影响某些列? (列N-Q是具有公式的列)。

1 个答案:

答案 0 :(得分:0)

在您的脚本中,data未被修改。此外,fontColorsfontLinesfontStyles的数组长度也不会被修改。那么这个修改怎么样?

此修改后的脚本不会覆盖数据。只有FontColors,FontLines和FontStyles会反映到range。所以每个细胞的配方都不会受到影响。

来自:

sh.getRange(1,1,data.length,data[0].length).setValues(data).setFontColors(fontColors).setFontLines(fontLines).setFontStyles(fontStyles);

致:

range.setFontColors(fontColors).setFontLines(fontLines).setFontStyles(fontStyles);

如果我误解了你的问题,我很抱歉。