1

ゴール:私はウェブサイトからデータを取り出し、それを使って大きなテーブルを作成しようとしています。私はこれを動作させることに非常に近いと言うことができますが、私はロードブロッキングに達しました。AppsスクリプトとGoogleシートでImportHTMLを使用したデータスクラブ

背景: 私は3ページのGoogleシートを持っています。 (1)タイトルの "ティッカー"は、A132〜A500行のS & P 500のすべてのティッカーのリストです。 (2)actionFieldは、スクリプト中に使用される空白のページです。 (3)タイトルのresultFieldは結果を保持する。私が引っ張っているウェブサイトは(http://www.reuters.com/finance/stocks/companyOfficers?symbol=V)ですが、私はimportHtmlを通してアクセス可能なすべてのデータに対してスクリプトを(マイナーな変更で)動作させたいと思います。

スクリプト: 次のように私は現在持っているスクリプトは次のとおりです。

function populateData() { 
var googleSheet = SpreadsheetApp.getActive(); 

// Reading Section 

var sheet = googleSheet.getSheetByName('tickers'); 

var tickerArray = sheet.getDataRange().getValues(); 
var arrayLength = tickerArray.length; 
var blankSyntaxA = 'ImportHtml("http://www.reuters.com/finance/stocks/companyOfficers?symbol='; 
var blankSyntaxB = '", "table", 1)'; 

// Writing Section 

for (var i = 0; i < arrayLength; i++) 
    { 
    var sheet = googleSheet.getSheetByName('actionField'); 
    var liveSyntax = blankSyntaxA+tickerArray[i][0]+blankSyntaxB; 
    sheet.getRange('A1').setFormula(liveSyntax); 
    Utilities.sleep(5000); 
    var importedData = sheet.getDataRange().getValues(); 
    var sheet = googleSheet.getSheetByName('resultField'); 
    sheet.appendRow(importedData) 
    } 
} 

は、これが成功しティッカーページからティッカーをつかみます。 importHtmlを呼び出します。データをコピーします。そして、右のページに何かを追加します。ティッカーリストの各項目についてループしてこれを行います。ループ内の反復と同数の行に対して、多くの列を横切って表示さ

[Ljava.lang.Object;@42782e7c 
[Ljava.lang.Object;@2de9f184 
[Ljava.lang.Object;@4b86a4d0 

次のよう

しかしながら、添付されているデータです。

どのようにデータを正常に追加できますか?

(そして、このスクリプトを改善する上の任意のアドバイス?)

答えて

1

appendRow methodは、ここでは適していません。 1行しか追加しないので、その引数は1Dの値の配列になると予想されます。

getValuesから得られるものは、通常、[[a,b], [c,d]]のような値の2D配列です。単一行であっても、getValues[[a,b]]を返します。唯一の例外は、単一セルの範囲です。そのセルの値を取得します。 はありません 1Dアレイです。

1行だけ必要な場合は、たとえばappendRow(importedData[0])を使用します。

それ以外の場合は、必要な数の行を挿入し、値の2次元配列を割り当てます。

var sheet = googleSheet.getSheetByName('resultField'); 
var lastRow = sheet.getLastRow(); 
sheet.insertRowsAfter(lastRow, importedData.length); 
sheet.getRange(lastRow + 1, 1, importedData.length, importedData[0].length) 
     .setValues(importedData); 
関連する問題