保護されたExcelシートの対処法

こんにちわ。
リエです。
 

もうすぐ7月。夏だ!海だ!年度更新だ!
とうわけで、年度更新の季節です。
 

年度更新の提出書類で「労働保険料・一般拠出金申告書」というものがあるのですが、いつも厚生労働省のサイトから計算支援ツール(Excel)をダウンロードして使用しています。

 

このExcelシートは計算式が入っているので、集計表に入力すると別シートの記入イメージに反映され、その内容を申告書に転記したら申告書が完成するので、便利で毎年使っています。
ですが、いざ今年の分をダウンロードして入力して使ってみると一部数字が反映されないということがおきました。
入力できないと申告書が作成できないぞ。ということで原因を探して見つかったので、今回はそのことを書きたいと思います。
 

最初はどうしたのか

いつも作成のときは、ダウンロードしたExcelシートをGoogleスプレッドシートにインポートして使用しています。
Googleスプレッドシートで作成してると表示がおかしな箇所があったので、インポートなので互換が出ておかしくなったのかな?と思い、Excelシートに直接入力することにしました。
 

直接入力しても数字は反映されないという問題勃発

集計表に直接入力しても一部数字が記入イメージシートに反映されません。
なぜだ?と数字が反映されない箇所を見てみると保護がかかっている。
保護を外そうにも、制限ありで触れない。。ということでどうしたらいいのかと考え込んでしまいました。
 

ヘルプをお願いする

自分だと解決が難しいなということでプログラマさんにヘルプ。
ここで解決するのです\(^o^)/
 

原因と解決方法

ネットからダウンロードしたファイル(今回の場合はExcel)を開くと、「保護されたビュー」というモードで開くことがあります。

添付ファイルやネット上から取得したファイルを開くと「保護されたビュー」というモードで開くことがあります。これは有害なコンテンツが埋め込まれている可能性があるため読み取り専用で開くモードです。

引用元:http://office-qa.com/Excel/ex161.htm

このモードで開くと保護がかかったままなので、入力しても正常に数字が反映されないというようなことが起こるのです。
そこで保護されたビューをオフにすれば、保護が解除され正常に使用することができます。
弊社は以下サイトを参考にさせていただきました。
保護されたビューを解除(無効)にする方法
※同様の事例すべてがこの方法で解消するわけではありません。
※操作は自己責任でお願いいたします。
 

この方法をプログラマさんが調べて試してくれて、無事申告書を完成させることができました。(感謝!)
同じようなことで、お悩みの方がいましたら少しでもお役に立てれば幸いです。


スマートオフィス化計画エアコン編

はじめに

エアコンはありがたいものです。夏の暑いときも冬の寒いときも快適な室温を保ってくれます。
…電源さえ入っていれば。

朝イチで出社するメンバーから、鍵開けてオフィスに入った時点で既にいい感じに涼しくなっていてくれたらとてもうれしいという話を聞いて、やってみることにしました。

オフィス用エアコンは案外賢くない

家庭用エアコンは赤外線リモコンで制御できるので、いわゆるIoTリモコン(スマートリモコン)とPCを連携させれば電源のオンオフ・温度変更・風量変更・モード変更を割と自由に制御出来ます。
一方、オフィス用エアコンは温度やモードが表示されるパネルを見ながら物理ボタンをポチポチ押して制御するしかありません。

という訳で、今回は電源のオンオフに専念します。

SwitchBot

エアコンの電源ボタンを物理的に押すためにSwitchBotを導入しました。

こんな感じでボタンを押してくれます。

SwitchBotはBluetoothを搭載していて、スマートフォンアプリでボタンプッシュの動作をさせることができます。今回は自動制御を目指したいので、ネット経由でトリガを送れるSwitchBot Hubを併用します。

SwitchBot HubをIFTTTと連携させて、以下のようにしてエアコンの自動起動を実現できます。

  1. ラズパイで朝7時にスイッチオン用のスクリプトを起動
  2. IFTTTで設定したWebhooksのURLをスクリプトが叩く
  3. IFTTTからSwitchBot Hub経由でSwitchBotにトリガが届く
  4. スイッチオン!

IFTTTとの連携

IFTTTでは’This’としてWebhooks、’That’としてSwitchBotのBot Pressを選んでアプレットを作成しました。

このアプレットへのアクセスキーをIFTTTのWebhooksのページで発行すれば、以下のようなURLを叩いてSwitchBotを動かせます。(XXXの部分がアクセスキーです)

https://maker.ifttt.com/trigger/PressSwitchBot12F_Red/with/key/XXXXXXXXXXXXXXXXX

残念ながら、IFTTTでもSwitchBot Hubでも1個のトリガで複数のSwitchBotを動かすアクションは実行できないので、オフィスの6台分のエアコンそれぞれに対応したアプレットを作って6つのURLを1個ずつ叩くスクリプトを作りました。IFTTTで「平日朝7時に実行」というトリガを作れるので、それを6台分設定することも考えましたが「平日だけど会社は休み」のパターンへの対応を考えてスクリプトから起動しています。

結果

自動起動を始めて2週間ほど経ちます。それなりにちゃんと動いていて、朝イチの出社のメンバーを空調の効いたオフィスが迎えてくれるようになっているようです。

「それなり」というのは、6台のエアコンのうち1,2台が動いていないことが多いからです。「オフィスに入ったら空調が効いている」という目的には大きな影響は無いと言えば無いのですが、何故全部ちゃんと動いてくれないのかは気になるところです。いろいろ試した感じではSwitchBot Hubがどうも怪しいようです。何回かに1回IFTTTからのトリガを取りこぼしたり1個のトリガで2回動いたりします。

https://github.com/OpenWonderLabs/python-host
を使えば SwitchBot Hub 無しでラズパイから直接SwitchBotを制御できるようなので、いずれ挑戦してみたいと思います。


Webスクレイピングをはじめてみました(1)

 

こんにちは、長年Webデザインに携わってきましたがプログラミングがなかなか覚えられないLQヒロシです。

今回は一念発起して、流行りのPythonWebスクレイピングをしながらプログラミングを勉強していこうという試みです。

なぜWebスクレイピングなのか?

 

PHPのちょっとした修正や、jQueryを使ったクリックやリサイズの簡単なイベントぐらいはできるけど、そこから先になかなか進めない・・。デザイナーなんだしJavaScriptUI周りのエフェクトとかを実装できるようになりたいと思ってはいるのですが、UI周りってイベント同士が絡んだりすると途端に難しくなってなかなか続かないのが目下の課題だったりします。

簡単なアウトプットを段階的にこなしていって、ファンクションのまとめ方だったり、データのやり取りなどプログラミングの勘所を掴んでいけるのが理想的ですよね。

Webスクレイピングであれば、WebサービスのAPI活用・クローリングでのデータの収集、データベースへの保存や取り出し、データの加工の作成という一連の流れが小規模なカタチで勉強できるので、体系的にポイントを抑えた勉強ができそうです。データを加工するのに正規表現も使うことになりそうだし。

 

プログラミング言語はpythonを使用し、ツイッターと連携して画像を収集しギャラリーサイト作成を最終的な目標としたいと思います。

 

第一回目は、スクレイピングとPythonについてご紹介できればと思います。

そもそもWebスクレイピングとは?

 

厳密にはクローリングとスクレイピングに分けることができます。

・クローリング
WebサイトのハイパーリンクをたどってWebページを探す作業

・スクレイピング
Webページから必要な情報を抜き出し、整形し直す作業

例えば、電子書籍の販売サイトから書籍情報を抜き出して価格を比較、最安値の情報のみをまとめるなど、要するに複数のWebサイトから任意の情報だけを抜き出し、雑多なデータを整理して有益な情報にすることでしょうか。

Pythonって何?おいしいの?

 

GoogleFacebookで採用されていて、機械学習やIoTの事例も多い現在最も旬な言語とも言われていますので、おいしいです。他のプログラミング言語同様、WindowsMacOSLinuxなどのプラットフォームで動作でき、環境構築・Webシステムの開発~データ解析までひとつの言語で実現できることから世界中で広く使われています。

Pythonの特徴

 

文法が読みやすい

 

プログラムは一度書かれた後も他の人に読まれるもの。pythonでは「シンプルで読みやすいコードが書けること」という設計思想があり、コード上の装飾が極力少なくなるような記述方法になっています。少し文例を見てみましょう

実行結果:hogeです

 

このように文の終わりに閉じタグが必要なく、制御構文では影響する範囲を括弧で囲む代わりにインデントで定義。変数は代入するだけで宣言されたことになるのでとてもすっきりとして読みやすいコードになります。

Pythonってなんだか難しそうなイメージがありましたが、PHPなどと比べても別段特殊な書き方をしているわけでもなく、文法が見やすいので非常に馴染みやすく感じました。教育の現場でも採用されていたりするそうで、プログラミング初心者にも学びやすい言語だと思います。

 

・導入が簡単!

 

MacならHomebrewでインストールするだけですぐに使えました。コンパイルする必要もないので、ぶっちゃけ笑ってしまうぐらい早いですwww

(以前PHPを導入した際は、php.iniファイルの設定を調整したり、事前にDBを用意したりと面倒だった思い出があります。)

 

・豊富なライブラリ

 

Pythonには正規表現、数学関数、通信プロコトルなどの標準ライブラリが非常に豊富でインストールするだけで利用が可能です。さらにサードパーティ製のライブラリも豊富に提供されています。最近ではディープラーニング用のTensorFlowなどが有名ですね。データ解析のライブラリも強力で、スクレイピングしたデータをインフォグラフィックとして表現できたりもします。

 

それではPythonの導入方法を見てみましょう

 

Pythonは2系と3系があり、現在は3系が主流になりつつあります。2系と3系の間には互換性がありません。Macではデフォルトでインストールされていますが2系だったりするので、Homebrewで3系をインストールします。

 

 

バージョンを確認してみましょう

 

Homebrewでインストールしたものが参照されているか確認します。

と表示されれば準備は完了です。

 

では、対話方式でプログラム実行できる「インタラクティブシェル」でPythonを動かしてみます。やり方はターミナル上で「python3」と入力するだけですw

立ち上がったら上記のようなメッセージが表示され、コマンド受付状態になります。では、構文を入力してみましょう。

はい、これだけですw簡単ですw

 

終了する時は

または

これでbashに戻ることができます。

 

第一回目は以上になります。説明や導入を中心に駆け足でご紹介してきました。
まだまだ勉強中の身のため、上手く伝えられず分かりにくい部分が多々あると思いますが、次回からは実際にPythonを利用して少しでも魅力をお伝えできればと思います!


「PHPカンファレンス関西2018」に協賛させていただきます


「PHPカンファレンス関西2018」に、Goldスポンサーとして協賛させていただきます。
 
<期間>
2018年7月14日(土)
<会場>
グランフロント大阪
<主催>
PHPカンファレンス関西2018開催実行委員会
「PHPカンファレンス関西2018」公式サイト


NginxをHTTP/2対応する際のポイント

NginxをHTTP/2に対応するにはALPNに対応する必要があり、下記ソフトウェアバージョンの条件を満たす必要があります。

  • Nginx 1.9.5以上であること
    ※但し、その後のバージョンでHTTP/2に関する不具合の修正がある為、ご注意ください。
  • OpenSSL 1.0.2以上であること

導入されているソフトウェアバージョンについては、下記コマンドにて確認可能です。

$ nginx -V

下記のようにバージョン条件が満たされた出力がされていれば問題ありません。

nginx version: nginx/1.10.3 (Ubuntu)
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled

過去にHTTP/2対応したと思っていてもOpenSSLのバージョンが低く、正しくHTTP/2に対応できていないということがあるのでご注意ください。

正しく対応できているかの確認はchromeのDeveloper toolにてProtocol列を表示し、確認してください。

問題がない場合には[h2]と出力されています。