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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

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

Q&A

1回答

405閲覧

google スプレッドシート importxmlについて

rock0308

総合スコア6

JavaScript

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

0グッド

0クリップ

投稿2018/01/29 12:02

GAS で、

.setFormula('=IMPORTXML("XXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXX")');

sheet.getRange('n30')

.setFormula('=IMPORTXML("XXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXX")');

sheet.getRange('n60')

.setFormula('=IMPORTXML("XXXXXXXXXXXXXXXXXXXXXXXX","XXXXXXXXXXX")');

sheet.getRange('n90')

等とコードを書いて実行しています。上記のコードは一部で、さらに下に続きます。

時間がかかりすぎて、エラーが出ることも時々あります。

一気にセルに代入?高速化?することは出来ませんか?

初歩的な質問ですいません。

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

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

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

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

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

guest

回答1

0

一般にGoogle App Scriptでは、APIを使うと遅くなります。
関数であれ値であれシートに何かをセットするのであれば、配列に書き込むデータを作っておいて、まとめてセットするというふうにしたほうがいいと思います。

下記の例での速度感の違いがご参考になればと思います。

記載例ではn30,n60,n90となっているので、補足します。飛び飛びの位置にそれも元のデータを維持しながら書き込みをしないといけないのであれば、getValuesをしてまるっと取り出して加工して全部を戻す、とすればよいかと思います。

javascript

1function myFunction1() { 2 var sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); 3 sheet.clear(); 4 var datas = []; 5 Logger.log("start"); 6 for(var i = 1; i < 1001; i++){ 7 datas.push([1,2,"=A1+B1"]); 8 } 9 var datac = sheet.getRange(1,1, 1000,3).setValues(datas); 10 Logger.log("stop"); 11} 12// [18-05-02 23:14:53:629 JST] start 13// [18-05-02 23:14:53:667 JST] stop 14// [18-05-02 23:17:41:844 JST] start 15// [18-05-02 23:17:41:877 JST] stop 16// [18-05-02 23:18:12:851 JST] start 17// [18-05-02 23:18:12:911 JST] stop 18// [18-05-02 23:18:47:572 JST] start 19// [18-05-02 23:18:47:612 JST] stop 20 21function myFunction2() { 22 var sheet = SpreadsheetApp.getActive().getSheetByName('シート1'); 23 sheet.clear(); 24 Logger.log("start"); 25 for(var i = 1; i < 1000; i++){ 26 sheet.getRange(i, 1).setValue(1); 27 sheet.getRange(i, 2).setValue(2); 28 sheet.getRange(i, 3).setValue("=A1+B1"); 29 } 30 Logger.log("stop"); 31} 32//[18-05-02 23:19:12:199 JST] start 33//[18-05-02 23:19:16:271 JST] stop 34//[18-05-02 23:19:41:807 JST] start 35//[18-05-02 23:19:45:947 JST] stop

投稿2018/05/02 14:28

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問