2017-01-16 25 views
0

私はスクリプトで小さな問題に遭遇しました。google appsスクリプトjson解析エラー

私はjsonのURLを取得し、jsonファイルからGoogleスプレッドシートにデータを取得しようとしています。以前は、スプレッドシートで= importData()関数を使用しました。しかし、私は関数が信頼できないことがあり、#N/Aを返すことに気付きました。私はそれが欲しいときに実行するようにスケジュールすることができるスクリプトを作成したいと思います。

コードのどこかに間違いがありますか?みんな助けてくれますか?エラーは次のとおりです。

範囲の座標または寸法が無効です。 (ライン25、 「コード」ファイル)

はここでGoogleスプレッドシートファイルへのリンクです:シート3に https://docs.google.com/spreadsheets/d/15xQy8GDyHRMZXBPcnmSLYUl6GSHZLpTkfhvYR7-BjvQ/edit?usp=sharing

が何であるかの一例である=するimportData()関数と同じように見えます。また、私はそれがこのカスタムスクリプトのように見えることを願っています。事前に

function FetchUrl() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets() 

    var url = sheet[0].getRange(1, 2).getValue(); 
    var response = UrlFetchApp.fetch(url); 
    var json = response.getContentText(); 
    var dataAll = JSON.parse(json); 
    Logger.log(dataAll); 
    var dataset = dataAll; 

    var rows = [], 
     data; 

    for (i = 0; i < dataset.lenght; i++){ 
    data = dataset[i]; 
    rows.push([data.title, data.fields, data.values]); 
    } 
    dataRange = sheet[1].getRange(2, 1, rows.length, 3); 
    dataRange.setValues(rows); 

} 

Logger.log出力

[17-01-16 02:34:38:354 PST] {types=[1082, 20, 20, 20, 20, 20, 20, 20], type_names=[unknown, integer, integer, integer, integer, integer, integer, integer], values=[[2017-01-15, 3, 1, 3, 0, 2, 0, 0]], title=Course's all topics' starts yesterday: Get that job (en, -NG), fields=[date, findyourdreamjob, bethebestjobseeker, writethebestcv, findthebestjobs, getajobinterview, excelatjobinterviews, firstdaysonthejob]} 

ありがとう!

+0

注:Sheet3のimportData関数のurlには.csvの末尾が付きます –

+0

スクリプトをデバッグしましたか?おそらく、組み込みのエラー(データなしなど)と同じ理由でエラーが出る可能性があります。 –

+0

は何も問題が見つかりませんでした。データが利用可能です。たとえば、組み込み関数が#N/Aを返す場合、同じURLから手動でダウンロードするだけで、データは完全に正常です。 –

答えて

0

'var dataset =' Logger.log( 'dataset.length =' + dataset.length);を宣言した後で、次のコード行をどこかに追加すると、

Logger.logを実行して調べると、dataset.lengthが定義されていないことが示されます。

このようにして、さらにスクリプトを実行すると、長さが定義されていないため、forループはゼロ回実行されます(この場合、JSON.parseの出力はオブジェクトなので、データセットはオブジェクトではありません)。

あなたの行出力は空の配列[]となり、エラーメッセージが表示されます(これが唯一の理由であるとは確信できません)。

ところで、長さは間違っています。しかし、これはループがスキップされているのでエラーにはなりません(もう一度、私は思います)。

次のスクリプトは、比較のためにシート3ごとに結果を示します。

function FetchUrl2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets() 

    var url = sheet[0].getRange(1, 2).getValue(); 
    var response = UrlFetchApp.fetch(url); 
    var json = response.getContentText(); 
    var dataAll = JSON.parse(json); 
    Logger.log(dataAll); // inspecting through Logger.log shows dataAll is an object not an array. So, in the lines below, the headers and values are extracted from this object and recreated into an array. 

    var headers = dataAll.fields; 
    var values = dataAll.values[0]; 
    var output = [headers,values]; 
    Logger.log(output) 
    var dataRange = sheet[1].getRange(2,1,output.length, output[0].length); 
    dataRange.setValues(output); 
} 
+0

デイヴィッド、「長さ」という言葉にも気付き、修正しました。あなたのコードは魅力的に機能します!どうもありがとうございました。私は今私が間違っていたことを見て、その過程で何かを学んだ。 –