質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1156閲覧

GASのスクレイピングで取得した配列をスプレッドシートに入れたい

sunglass

総合スコア303

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/12/24 10:02

GASのスクレイピングで取得した配列をスプレッドシートに入れたいです。
ヤフオクをスクレイピングして600件のデータ(タイトル、URL、価格など)を取得。

現在

function yahooSearchData() { var ss = SpreadsheetApp.getActiveSheet(); for (var i = 1; i <=501; i+=100){ var newUrls = 'https://auctions.yahoo.co.jp/closedsearch/closedsearch?auccat=23176&aucminprice=3000&b='+[i]+'&n=100&rewrite_category=0'; var html = UrlFetchApp.fetch(newUrls).getContentText(); var links = Parser.data(html) .from('<a class="Product__imageLink" href="') .to('"') .iterate() var titles = Parser.data(html) .from('<div class="Product__infoCell Product__infoCell--left">') .to("</h3>") .iterate(); titles = タイトル取得 }); var prices = Parser.data(html) .from('<span class="Product__priceValue">') .to("</span>") .iterate(); prices = 価格を取得 }); var end_times = Parser.data(html) .from('<span class="Product__time">') .to("</span>") .iterate(); // こここで複数ある配列をきれいに成形する var values =[ titles, prices, end_times, links ] var _ = Underscore.load(); var dataTrans = _.zip.apply(_, values);

で出力すると

[19-12-24 18:52:59:781 JST] [title, price, end_times, URL]が100件入った配列が計6個=600件あります。

[19-12-24 18:52:59:781 JST] [title, price, end_times, URL]×100件×6個

それを

// この } の外でその値をsetvalueすれば宜しい。 var range = ss.getRange("A2:D601"); dataTrans = dataTrans[0].map(function(_, i) { return values.map(function(f) { return f[i] }) }); // 追加 range.setValues(dataTrans);

とすると
イメージ説明
と出てしまいます。
どうやって入れれば良いのでしょうか。。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tutti56

2019/12/24 16:19

以下は何をするための記述なんでしょうか? dataTrans = dataTrans[0].map(function(_, i) { return values.map(function(f) { return f[i] }) }); dataTransが600個の配列であればそのままsetValuesしたらいいだけな気がしますが。
guest

回答1

0

ベストアンサー

二次元配列となってる[[]]なデータは、setvaluesする場合には、正確に縦横のサイズを指定する必要があります。しかし、直接列数や行数を数えて、数字を入れるのは賢明ではないので、以下のようにして貼り付けます。

一部を省略していますがdataArrayが二次元配列です。

JavaScript

1 //スプレッドシートの最終行以降に配列データを一気に書き込む 2 var endrow = Number(ss.getLastRow()) + 1; 3 var lastColumn = dataArray[0].length;  //カラムの数を取得する 4 var lastRow = dataArray.length;     //行の数を取得する 5 ss.getRange(endrow,1,lastRow,lastColumn).setValues(dataArray);

参考リンク:Google Apps Scriptで複数データを送信出来るフォームを作る

投稿2019/12/25 00:06

officeforest

総合スコア412

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sunglass

2019/12/25 04:36

出来ました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問