我在google docs电子表格中有三个脚本。在此电子表格中,在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"));
}
}
答案 0 :(得分:0)
第一种可能性是另一个宏正在覆盖该列 - 值得排除。但是,最可能的问题是您没有将列的格式设置为日期格式。如果是一般格式,则日期显示为您看到的数字。
原因在于它是如何存储的,并且您没有告诉单元格将此数字解释为日期,因此它不会。
我的excel脚本编写不太适合为您提供代码,但如果您确保明确地将列格式化为显示日期,那么您应该没问题。它最初看起来不错的原因是因为当你添加一个日期时它将它视为一个日期,但是如果它没有以定义的格式保存,那么它将以默认值再次打开。
HTH
答案 1 :(得分:0)
按照Schroedinger的说法,尝试将数字格式转换为日期格式
选择要更改的单元格范围:
Ex. H24:H28
在下拉菜单中选择Format-&gt; Number,然后选择您要使用的日期格式。它可能或可能不起作用。
如果这没有区别,则需要将脚本代码中的整数值明确地转换为日期格式(转换可能在之前隐式发生)。
如果你不知道如何在JavaScript中使用类型,那么在这个网站上查找或打开一个新问题是值得的。
答案 2 :(得分:0)
在我的语言环境(英国)中,在PC键盘上输入Ctrl +; (用分号Ctrl键)今天的日期将插入到选定的单元格中(在Col H中)。你可以尝试这个而不是你的第三个脚本。
如果您选择列H并从菜单格式&gt;数字&gt;正常中选择,则日期将作为数字显示(如Schroedingers Cat所述)。相反,选择格式&gt;数字&gt;日期会将所有数字恢复为适合当前电子表格设置的日期格式。