短い答え
現時点では、変数はGoogleドキュメントの組み込み機能ではありません。Googleドキュメントを拡張するプラットフォームであるGoogle Apps Scriptには、変数を処理するためのクラスまたはメソッドが含まれていません。
代替案
代替案1
1つの選択肢はテキストパターンを使用することですが、更新する日付のみに一致することを確認する必要があります。
代替案2
別の方法は、クラスNamedRangeを使用することですが、
- 範囲を移動すると、名前が失われます1。
- 名前付き範囲のテキストを複数の要素で置き換えると、初めて機能するだけです2。
コード:
次のコードは、Googleドキュメントにバインドされたスクリプトで使用するためのもので、 2つの主要な機能があります。
- 今日の日付を挿入
- 今日の日付を更新
デバッグ目的で使用されています
- 日付のみではなく、日付と時刻。
- メイン機能をトリガーするカスタムメニュー。
「既知の問題」:更新機能により、段落全体が置き換えられます。
コードをテストするには、コードをコピーしてからGoogleドキュメントに移動し、新しいドキュメントを作成して、[ツール]> [スクリプトエディター]をクリックし、[空のプロジェクト]を選択して、コードを貼り付け、プロジェクトを保存し、名前を割り当て、アプリを承認するために時間どおりに実行します、ドキュメントを閉じて再度開きます。「ユーティリティ」という新しいメニューが表示されます。そこからメイン関数を呼び出すことができます。
function onOpen() {
// Add a menu with some items, some separators, and a sub-menu.
DocumentApp.getUi().createMenu('Utilities')
.addItem('Insert Today\'s Date', 'insertTodayAtCursor')
.addItem('Update Today\'s Date', 'setTodayNamedRange')
.addToUi();
}
function todayDate(){
return Utilities.formatDate(new Date(), "GMT-5", "yyyy-MM-dd'T'HH:mm:ss'Z'"); // "yyyy-MM-dd"
}
/**
* Inserts the today's date at the current cursor location and create a NamedRange.
*/
function insertTodayAtCursor() {
var str = 'testToday';
var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
if (cursor) {
// Attempt to insert today's date at the cursor position. If insertion returns null,
// then the cursor's containing element doesn't allow text insertions.
var date = todayDate();
var element = cursor.insertText(date);
if (element) {
var rangeBuilder = doc.newRange();
rangeBuilder.addElement(element);
return doc.addNamedRange(str, rangeBuilder.build());
} else {
DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
}
} else {
DocumentApp.getUi().alert('Cannot find a cursor in the document.');
}
}
function setTodayNamedRange(){
var str = 'testToday';
var doc = DocumentApp.getActiveDocument();
// Retrieve the named range
var namedRanges = doc.getNamedRanges();
var newRange = doc.newRange();
var date = todayDate();
for(var i=0; i<namedRanges.length; i++){
if(namedRanges[i].getName() == str){
var rangeElement = namedRanges[i].getRange().getRangeElements();
for (var j=0; j<rangeElement.length; j++){
var element = rangeElement[j].getElement().asText().editAsText().setText(date);
newRange.addElement(element);
}
}
}
doc.addNamedRange(str, newRange.build());
}
以下に、インスピレーションを得たり、「正しい方向」を指して「解決策」を見つけたりするのに役立つ、さまざまな種類の項目(質問、仕様など)があります。
脚注