Googleスプレッドシートでシートを開くたびにIMPORTXMLデータを更新する際に問題があります。
Importxml関数は、Googleスプレッドシートを開くたびに実行されますか?これをオフにする方法はありますか?シートを開くたびにデータが更新されるのは望ましくありません。更新をいつ行う必要があるかを制御する方法が必ずあるはずです。
ImportXMLの自動更新を無効にする組み込みの方法はないと思いますが、ここに回避策があります。スクリプトエディターに以下のスクリプトを入力します。スプレッドシートを次に開いたときに、[カスタム]> [インポートしたデータを更新]という新しいメニュー項目が追加されます。
ImportXML数式をシートの最初の行に配置し、それらの前にバックティックを付けて、すぐに認識されないようにします。
`=importXML("http://cnn.com", "//div")
これはそれ自体では何もしません。ただし、「インポートされたデータを更新する」コマンドが実行されると、実際の数式(バックティックなし)が1行下に配置されるため、実行されます。その後、シート上のすべての数式が出力に置き換えられます。特に、アクティブなimportXML式は残りません。元の逆ティックされた数式はそのままであるため、同じメニュー項目を使用するだけでデータを再度更新できます。
function onOpen() {
var menu = [{name: "Update imported data", functionName: "update"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}
function update() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getDataRange();
range.offset(1, 0).clear();
var values = range.getValues()[0];
for (var j=0; j<values.length; j++) {
if (/^`=import/i.test(values[j])) {
range.getCell(1, j+1).offset(1, 0).setFormula(values[j].slice(1));
}
}
SpreadsheetApp.flush();
var range = sheet.getDataRange().offset(1, 0);
range.copyTo(range, {contentsOnly: true});
}
出力を更新するとき、スクリプトは最初の行の下のすべてを消去して、新しいデータのためのスペースを作ります。したがって、このシートにはimportXML
以外の多くのものを含めることはできません。残りのロジックを他のシートに配置します。
または、スクリプトを変更して最初のN行が影響を受けないようにし、N + 1で始まる行をインポートデータに使用できます。