2012年04月03日

ExcelハードコピーツールVer1.2の仕様変更について

1.2のリリース候補を利用して、Windows 7やOffice2010、Windows xp、Office2003等でテストを実施した結果、Windows 7のAEROとこのツールの相性はあまりよくないことに気づきました。

特に、ALT+TABを押下しても直前のウィンドウに遷移しないことがあるだけでなく、GetForegroundWindow()→GetDCEx()でデバイスコンテキストを取得し、メモリビットマップに転送しているのですが、そうすると半透明のウィンドウ枠が真っ黒になってしまいました。。。

これはPrintScreenでは発生しないため、GetDCEx以外か何かオプションが増えたりやり方を考えないといけないのですが、Windows xpでも動作させたいため、PrintScreenを押してクリップボードから画像を取得するという、原点の方法に戻そうかなと考えています。

また、設定も複雑ですので、設定画面を別途用意し、また、連続取得機能を用意したいと考えています。

とすると、1.1までと全く違う実装ではないかという反省が。。。

ごめんなさい。作ってみたら甘かったです。
元々は単純に画面のハードコピーを撮りたかっただけなのですが、色々と機能をつけていったら、、、よくばりすぎました。。。
posted by Kiruahさん at 21:42| Comment(0) | TrackBack(0) | 日記

Excel2003からExcel2010に移行するにあたって パート2

以前、「Excel2003からExcel2010に移行するにあたって」にも記載しましたが、Microsoft社にも互換性に関する情報がありましたので、あわせて情報連携と称して勝手ながらリンクしたいと思います。

1. 「Office2010 ホワイトペーパー : 互換性、マクロ、ファイル」のうち、特にマクロ互換性についてを参照ください。
概ねの内容について互換性がありますとありますが、AccessではExcelへのエクスポート機能が無効であったりします。またCommandBarsについて触れられていますが、CommandBarsにはテキストやコンボボックスも貼りつけられたり、縦方向に表示することもできます。そのような実装をしている場合については、検証されていない可能性があります。よくテストが必要だと勝手に考えています。

また、Declare文(つまりはWin32 API等を使う場合)について、32/64ビット版のうまい解決策が掲載されています。これについてはこれから検証してみます。

2. 「Office 2010 アプリケーション互換性ガイド
こちらはテスト計画、テスト方針を検討する上で参考になるかもしれません。ただし、事前に利用しているVBAの機能、ActiveX(COM/DCOM)が分かっており、それらがOffice2010でも動作することがベンダーによって保証されていることが前提と考えるべきでしょう。

問題は、上記では解決できない不具合は諦めるしかないのか?それとも別の実装を検討すべきなのか?です。
工数、つまりお金に関わる問題でもあるため、ここは顧客と相談が必要なのですが、そもそもその相談に必要となる情報を提出しにくいのが難点です。
すでにMicrosoftだからという理由は通用しない世の中だと思います。というか、最初からリバースを許容するライセンスなら、通用しないのは当たり前だったりするのですが。。。
(私ならリバースが許容されているならリバースしてしまいますし。。。)

昔、MicrosoftのSQL Server(正確にはMSDTC経由での複数サーバ間のトランザクション管理で、XIDが重複して採番されるためにSQLServerのトランザクションがゾンビになるという事象ですが)について不具合があった時、MSDNに入っていて会社経由で問い合わせたからだったからか、都合により情報を提出できず、Microsoftの担当の方から「これ以上は無理です」と言われ、「じゃぁ、うちで調べるからリバースしてもいいですか?」と聞いたら、しばらくの後「OK」と言われたのは良い思い出です。
posted by Kiruahさん at 01:00| Comment(0) | TrackBack(0) | 日記

2012年04月02日

現行からのリプレース案件、マイグレ案件の注意点について

こちらは以前にも似たことを書いたことがあります。

システムの再構築について http://kiruah.sblo.jp/article/45437976.html

今関わっている案件もリプレース案件です。この案件は基本現行をそのままプログラムを変更せず
新しいハードウェアに移行するというものです。
ですが、その中に一部仕様変更を盛り込みたいというものがあります。
私は何度でも言いますが、まずは移行だけをしましょう。
その後に仕様変更を取り込むようにすべきです。

でなければ、

1. バグが現行からなのか、それとも新規に追加した仕様なのかの調査が複雑になります。
2. 工数の計算が複雑になります。なぜなら移行なのか、それとも仕様調査なのか、修正なのかどちらのテストを実施しているのかが曖昧になります。これは工数請負の場合、特にユーザ側に後々不利になります。曖昧さは、こちらのマイナスを別の理由に転嫁できてしまうためです。
3. 若手がいる場合、教育工数が非常にかかります。当然現行の知識を知り、その上で修正分を理解する必要があります。まずは現行を移行しテストさせ理解した後で、変更分を理解させるほうが教育工数が減ります。
4. 経験的にですが、スケジュールの立て方が往々にして曖昧になりやすく、これぐらいで両方できるだろうという程度のスケジュールを構築しがちです。よって、後ほど時間が足りなくなることが多いです。
5. 後戻りが簡単です。移行が完了していれば、最悪仕様変更を取り込んでいないモジュールを使い、現行レベルを維持してリプレース運用は可能です。それが同時に行われた場合、切り離しが必要か、一部機能は問題がないとしても全機能の実装完了が必要となってしまい、ユーザのビジネス機会が損なわれやすくなります。

幸いにして、今の案件は現行調査と実際の修正はフェーズを分けることを全員が認識していたため、まずは現行のリプレースのみが完了しました。
よって、その後に仕様修正分を集約し変更するだけですので、横目に見ても作業は簡単に見えます。

SIerは一気に詰め込んでしまえ!と、何でもかんでも混ぜ込みすぎます。一つ一つを順次やるほうが、後戻りも楽ですし、差分検出、過去からの不具合なのかを明確に順次トレースできます。
やり方、考え方はいつも、「急がば回れ」です。
posted by Kiruahさん at 22:00| Comment(0) | TrackBack(0) | ノウハウ

2012年04月01日

Excelキャプチャツール1.2をテスト中

そんなに必要となる場面もないように思うのですが、
Excelキャプチャツール1.2を実装、テスト中です。
近日中にリリースできるのではないかなと思います。

とりあえず修正点は以下の通りとなります。

・64ビット版ではエラーが出るため、事前に宣言をコメントとして用意しました。
64ビット版用のファイルを用意しても良いと思いますが、そうするとソースのダブルメンテになるので、それを解決できるような仕組みが欲しいです。

・PrintScreenキーによるショットも取得可能に変更にしました。むしろ、スクロール時のショット取得開始キーをShiftからPrintScreenに変更しました。
ショット取得開始キー、手動キーはF3セルの取得タイミングより選択できるようになっています。
CTRLの場合 : CTRL
Shiftの場合 : Shift
それ以外の場合 : PrintScreen

・スクロール終了検出がWordでは甘いことが多かったため、チェックの内容を変更しました。その代わり、少し低速です。。。

・別ショットを選択した場合、全てのショットを取得してから貼り付けるのではなくショットを取得、貼付けを繰り返すようにロジックを分割しました。


使う人も少ないとは思いますが、もう少々お待ち下さいませ。
私はこれなしではもう、Web画面のテストはできないですが。。。
posted by Kiruahさん at 14:02| Comment(0) | TrackBack(0) | 日記

2012年03月28日

Excel2003からExcel2010に移行するにあたって

Excel2003で構築したマクロをExcel2010に移行する場合、いくつか注意点がありましたので連携したいと思います。
あくまで色々と実験してみた結果の個人的な意見です。賛否両論あろうかと思いますので、適宜自分に都合のよいところを取り入れていただければ幸いです。
実験結果は都合により、載せられませんが。。。


1. Excel2003で行を右クリックした時の「形式を選択して貼付け」機能のコントロールIDは変更になりました。よって、このIDを使用しているコードはOffice2007以下かどうか判定し分岐する必要があります。
残念ながら、具体的なコードは都合により載せられないです。。。ごめんなさい。
755で全文検索して見つかる場合は要注意です。
他にも変更になったIDがありそうですが、簡単に調べた限りでは見つけられませんでした。

2. Excel2007から最大行数が増えました。よって、Excel2003で65536のようにハードコーディングしている場合(例えばデータ件数を調べる処理など)は、不具合がでやすいです。
必ずRows.Countを利用し、Excel2003でもExcel2010でも動作するように修正しましょう。
特に65537とかは気づきにくいので、これもRows.Count + 1などと変換しましょう。
推奨は6553で全文検索してみることです。

3. Excel2010では時々、VBAの実行時間が長すぎると、MsgBoxが表示されなくなります。
その場合はMsgBoxのオプションにあるシステムモーダル化(もしくはアプリモーダル化)オプションを指定します。(vbSystemModal もしくは vbApplicationModal)
vbSystemModalはExcel2003にもあるため、コンパイルエラーは発生しません。

4. xlsmに移行するか、xlsの互換モードでいるか悩むところです。が、xlsの互換モードのままを推奨します。なぜならば、xlsmに変換した場合、影響が変換したからか、Office2010のマクロの問題なのかの切り分けが困難であること。もしかしたら、Office2003で再現するか再度確認が必要になるかもしれないことがあること。そして、xlsxやxlsmはある程度の容量を超えると警告なしにデータが保存されないことがある点を考えると、互換モードのままをユーザに推奨するよう説得するのが得策です。

5. よくExcel2010のVBAは遅いと聞きます。大量データを用意し、自前のテキストロード処理を実装している場合、Excel2010のほうが厳密に測った結果速くなりました。
これの原因は互換モードとかではなく、単純に事前にVBAのコンパイルをしていないせいだと思います。コンパイルすれば共に最低でもほぼ同じ速度で動作する実験結果を得ました。

6. Excel2000から脈々と続く、Formで入れたコマンドボタンのサイズやフォント、位置が変わるバグは、Excel2003、Excel2007、Excel2010でも発動します。ただし発動条件はそれぞれのバージョンで違うようです。絶対に全ボタンを押下したり、スクロールさせてみてください。特にスクロール範囲をVBAで変更している場合は要注意です。その場合、Excel2010ではボタンサイズが勝手に変わりました。変わってしまうExcelファイルはどうあがいても変わってしまいます。その場合は問題ないファイルをベースに作りなおしたほうが早いです。試行錯誤したり、ボタンだけを再配置しても無駄のようです。

7. マクロの有効化は、Excel2003は毎回有効にするか聞いてきますが、Excel2010では一度確認するとリセットするまで有効にしたことを覚えてくれます。これは逆にユーザが操作性に疑問を持つので教育が必要です。

8. 印刷プレビューの描画範囲がExcel2010では小さくなるため、若干見にくくなることをユーザに理解させる必要があります。

9. 描画のずれは、Excel2003でもExcel2010でも同じように発生します。よって、Excel2003でギリギリ印刷する設定の場合はExcel2010ではずれる可能性がありますが、少し余裕をもたせたレイアウトの場合や自動でセル幅を広げる場合は、レイアウトのズレは気にしなくてよさそうです。

10. ファイルの保存先をCドライブの直下にしている場合は、変更させるほうが良いでしょう。特にWindows 7ではユーザのスキルレベルによっては動かないなどの苦情を聞くことがありそうです。よって、マニュアル等でマクロの配置先をユーザを納得させる必要があります。

最後に。

11. CommandBarsを使っているマクロについては検証していません。リボンインタフェースになったことで、もしかしたらそのままでは使えない可能性がありそうです。こちらは余裕ができれば別途検証してみたいと思います。

12. Office自体の操作性の違いについては、事前に違いが大きいことを説明してから、細かなことを説明し、バージョンが変わり大きく違うことになったと説明する方が良いでしょうか。先に細かなことを説明してから最後にバージョンが大きく変わって、操作性が変わったといっても納得されにくい気がします。説明の順序の問題ですが。
posted by Kiruahさん at 00:07| Comment(7) | TrackBack(0) | ノウハウ

2012年03月27日

Excelキャプチャツール1.1を実践投入しようとして感じた雑多なこと

Excelキャプチャツール1.1を実践利用してみて、やっぱりまだ環境依存が強いところがあるなと感じました。

まずは私の環境では、SHIFTを押すまでスクロールが開始しないのですが、Windows 7では勝手にスクロールが開始したりします。これはもしかしたら、非同期のキー状態取得方法が問題か、キーをそもそも変えたほうがいいかもしれません。

次に、これは想定外でしたがWindows7 64ビット、というか64ビットOSではPtrSafeをWin32API宣言部に追加する必要がある点です。

最後は、前はちゃんと撮れていたのですが、Windows xpとOffice2003にて、Excel2003が表示するMsgBoxにシステムモーダル + 全面表示オプションを指定するとどうやら、メッセージボックスをキャプチャできなくなるみたいです。これはMsgBox修正前は取得できていました。

こちらはWindows 7のOffice2010では取得できますし、画面全体キャプチャという逃げ道がありますが、$infoでメッセージボックスの中身を自動取得できないのは残念です。

これら3点について、対応を考えたいなと考えております。

またやっぱりスクロールは遅いです。ここはSendMessage(都合でPostMessageを使っていますが)で、スクロール幅を指定しながらスクロールさせるほうがスクロール幅が分かっているので楽なのですが、IEでのスクロール幅がうまくとれないので残念です。

ここはそろそろ自分のコーディング高速化技術をちょっと適用するタイミングが来てしまったかなとか思います。
先にGetDIBitsするか、それともBitBltの論理演算でやらせるか、色々とやり口はあります。
(というか、GetPixelが遅いのを知っていて使うなという話は置いておいて。。。)

ちょっと高速化も考えないといけないですね。
一部の画面はバージョン0.4まではきれいに撮れていたのになぁ。


あと、今日はUbuntu上でApache + PHP5 + MySQL を入れて、Apache2の設定をいじったり、WordPress + WP Document Revisionを導入してブログを導入したりしておりました。
Ubuntu、、、geditでもいいんだけど、viでもいいんだけど、Sakuraエディタに慣れすぎました。
Javaでテキストエディタを早めに作りたいなとモチベーションがアップした次第です。

作りたいものが多い。。。
特にSubversion + MySQLサーバ。これはGroongaと組み合わせて履歴も残しつつ、リポジトリの中身を全文検索させたいという個人的な野望が。。。
posted by Kiruahさん at 23:37| Comment(0) | TrackBack(0) | 日記

2012年03月24日

Excelによる画面ハードコピー取得ツール 1.1公開

まず最初に謝罪します。1.0のままでマニュアルを記載するつもりでしたが、スクロールに関する機能で仕様を一部変更しました。
その都合で1.1として公開しております。

まだまだ機能的には不完全かなと、時々キャプチャに失敗する等感じるところがあります。
そちらも随時修正していきたいと思います。
あわせてつたない文章ではありますが、マニュアルも同梱いたしました。

こちらのページからダウンロードください。


次はテストデータを自動的に作成するツールを開発したいと考えています。
できれば、DBやインタフェースするファイル(CSVや固定長、XML等)、MQなど、それぞれに正しく情報がマッチングしてデータができるツールが必要です。
今考えているツールがあれば、テストデータを100万件作るのも楽になるはず。

メーラーも欲しいところですが、まずはデータ作成ツールがほしいところです。
posted by Kiruahさん at 14:24| Comment(0) | TrackBack(0) | アナウンス

2012年03月22日

Excelによる画面ハードコピー取得ツール 1.0 ソフトウェアのみ先行公開

Excelハードコピーマクロのバージョン1.0について、
ソフトウェアのみ先行してリリースしました。

まだマニュアルはできておりませんので、
マニュアルができ次第正式にマニュアルを同梱してリリースしたいと思います。

マニュアル無しでもよろしい方は、こちらのページからダウンロードください。
posted by Kiruahさん at 22:13| Comment(0) | TrackBack(0) | アナウンス

2012年03月21日

Excelによる画面ハードコピー取得ツール 1.0は今週末ぐらいに公開予定です

別にそんなに需要が高いとも思えないのですが、
Excel画面ハードコピーの1.0を早ければ今週末、遅ければ来週末に行いたいと考えています。

今現在はマニュアルを製作中です。
同時に機能を少し追加したり、不具合の修正も実施しています。

1. FireFox / Google Chromeでは自動スクロールキャプチャできない点を改善しました。
2. ブラウザのURL、エクスプローラのアドレス、ウィンドウタイトル、メッセージボックスの内容をヘッダーに含められるようにしました。よって、キャプチャ時のウィンドウタイトルやURL、メッセージボックスの内容もテキスト形式で同時に保存できます。
3. スクロール時のスクロール終了の見切りを少し簡単にしました
4. スクロール外の範囲を間違えていました(FireFoxでは画面上部が削られてしまっていました。)

スクロール機能についてはVBA自体のせいもあろうかとは思いますが、やっぱり遅いです。
高速化するためのアイディアはありますが、まずは動作するものを作りたいと考えています。
そして、その後に別のものが必要で、それを先に作ってから高速化と、高速化は後回しになります。
ごめんなさい。

期待している方はいないでしょうが、リリースまでもう少しお待ちくださいませ。
そして、このツールは完全にIT業界の人間向けになってしまっております。
というか、そのような方向けのツールを目指して作っていたわけですが。。。
posted by Kiruahさん at 22:19| Comment(0) | TrackBack(0) | 日記

2012年03月20日

退官パーティ&伊勢神宮へ

3/18に大学院時代の恩師が退官されるとのことで退官パーティに出席してきました。
思ったよりも多くの方が参加されており、厳しいながらも学生想いの大変素晴らしい先生だったんだなと思います。
先生も元気そうで何よりでした。
これからもご活躍されるとのことで、より一層のご活躍をお祈りしております。

さて、それに便乗し、ついでに奥さんと伊勢神宮へ3/17から旅行に行って来ました。
かなり弾丸で、しかも私にとっては珍しく雨がずっと降る旅行になりました。
やっぱり雨だと移動が大変だったのですが、とても楽しかったです。

まずは外宮へ。そして内宮へ行き、お参りしてきました。奥さんは御朱印帳に書いてもらっていましたが、思ったよりシンプルでびっくりしました。
その後、おかげ横丁で食べ歩きしました。少し太りましたがとても楽しかったです。
弾丸旅行のおかげで、猿田彦神社に行くには少し短いし、駅に向かうにはちょっと長いし、「帯に短し襷に長し」ではありませんが、「行くには短し帰りには長し」という状態でしたが、そのまま宇治山田駅のショッピングセンターとやらに行って来ました。
その後は駅周辺で写真をとったり、ぶらぶらして名古屋に戻り一泊しました。

翌日は名古屋から。朝は一緒に名古屋城に行きました。
予想と違い観光メインの城になっており、逆に設備が発展していて残念でした。
時間がないので簡単にまわって、私は退官パーティーへ。
奥さんはさらに名古屋旅行に。

その後名古屋で合流し帰りました。

弾丸だったのでかなり疲れましたが、とても楽しい土日を過ごすことが出来ました。
posted by Kiruahさん at 10:17| Comment(0) | TrackBack(0) | 日記