私はいくつかのGoogleスプレッドシートの魔法にGoogleScriptsを使用していますが、自動日付解析が私を狂わせています!私が使用しているシートには、あらゆる種類の日付形式が散らばっています。.getValues()を呼び出すたびにGoogleに日付オブジェクトに変換させるよりも、文字列として扱いたいと思います。多くの検索を行った後でも、Googleがこれらの文字列を自動的に解析するのを停止/無効にする方法を見つけることができません。誰かが方法を知っていますか?
2 に答える
はい、可能ですが、 getValuesを呼び出す前に変更を加え、getDisplayValues()を使用する必要があります。
// do not use getValues(), which will convert dates
var string_data = my_sheet.getRange(...).getDisplayValues();
日付などの限られた場合にのみ表示値を使用する場合は、値と表示の両方をコピーしてから、値が日付であるかどうかをテストし、日付である場合は、代わりに対応する表示を使用します。
// use getDisplayValues() for dates, getValues() otherwise
var string_data = my_sheet.getRange(...).getDisplayValues();
var value_data = my_sheet.getRange(...).getValues();
value_data.forEach(function(row_vals, i) {
row.forEach(function(cell_val, j) {
if(is_date(cell_val)) // see e.g. https://stackoverflow.com/a/17110249/3160967
do_something_with(string_data(i, j));
else
do_something_with(cell_val);
});
});
最後に、シート関数として使用する場合は、関数コードが実行される前に関数呼び出しが自動的にgetValues()を適用するため、上記を変更する必要があります。これを回避するには、https://webapps.stackexchange.com/a/30784で説明されている手法を使用できます
実際には不可能ですが、実行可能な回避策は、補助シートを作成し、ソースシートのすべての値を空の文字列で連結する式を挿入することです。次にgetValues()
、この補助シートで、使用後にスクリプトによって非表示または削除される場合があります。
式は、補助シートのA1にこれを設定するのと同じくらい簡単にすることができます
=ArrayFormula(Sheet1!A:T&"")
この回避策の注意点は、ユーザーが自分の日付にカスタムフォーマットを設定した場合、それらは保持されないということです。しかし、それが重要な場合は、を使用してそれらを取得できますgetNumberFormats()