teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

回答追記

2019/12/12 08:56

投稿

KazuSaka
KazuSaka

スコア640

answer CHANGED
@@ -1,3 +1,5 @@
1
+ **別の方法を検証してみましたので、追記します.**
2
+
1
3
  過去にテラテイルで同様の質問を見つけました。
2
4
  [https://teratail.com/questions/220476](https://teratail.com/questions/220476)
3
5
  以下の1行でフィルタ後に表示されているデータを取得できるみたいです。
@@ -9,4 +11,32 @@
9
11
  処理時間を心配されているようですが、上記の方法ではGetValuesで取得すべきデータを1回で取得できるので、処理時間は問題ないと思います。
10
12
  得られた配列を操作する分には処理時間は圧迫しないと思いますので...
11
13
 
14
+ 以上です。
15
+
16
+ ###代替案
17
+ 下記のサイトで紹介されているスクリプトでもフィルタされたシートのデータを取得できました。
18
+ [https://gist.github.com/tanaikech/053d3ebbe76fa7c0b5e80ea9d6396011](https://gist.github.com/tanaikech/053d3ebbe76fa7c0b5e80ea9d6396011)
19
+
20
+ 3列:10000行のデータにて処理時間計測してみました。
21
+ フィルタリングかけずに、10000行取得するのに1秒弱くらいでした。
22
+ フィルタリングをかけて、表示データ数を減らすと、処理時間は短くなる傾向でした。
23
+ いかがでしょうか?
24
+
25
+ 以下、スクリプト
26
+ スプレッドシートIDとシートIDを入力していただければ動くと思います。
27
+ ```
28
+ https://docs.google.com/spreadsheets/d/【スプレッドシートID】/edit#gid=【シートID】
29
+ var spreadsheetId = "1KxT5j3DQ3WXxPNzJvtbSBheK_4Og_RSeSByUGPJVfPM"; // Please set Spreadsheet ID.
30
+ var sheetId = "0"; // Please set Sheet ID.
31
+ var url =
32
+ "https://docs.google.com/spreadsheets/d/" +
33
+ spreadsheetId +
34
+ "/gviz/tq?tqx=out:csv&gid=" +
35
+ sheetId +
36
+ "&access_token=" +
37
+ ScriptApp.getOAuthToken();
38
+ var res = UrlFetchApp.fetch(url);
39
+ var array = Utilities.parseCsv(res.getContentText());
40
+ ```
41
+
12
42
  以上です。

1

修正

2019/12/12 08:56

投稿

KazuSaka
KazuSaka

スコア640

answer CHANGED
@@ -1,11 +1,12 @@
1
1
  過去にテラテイルで同様の質問を見つけました。
2
+ [https://teratail.com/questions/220476](https://teratail.com/questions/220476)
2
3
  以下の1行でフィルタ後に表示されているデータを取得できるみたいです。
3
4
  ```
4
5
  var values = sheet.getDataRange().getValues().filter(function(_, i) {return !sheet.isRowHiddenByFilter(i + 1)});
5
6
  ```
6
7
 
7
8
  >>APIを毎行ごとに取得する必要があり、かなり時間がかかってしまいそうなので断念しています。
8
- 処理時間を心配されているようですが、上記のGetValuesで取得すべきデータを1回で取得できるので、処理時間は問題ないと思います。
9
+ 処理時間を心配されているようですが、上記の方法ではGetValuesで取得すべきデータを1回で取得できるので、処理時間は問題ないと思います。
9
10
  得られた配列を操作する分には処理時間は圧迫しないと思いますので...
10
11
 
11
12
  以上です。