3

ここに画像の説明を入力

Google ドキュメントのスプレッドシートに 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);




}
  }

これが2番目のものです:

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);




}
  }

これが3番目のものです:

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

シュレーディンガーが言ったことに従って、数値形式を日付形式にキャストしてみてください

変更するセルの範囲を選択します。

Ex. H24:H28

ドロップダウンメニューで、[形式]-> [数値]を選択してから、使用する日付形式を選択します。動作する場合と動作しない場合があります。

それでも違いがない場合は、スクリプトコードの整数値を日付形式に明示的にキャストする必要があります(変換は以前は暗黙的に行われていた可能性があります)。

JavaScriptで型をキャストする方法がわからない場合は、このサイトで新しい質問を検索または開くことをお勧めします。

于 2011-12-29T09:30:36.770 に答える
0

私のロケール (英国) では、PC キーボードで Ctrl+; と入力します。(セミコロンで Ctrl) 今日の日付が選択されたセル (列 H) に挿入されます。3 番目のスクリプトではなく、これを試すことができます。

列 H を選択し、メニューから Format>Number>normal を選択すると、日付が数値として表示されます (Schroedingers Cat が述べているように)。逆に、[形式] > [数値] > [日付] を選択すると、すべての数値が現在のスプレッドシート設定に適した日付形式に戻されます。

于 2013-01-17T21:50:52.573 に答える
0

最初の可能性は、別のマクロが列を上書きしているということです - 除外する価値があります。ただし、最も可能性の高い問題は、列の形式を日付形式に設定していないことです。一般的な形式の場合、日付はご覧のように数字で表示されます。

その理由は、これが保存方法であり、この数値を日付として解釈するようにセルに指示していないためです。

私の Excel スクリプトは、コードを提供するほどではありませんが、列を明示的に書式設定して日付を表示するようにすれば、問題ありません。最初は問題ないように見える理由は、日付を追加すると日付として表示されるためですが、定義された形式で保存されていない場合は、デフォルトで再び開きます。

HTH

于 2011-06-29T08:19:25.757 に答える