Google App Scriptで他のスプレッドシートのデータを参照

今月手続きして、パート職員として採用してもらった会社では、メンバーの連絡などにG suiteを使っています。そこで、Google App Script(GAS)を使って操作を簡単にできないか、との相談を受けました。

GASは、今回使うのが初めてです。使う言語は比較的慣れているJavaSriptですが、VBAとは勝手が違い、かなり苦労しています。やはり、WebブラウザでExcelのようなことができる、ということで、かなり制限があるようです。

それで、今回苦労したのが、あるスプレッドシートのマクロから、別のスプレッドシートのデータを取り込む方法でした。最初は、設定方法が解らず、権利が無い、というメッセージが出て、全く進めなくなりました。

幸い、エラーメッセージで検索したら、解決方法が見つかりました。

このページで解説しているように、マニフェストファイルで許可しないと、別のスプレッドシートに参照できません。まずは、この設定が必要です。

あとは、使いたいスプレッドシートのIDを調べて、openById()で開き、領域でコピーすれば、2次元の配列で各セルの内容を取得できます。

とりあえず、要望に合わせてシートとマクロを調整して完成です。

自宅のパソコンでExcelが使えない

ここ何年か、ずっと派遣先のパソコンでExcelが使えていたのと、自宅で使う機会がほとんどなく、あったとしてもWeb版のフリーの表計算で間に合うので、自宅のパソコンに表計算ソフトをインストールしていませんでした。

そんな状況で、Googleスプレッドシートを編集する機会があり、ふと、自宅のパソコンにExcelが無いんだ、と改めて実感しました。

普段は、無料で使えるWeb版のExcelを使ってます。しかし、これ、使える機能がかなり限定されているので、使い勝手が違います。これは、Googleのスプレッドシートも同じ。本格的に使うなら、Excelが必要かな、なんて考えてます。

ただ、そういう仕事があればの話で、今後、どうなることやら。VBAでExcelのマクロを作って、作業を自動化するのが好きだっただけに、ちょっと寂しい。

Reactを学習中(サンプルあり)

先週で派遣の仕事が終わってしまい、しかし、次の仕事がまだスタートしていません。しかも、ライターの仕事もないし。

ということで、プログラムの学習をやってます。8月と9月にReactをやっていたので、その続きを。

いや、いろいろやれるのが解りました。babelの中に全て入れてしまうと、いろいろ不便だと思っていたのですが、別に、全てをbabelの中に入れる必要がないことが解りました。

ということで、いろいろ試してます。

具体的に言うと、プルダウンのオプションをReactで作り、それを使ってボタンを押すタイミングで表示する処理もReactで作るWebページを作成しました。

simdenki

東北電力の電気料を、Javascriptだけで計算するWebページです。Javascriptの配列にプルダウンメニューの表示や、それで選ばれる料金などを格納し、それを使って計算します。

まあ、機能の割にコードが多いような気がしますが、ここから減らすだけのスキルがまだありません。Javascriptのオブジェクトの使い方は、まだまだ理解が足りないな、と感じてます。

求人に応募したら、かなり厳しかった

派遣の仕事は終わるのですが、新しい仕事はまだ決まっていません。

ハローワークの求人に応募して、返事をもらえた企業から、スキルについての問い合わせがありました。それが、かなり期待外れだったらしい。

率直に言って、インターネットに公開するシステムの、ログインページをどう作るか、のスキルを問われました。しかし、私は、そういうページを作った経験はありません。ということで、スキルが無い、と判断されました。

こういうのが、社内エンジニアはWeb業界では役に立たない、スキルのギャップなんでしょうね。もう少しやれるのでは、と持っていたので正直ショックでした。ここがダメだったら、どうしようと不安になっています。

派遣終了

今日、派遣会社の営業の方から電話があり、10/2で今の派遣の仕事が終わることが決まりました。
6月の打ち合わせから、ここまで引っ張ったものの、これで終わりです。

個人的には、給料がかなり安いと思っていた今の派遣の仕事ですが、10月から来てくれる方がいるそうです。ということで、その方と交代します。大学からの要請で、10/1と10/2の2日間は、引き継ぎし、私は10/2で終了だそうです。

長い間、お世話になりました。

WordPressのショートコード

WordPressの記事の中に、夜のある時刻から朝のある時刻まで、リンクを表示したい、という相談があった。つい、何も考えずにプラグインでありそう、と答えてしまったのだが、PHPで簡単に書けるかもしれない、と思い、ちょっと調べることに。

どうも、ショートコードを使うと、簡単にできそうでした。WordPressで、ショートコードが使えることは、前から知っていましたが、これまで使う機会が無いことから、設定方法を知りませんでした。

ネットで探すと、関連した記事がたくさんヒットします。作り方は簡単で、テーマのfunction.phpにPHPのコードを追加するだけでした。

今回の相談は、汎用性を持たせる必要が無いので、簡単に作れそうです。これを回答してもいいのですが、実はテーマを外注しているWordPressのページに使うことになります。ということで、この仕事は私には回ってきません。

文字を数えるVue.js版

最近更新した文字を数えるWebページ、今、Vue.js版を作っています。今日、かなりいい線までできたのですが、実際に使ってみると、いまいち。

iQueryと違い、非同期通信が特殊で、そのまま移植という訳にはいかず、今、苦労しているところです。使っているパーツを組みなおしているところですが、根本的なところから見直ししないと、すごく複雑になってしまう。

正直、今日作った版は、ぎりぎり動作するものの、複雑すぎて動作が怪しい。これでは、使えないレベル。

明日、また、見直してみるつもりです。

文字を数える、修正しました

いつからか忘れましたが、いつもライターの仕事で使っている自作の文字数を数えるWebページで、Yahooの校正サービスが効いていませんでした。それが、ちょっと不便だなと感じたので、今日、直しました。

これ、jQueryのバージョンのせいかな、と思っていたのですが、ブラウザの更新の伴うJavaScriptの仕様変更かも、と思っています。

ということで、また、Yahoo構成のメッセージが見れるようになりました。微妙な指摘もありますが、なるほどと思える指摘もあるので、ちょっとは改善するかも。

http://muzina630.wp.xdomain.jp/js/m08.html

そいうえば、m08の08は、バージョンのつもりだったのですが、この数字は今回、変更してません。機能の追加等は無いので。

Vue.jsを学習中

以前、少しいじったものの、HTML側を大幅に書き換えることになるのがちょっと、と思っていたVus.jsを、再度、調べています。jQueryの置き換えにどうかなと思ったのですが、やはり難しいな、というのが最初の印象です。

かなり前にCakaphpを調べた時も、使い方の前に、フレームワークという考え方が理解できず、最初のうちはどう使えば良いか悩んだのを思い出しました。

個人的な感想は、Vue.jsは、JavaScriptというよりも、JavaScriptを使ったVue.jsというフレームワークを全体とした新しい開発の仕組み、という感じがします。

なお、以前、触ったことがあったので、ページ内の処理は思い出しました。しかし、非同期通信は、かなり悩んだというのが正直なところです。今回、本を買わずに、ネットの情報だけで学んだのが敗因と言えるかもしれません。

以前から、こういう技術的な情報は、Quiitaの記事がヒットしやすいのですが、ここに掲載されているサンプルは、そのままで動かないことが多い。しかも、サンプルの説明も中途半端。できれば、参考にしたくないのですが、他のページもいまいちだと、Quiitaの記事を頼るしかない。そうすると、学習に余計な時間がかかってしまう。今回も、こういった感じではまりました。

一応、目的のサンプルコードができたので、応用してみようかと思っています。

var vueobj = new Vue({
el: '#main',
data: {
message: '',
views: '',
xml: '',
msg: ''
},
methods: {
get: function() {
this.views = '';
var self = this;
var url = 'http://localhost/vue/xml2.php';
var params = new URLSearchParams();
params.append('id', '11' );
params.append('msg', this.msg );

axios
.post(url, params)
.then(function(res){
self.message = res.data;
self.xml = res.data;
})
.catch(error => console.log(error))
},
view: function(){
this.message = 'このHTMLは、Vue.jsを使っています。';
var id = getTagName( this.xml, "id" );
var msg = getTagName( this.xml, "msg" );
this.views = "id:" + id + " , msg:" + msg ;
},
clear: function(){
this.message = '';
this.views = '';
this.msg = '';
}
}
})

function getTagName( text, tag ) {
var stag = "<" + tag + ">";
var p1 = text.indexOf( stag ) + stag.length;
var etag = "";
var p2 = text.indexOf( etag );
var vals = text.substr( p1, p2-p1 );
return vals;
}

HTMLは、省略してます。
axiosで、postを送付する際、urlとURLSearchParams()で作った変数を指定して、送信してます。また、これに続くthenのres.dataで受け取っています。さらに受け取ったデータは、XML形式で、別のトリガーを使ってそれを加工し、Webブラウザに表示してます。

axiosの中に書こうとすると、いろいろ制限があってうまく動作しないのが難しい点ですね。また、HTMLとVue.jsのdataで定義する変数が密接に結びついているので、そこをうまく利用するのがポイントのようです。

最近はSPAというらしい

私がJavaScriptのプログラムを使うようになったのは、2004年か2005年くらいだったと思う。マウスを選んだ部署名や氏名を、inputタグに代入させる簡単な処理で、かなり後から、この技術をDOMと呼ぶのを知った。

その後も、JavaScriptを長く使ってきたが、Table要素を追加したり、テキストを書き換えるなど、いろいろな使い方をしてきた。

また、このDOMが、Ajaxと相性がいいのは、かなり前から知っていたが、同時は非同期通信を素で書くとかなり面倒だったので、POSTの通信を使えなかった。しかし、今ではiQueryなどで簡単に書ける方法を学んだので、派遣先で作った簡単なWebシステムにも使っている。

この、昔から使われているAjaxとDOMを組み合わせたWebページを、シングルページアプリケーション(SPA)というらしい。2006年当時、javaScriptでAjaxが使えるエンジニアの給料は、かなり高かった。最近は、そうでもないかな、と思っていたのだが、まだまだAjaxでDOMが操作できるプログラムを書けるエンジニアは、評価が高いらしい。まあ、あれは作るのが面倒だからね。