3

在此处输入图像描述

我在谷歌文档电子表格中有三个脚本。在此电子表格中,在column H(或column 8)中,如果我键入x,脚本会将其更改为当天日期。

几天后,每个日期column H都从一个日期变成了一个数字。数字看起来像这样:40492, 40494, 40511

我不确定是什么原因造成的。也许这是我的脚本有问题。我已经把它们贴在下面了。有任何想法吗?

这是第一个:

function onEdit(e) {

  var colorA = "yellow";
  var colorB = "#dddddd";
  var colorC = "#dddddd";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Purchase Orders");
  var range = e.source.getActiveRange();
  var sheetName = SpreadsheetApp.getActiveSheet().getName();

  if (sheetName == "Purchase Orders") {

 // 3 is column C
    if (range.getColumn() == 7 && range.getValue() != "") {
      var r = range.getRow() + 1;
      sheet.getRange("A" + r + ":G" + r).setBackgroundColor(colorC);
    }
  }

    var col = e.source.getActiveRange().getColumn();
    if(col == 8 || col == 7) {
    var rows = sheet.getMaxRows();

    //column C
    var rangeC = sheet.getRange("H1:H"+rows);
    var valuesC = rangeC.getValues();
    //column H range
    var rangeH = sheet.getRange("G1:G"+rows);
    var colorH = rangeH.getBackgroundColors();
    var valuesH = rangeH.getValues();

    //iterate over each row in column C and H
    //then change color
        for (var row = 0; row < valuesC.length; row++) {
          //check for columnC and column H
          var hRow = colorH[row];
          if (valuesC[row][0] != "" && valuesH[row][0] == "") {
            hRow[0] = colorA;
          } else if (valuesH[row][0] != "") {
            hRow[0] = colorB;
      }
        }
    sheet.getRange("G1:G" + rows).setBackgroundColors(colorH);




}
  }

这是第二个:

function onEdit(e) {

  var colorA = "yellow";
  var colorB = "#dddddd";
  var colorC = "#dddddd";
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Purchase Orders");
  var range = e.source.getActiveRange();
  var sheetName = SpreadsheetApp.getActiveSheet().getName();

  if (sheetName == "Purchase Orders") {

 // 3 is column C
    if (range.getColumn() == 3 && range.getValue() != "") {
      sheet.insertRowAfter(range.getRow());
      var r = range.getRow() + 1;
      sheet.getRange("A" + r + ":H" + r).setBackgroundColor(colorC);
    }
  }

    var col = e.source.getActiveRange().getColumn();
    if(col == 3 || col == 8) {
    var rows = sheet.getMaxRows();

    //column C
    var rangeC = sheet.getRange("C1:C"+rows);
    var valuesC = rangeC.getValues();
    //column H range
    var rangeH = sheet.getRange("H1:H"+rows);
    var colorH = rangeH.getBackgroundColors();
    var valuesH = rangeH.getValues();

    //iterate over each row in column C and H
    //then change color
        for (var row = 0; row < valuesC.length; row++) {
          //check for columnC and column H
          var hRow = colorH[row];
          if (valuesC[row][0] != "" && valuesH[row][0] == "") {
            hRow[0] = colorA;
          } else if (valuesH[row][0] != "") {
            hRow[0] = colorB;
      }
        }
    sheet.getRange("H1:H" + rows).setBackgroundColors(colorH);




}
  }

这是第三个:

function onEdit(e) {
  var ss = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
   //1 is A, 2 is B, ... 8 is H
  if (r.getColumn() == 8 && r.getValue() == "x") {
    r.setNumberFormat("MM/dd/yyyy")
    r.setValue(Utilities.formatDate(new Date(), "MST", "yyyy-MM-dd"));

  }  
}  
4

3 回答 3

0

第一种可能性是另一个宏正在覆盖该列 - 值得排除。但是,最可能的问题是您没有将列的格式设置为日期格式。如果它是通用格式,那么日期将显示为您所看到的数字。

原因是它是这样存储的,你没有告诉单元格将此数字解释为日期,所以它没有。

我的 excel 脚本无法为您提供代码,但如果您确保明确格式化列以显示日期,那么您应该没问题。它最初看起来不错的原因是,当您添加一个日期时,它会将其视为一个日期,但如果它没有以定义的格式保存,那么它将以默认值再次打开。

高温高压

于 2011-06-29T08:19:25.757 回答
0

按照薛定谔所说,尝试将数字格式转换为日期格式

选择要更改的单元格范围:

Ex. H24:H28

在下拉菜单中选择格式->数字,然后选择您要使用的日期格式。它可能会或可能不会起作用。

如果这没有什么不同,您将需要将脚本代码中的整数值显式转换为日期格式(转换之前可能已经隐式发生)。

如果您不知道如何在 JavaScript 中转换类型,那么在此站点上查找或打开一个新问题是值得的。

于 2011-12-29T09:30:36.770 回答
0

在我的语言环境(英国)中,在 PC 键盘上键入 Ctrl+;(带有分号的 Ctrl)今天的日期将插入到选定的单元格中(在 Col H 中)。你可以试试这个而不是你的第三个脚本。

如果您选择 H 列并从菜单格式>数字>正常中选择,则日期将显示为数字(如 Schroedingers Cat 所述)。相反,选择格式>数字>日期会将所有数字恢复为适合当前电子表格设置的日期格式。

于 2013-01-17T21:50:52.573 回答