0

データを入力するためのフォームを持つ他の誰かのためにスプレッドシートを設定しています。列の1つは日付を保持することになっています。入力日付の形式は次の例のようになります:「2013年1月26日」(データの収集には多くのコピーアンドペーストが必要になるため、入力ステップで形式を変更することは実際のオプションではありません)。

この日付列を並べ替え可能にする必要がありますが、スプレッドシートはこれを日付としてではなく、単に文字列として認識します。(「2013年1月26日」を認識しますので、試してみました。)入力日を再フォーマットする必要があります。

私の質問は:どうすればこれを行うことができますか?私は周りを見回しましたが、Google Apps Scriptは進むべき道のように見えます(ただし、再フォーマットの良い例はまだ見つかりませんでした)。残念ながら、私の唯一のプログラミング経験はPythonであり、中級レベルです。Pythonで問題なく実行できましたが、JavaScriptはわかりません。(私のPythonアプローチは次のようになります:

splitted = date.split()
newdate = "-".join([splitted[0], splitted[1][:-1], splitted[2]])
return newdate

)。

また、スクリプトをスプレッドシートにリンクする方法もわかりません。セル、フォーム、または場所にスクリプトを添付しますか?そしてどうやって?この点に関する有用で理解しやすいチュートリアルなどへのリンクは大いに役立ちます。

どんな助けでも大歓迎です!

編集:これが私が最終的に得たコードです:

//Function to filter unwanted " chars from date entries
function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startrow = 2;
  var firstcolumn = 6;
  var columnspan = 1;
  var lastrow = sheet.getLastRow();
  var dates = sheet.getRange(startrow, firstcolumn, lastrow, columnspan).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
    try
      {
      var newdate = mydate.replace(/"/g,'');
      }
    catch(err)
      {
      var newdate = mydate
      }
     newdates.push([newdate]);
  }
  sheet.getRange(startrow, firstcolumn, lastrow, columnspan).setValues(newdates)
}

私のような他の混乱したgoogle-script初心者の場合:

  • スクリプトをスプレッドシートに添付すると、スプレッドシート内からスクリプトを作成できます([ツール] => [スクリプトエディター])。そこに関数を入れるだけで十分で、関数呼び出しなどは必要ないようです。

  • スクリプトエディタからスクリプトのトリガーを選択します([リソース] => [このプロジェクトのトリガー])。

重要:スクリプトは、問題のシートの下部に空の行がある場合にのみ機能します。

4

2 に答える 2

2

ただのアイデア:

スプレッドシートで日付文字列をダブルクリックすると、日付オブジェクトではなく文字列になる実際の値が、ここでは追加しなかった文字列の前にあることがわかり'Jan 26, 2013 ます'...(フォーム+322475 など、テキスト領域に必要なものを入力できるようにするためです...たとえば、電話番号の場合、これはスプレッドシートのセルの既知のトリックです)フォームの送信時に実行されるスクリプトを作成し、それは'セル内の

を削除するには、メソッド **'を使用するだけです.replace()

var newValue = value.replace(/'/g,'');

関連ドキュメントへのリンクを次に示します。link1 link2


あなたのコメントに続いて編集してください:

replace一致が見つからない場合はエラーが生成されないため、より簡単になる可能性があります。したがって、次のようにすることができます。

function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dates = sheet.getRange(2, 6, sheet.getLastRow(), 1).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
      var newdate = mydate.replace(/"/g,'');
     newdates.push([newdate]);
  }
  sheet.getRange(2, 6, sheet.getLastRow(), 1).setValues(newdates)
}

また、"おそらく意図的に、コードで を使用しました...'代わりに私のテストが表示されました。この選択をした理由は何ですか?

于 2013-02-21T21:18:45.707 に答える
1

解決しました。コンマをドットに変更するだけでうまくいきました

于 2017-01-04T10:30:13.503 に答える