2014年8月13日水曜日

google spread sheet を シマシマに… importRange が不安定問題の解決  時間トリガー研究など

手作業でしたらいいというようなものですが、このような自在に共同編集しているような書類の場合、シマシマがガタガタになってしまいます。

  条件書式でできないかなと思いましたが、なぜかできません。 

 =MOD(ROW(A2),2) < 1    ←こういう式が入りません。古いからかな?

で、探して自分で工夫して書いてみました。

google apps script のここにも書きましたが… getLastRow は便利な関数です。

 i%2 ==0 という、iを2で割った余りが0ならという、非常に簡単な分岐のため、これだと延々待ってないといけないので、決していいスクリプトとは思いません。誰かいいアイデアがあったら教えてください。

onOpen で開けた時に起動じゃなくって、1日1回夜中に動かすの方がいいかもしれないですね。

importRange を使って、メインのデータが更新されたら、すべてが更新されるようなシステムの作り込みを作っているのですが、googleの売りである、モバイルでもバッチリ見える!というのが8月1日からいきなり、すべていちいち消えるようになった。

ちなみに、今回作ったシステムは、以下のようになります。 Googleドキュメントの図形描画にある、SVG書き出しでやってみました。
確かにモバイルで拡大して見た時にキレイです。文字とか選択できないから残念だけど…。ただ、next browser とか非対応では見れない。 私の古いiPad で見たらぶっとびました。 まぁ。これからの技術ですね…。  こちらに画像がございます。

図のようにimportRangeを2重にかけている。で、これが8月の1日から、開いたとたんはデータが表示されているのだが、通信した感じになり、データなしになってしまうようになった。

google drive はドキュメントに変わったからだろうか? もう、しかたないので、範囲を指定してCopyto()で参照して、コピペするというプログラムを一人一人の担当者別に作って書き込みました。 なんせ7月はそれで動いていたので、もうびっくり。

ちなみに、参照して見に行けというプログラムを動かしたらその時はちゃんと表示されるが、しばらくして、再度書類を開くと参照しに行きデータなしになってしまう。 で、onOpen()で起動時にそういうプログラムを走らしたらいいじゃないかとやってみるも、モバイルではうまく動かない。

どうも、モバイルが持つCPUの能力も関係するような気がする(不明)

で、最終的に、朝と夕方、時間指定でコピペでデータが残るというものを作りこんでいったという。

お陰で、また、google script についていろいろわかった。 その後、UIにしたらいいと発見


  • モバイルであっても基本的には同じようにプログラムを動かそうとするが途中で止まる
  • モバイルでは、実行ボタンやメッセージウィンドウは表示されない。
  • 通信が遅いと途中でフリーズするだけでなくプログラムも止まる
  • onOpenの(起動時自動実行)であっても、最初に yes_no の質問で実行が決まるようなプログラムはうまく実行されない確率が高いようで、むしろ別の名前で作り、スクリプトの自動実行を起動時に設定しておくほうがよい。
  • 時間差を作るためのUtilities.sleep(); の最大時間は 300000 の5分がマックス
  • データ書き換えた後は、SpreadsheetApp.flush();  を必ず入れる
  • 命令関数は大文字小文字がきちんとなってないと動かないので正しく指定すること
  • 無料版のapps 制限ありまくり

もう、ホンマに大変やったわ。 

今、これを書いてる最中に、iTuneがアップデート言うてきたら、何気にしてしまった。すると、パソコンがフリーズした。再起動したら、RAIDで組んでいた、いろいろ保存しているデータのハードディスクがひとつ認識しなくなった。

ま、そういうことが起こるんだよ。 そういうもんなんだよ。  よかったRaidで!って思わないといけません!


後、モバイルでセルに入力する時に、セル内に改行入れたいことがありますが、パソコンだったらCrl+enter ですが、普通にはできませんので、メモ帳のようなソフトで書いたものをコピペするしかないようです。

よく忘れるので書いておくのですうが、便利な関数

=ARRAYFORMULA() これは、私的には複数行にわたって名前付き範囲が表示できる便利な関数です。

=ARRAYFORMULA(名前); これ一つで、同じシート内の名前付き範囲を表示できて便利。記入の際””で囲む必要もありません

配列数式の結果がおかしいときに便利な関数ということで知られているようですが…。

Google spreadsheet の特徴というか、本とか書いたりできないなと思うのは、script がこの前動いた!って思ったのが、いきなり動かなかったりする時がある。
で、安全策としては、やたら変数の宣言をすることみたいです。
めんどくさいので、 sheet.getRange(**).getValues とか書くとそこで止まるような気がします。


時間指定でメールを送るスクリプト
↑プログラムを見たら、下書きに書いたメールをスプレッドシートに読込、その日になった12時にメールを読込、スプレッドシートから送る。そして下書きを消すというもの。 予約をクリックしてからずーっと、時間になるまで動かしているようなプログラムだった。ずーっと送っていくような膨大なシステムとかでも大丈夫なのかな?  ScriptApp.newTrigger() クロックトリガーも作れるのね!
try chatch 構文で、実行してうまく行かなかった時、こうしろ的な書き方を知る。


時間トリガーを作れるのはわかったんだが、それで何をどう実行させたらいいのか??
例が難しいぞ!で、説明は観念的すぎるし…。ほんまに賢い人の説明は、私の脳をうわ滑るよ。

新しいSheetsとGoogle Apps Script 新しくなってよくなってるんだね~。


お問合せフォーム

お名前 :
Email: (必須)
メッセージ: (必須)

 約束しないと、送信できません。再度の場合はリロードが必要です。


0 コメント :

コメントを投稿

コメントありがとうございます。


サイト内検索


View My Stats