0

値を入力するときに単位変換を提供するために、Google App scripting onEdit() イベントを使用する Google スプレッドシートがあります。これは先週まで機能していましたが、機能しなくなったようです。Range setComment() API が非推奨になり、setNote() に変更されたことを除けば、このスクリプトが機能しなくなる理由はわかりません。興味深いことに、実行ログは、動作しているべきであることを暗示しているようですが、セルは更新されません。

[13-06-26 15:29:57:973 BST] Starting execution
[13-06-26 15:29:57:976 BST] Spreadsheet.getActiveSheet() [0 seconds]
[13-06-26 15:29:57:977 BST] Range.getWidth() [0 seconds]
[13-06-26 15:29:57:978 BST] Range.getHeight() [0 seconds]
[13-06-26 15:29:58:151 BST] Range.getValue() [0.173 seconds]
[13-06-26 15:29:58:151 BST] Range.setValue([13.670166224]) [0 seconds]
[13-06-26 15:29:58:151 BST] Range.setNote([Distance Conversion: 22km => 13.670166224]) [0 seconds]
[13-06-26 15:29:58:152 BST] Execution succeeded [0.176 seconds total runtime]

これがコードです。何が変わったのかについてのヒントに感謝します!

function Milify( x )
{
  function convert( str, p1, offset, s )
  {
    // p1 is the matched number
    // 1 kilometre = 0.6a21371192 miles
    return Number(p1) * 0.621371192;
  }

  var s = String( x );
  var test = /(\d+(?:\.\d*)?)km/;
  return s.replace( test, convert );
}
function onEdit( event )
{
  var ss = event.source.getActiveSheet();
  //var er = event.source.getActiveRange();
  var er = event.range;

  //er.setNote( "" );
  //er.setNote( er.getNote() + "\n" + "Trigger Fired for " + er.getA1Notation() + " with " + er.getValue() + " " + er.getWidth() + "x" + er.getHeight() );

  if ( ( er.getWidth() * er.getHeight() ) === 1 )
  {
    var valueOriginal = er.getValue();
    var valueInMiles = Milify( valueOriginal, er );
    er.setValue( valueInMiles );
    er.setNote( "Distance Conversion: " + valueOriginal + " => " + valueInMiles );
  }
}

ありがとう。

4

2 に答える 2

1

これは、こちらのエラーに関連している可能性があります

そのため、er.getValue(); という行を追加することでメリットが得られる場合があります。行 er.setValue( valueInMiles ); の後

今日も同様のことがうまくいきました。

于 2013-06-26T16:28:15.057 に答える
0

グーグルの不具合。現在正常に動作している提供されたコードの非互換性ではありません。

于 2013-06-28T03:35:55.760 に答える