2011-01-24 60 views
4

enter image description hereGoogle文档更改日期

我有三个脚本在Google文档电子表格中。在此电子表格的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")); 

    } 
} 
+1

这些都是运行onEdit的三个单独的函数?或者连续三次尝试编写相同的函数? 日期是一次一次更改为数字,还是一次全部更改为数字?当你编辑文档时,他们是否改为数字,或者当你没有打开文档时是否神秘地改变了它们? – 2011-01-26 19:48:01

回答

0

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

原因是这是它的存储方式,而且你没有告诉单元将这个数字解释为日期,所以它不会。

我的excel脚本并不完全支持你的代码,但是如果你确定你明确地格式化了colum来显示日期,那么你应该没问题。它最初看起来不错的原因是因为当你添加一个日期时,它将它看作一个日期,但是如果它没有用定义的格式保存,那么它将会以默认值再次打开。

HTH

0

按照什么薛定谔说,尝试铸造数字格式的日期格式

选择要更改的单元格区域:

Ex. H24:H28 

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

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

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

0

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

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