2017-02-11 25 views
0

Googleのスプレッドシートで毎日importhtmlをトリガーするGoogle Appsスクリプトを書くことができるかどうかを知りたいですか?たとえば、毎日午後1時に、次の表の更新をインポートしたいとします。Google AppsスクリプトでimportHTMLをトリガーする

=IMPORTHTML("https://en.wikipedia.org/wiki/Lubbock,_Texas","table",5)

私は自分のコンピュータがオフラインの場合でも、テーブルのため、この自動チェックは、更新する必要があります。 ありがとうございます

+0

インポートの更新と言うと、あなたは毎日午後1時にテーブルのコピーを作成するか、前日のテーブルに変更を加えてその変更だけを保存することを意味しますか?あなたのコンピュータがオフラインであってもスイッチがオフになっても動作するように、アプリケーションスクリプトはGoogleサーバーで実行されます。 –

+0

変更がないのに新しいテーブルをインポートしようとしました。しかし、私は毎日新しいテーブルのデータがあることを確信しています –

答えて

0

はい、毎日テーブルのコピーを作成するスクリプトを作成することは可能です。 要するに、インポートしたテーブルのコピーを作成し、それを新しいシートに貼り付ける必要があります。 ImportHTML aは、スプレッドシートを開いたりアクセスしたりするたびに更新されます。テーブルを保存するには、コピーを作成して新しいシートに貼り付けるしかありません。ここで

はちょうどそれを行うコードです:

function getImportData() 
{ 
var ss = SpreadsheetApp.getActive() 
var sheet =ss.getSheetByName("ImportSheet") 

if (sheet == null) 
{ 
sheet = ss.insertSheet("ImportSheet") 
sheet.getRange(1,1).setValue("=IMPORTHTML(\"https://en.wikipedia.org/wiki/Lubbock,_Texas\",\"table\",5)") 
} 
var dataRange = sheet.getDataRange() 
//waitforLoading waits for the function importHTML to finish loading the table, only a problem if table takes a while to load 
//for more discussion on this visit : http://stackoverflow.com/questions/12711072/how-to-pause-app-scripts-until-spreadsheet-finishes-calculation 
var wait = waitForLoading(dataRange,sheet, 10) 
var logSheet = ss.getSheetByName("ImportLogSheet") 
if (logSheet == null) 
    { 
    logSheet = ss.insertSheet("ImportLogSheet") 
    } 
    var timeStampRow = [] 
    timeStampRow[0] = new Date() 
if(wait) 
{ 
    logSheet.appendRow(timeStampRow) 
    var lastRow = logSheet.getLastRow() + 1 
    var destinationRange = logSheet.getRange(lastRow,1) 
    dataRange.copyTo(destinationRange, {contentsOnly:true}) 

} 
    else { 
    timeStampRow[1] = "Scripted timeout waiting for the table to Load " 
    logSheet.appendRow(timeStampRow) 
    } 
} 

function waitForLoading(dataRange, sheet, maxWaitTimeInSec) 
{ 
// This function is only required if it takes a while for the importHTML to load your data! 
// if not you can skip this function 

    // Function looks to see if the value of the 
for(i = 0; i< maxWaitTimeInSec ; i++) 
{ 
    var value = dataRange.getCell(1,1).getValue() 
    if(value.search("Loading") !== -1) { 
    Utilities.sleep(1000); 
    dataRange = sheet.getDataRange() 
    } else { 
    return true 
    } 

} 
    return false 

} 

編集:はトリガの設定について言及するのを忘れました。時間駆動トリガを使用してトリガされるすべての機能を設定できます。設定方法の詳細については、こちらをご覧ください:https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually

関連する問題