セルの表示形式を
0;-0;;@
にする。
小数で表示したい場合は
0.00;-0.00;;@
のようにする。
ちーたんタッチボードでボードをカスタマイズされている方はもうご存知かもしれませんが、ちーたんタッチボードではキー1つに対して複数のキー押下を割り当てることができます。設定の仕方とか説明すると長くなってしまいますのでホームページのほうを見ていただければと思いますが、キーのパラメータの「Processes」に値を設定することによって、その動作を行うようになります。
で、Excel のセルに現在日時を1発入力させるには以下のパラメータを設定することによって可能です。Processes はあくまでもキーの同時処理がメインなので、順番に処理させるのは得意ではないのですが、少し裏技的な設定で可能です。
[{"KeyType": "LeftCtrl"},{"KeyType": "OemSemicolon"},{"KeyType": "LeftCtrl", "ExecuteTiming": "Pressed"},{"KeyType": "Space"},{"KeyType": "LeftCtrl"},{"KeyType": "Colon"},{"KeyType": "LeftCtrl", "ExecuteTiming": "Pressed"},{"KeyType": "Enter"},{"KeyType": "Up"}] |
個人的にはテンキーはめったに使わないのでどういったレイアウトが使いやすいかがあまりわからないのですが、Ver 0.1 を考えてみました。(現在配布されているのは Ver 0.01)
まず1つめ。
Ver 0.01 とほとんど変わっていないのですが、カンマだった部分を 00 にしてみました。テンキーについていろいろ調べてみると、00 の部分が大きく2パターンになっていて、00 のキーか 0 のキーが2マス分となっているようでした。カンマについては電卓では自動的につくから使わないし、Excel でも書式設定すればカンマは自動でつくのでわざわざ入力することはないってことなんでしょうね。
さて、テンキーを見ると必ずといっていいほど存在するキーとして「NumLock」があります。一応 NumLock キーは定義してあるのですが、おそらくほとんどの環境では押してもなんの効果もないと思われます。たぶんですが、NumLock は ON のときに物理キーボードのテンキーの送信コードを切り替えて送っているため、ソフトウェア上で押したところで他のキーの送信コードが変わるわけではないのでなんの意味を持たないのではないかと思います。
ということで、NumLock の代わりにボードを切り替えて NumLock を押しているかのように見せかけるようなボードを考えてみました。
まあ、大体は NumLock を押したときのキー配置と同じようにしてます。00 のところはメインボードから外したカンマを、上の方は Excel でよく使う入力キャンセルの Esc, セル横移動の Tab, イコール、右側には「元に戻す」「やりなおし」を配置してみました。ちなみに真ん中の「5」はスペースにする予定です。
現在配布されているちーたんタッチボードにはボードの切り替え(前後)のほかに指定した識別名を持つボードへのジャンプ切り替え機能もあるので、NumLock キーをそれに置き換えるという方法もあるのですが、NumLock キー本体の価値が 0 なのかどうかまだわからない状態なので、とりあえず今までどおり通常のボード切り替えとして配布する予定です。
あと、Ver 0.01 ではテンキーは右手用だけでしたが、Ver 0.1 では左手用も配布します。
]]>sorceryforce.net の方で Tips 追加しました。少し Tips が増えてきたので少しグルーピングしようかなーと思ってますが、まだ実装できていないのでもうしばらくしたらやります。Tips は一部ブログから書き直して転載しているものもあります。
]]>
環境
SQL Server 2005, 2008, 2008 R2
SSIS (SQL Server Integration Services) の データクローから「Excel ソース」を使用すると Excel ファイルからデータを取り込むことができます。Excel の中身がヘッダ1行と2行目以降がデータという一般的なテーブルレイアウトであれば、そのままデータベースに取り込めるので結構便利です。
しかし、実際に使ったことがある方は経験されていることが多いと思いますが、Excel のデータの中身が変わると、SSIS デザイナ上でなぜか型が一致しないという警告が出ることがあります。一度詳細を開いて更新すればもとに戻りますが、Excel の中のデータが変わるとまた警告がでる、の繰り返しになります。
また、場合によっては Excel の中にはきちんとデータがあるにも関わらず、実際に読み込んでみると null で読み込まれる場合があります。
これらの現象は SSIS の問題ではなく、SSIS が Excel の読み込みコンポーネントとして使用している「Excel ISAM ドライバ」の仕様の問題で発生します。これは「Microsoft Jet 4.0 OLE DB Provider」でも「Microsoft Office 12.0 Access Database Engine OLE DB Provider」でも同様です。
このドライバが何をしているかというと、データを読み込む際にわざわざ型指定して読み込まなくても、Excel の中身を見て自動的に型を判別してくれるという便利そうな処理をしていますが、その代り、データの中身の型がころころ変わると読み込む際の型情報も変わってしまいます。そのため、SSIS 上のデザイナでも、事前に型を決定しているにもかかわらず、Excel の中身の型が変わってしまうことによって型が不一致であるという警告が表示されるのです。
このあたりの使用は下記のサイトをみるとわかりやすいかと思います。
簡単にまとめると、Excel の上位8行を読み込み、その列で最も多い型を読み込む型として使用するようになっています。例えば8行内に、文字列が3つ、数値が5つあればその列は「数値型」になります。逆に文字列が6つ、数値が2つであればその列は「テキスト型」になります。同じ個数の場合は「数値型」が優先されます。
ちなみに SSIS で説明していますが、ISAM ドライバーの問題なので、これを使うプログラムはすべて同じ問題を抱えています。
ではこれを確実に回避するにはどうすればいいかというと、少し手を込んだことをしなければいけません。
まず、今回の対応方法としては前提条件としてすべての列を文字列として読み込みます。もともと数値の列も文字列として読み込むので、読み込んだ後は数値に変換する必要があります。これは臨機応変に対応してください。
ISAMドライバーで読み込む際、「IMEX」というパラメータを指定することができます。これに「1」を指定すると「インポート モード」になり、読み込むすべてのデータがテキストになります。ただし、Excel 内の指定した列のデータがすべて数値の場合は数値になってしまうので注意してください。一つでも文字列があれば読み込む型は文字列になります。
IMEX パラメータは「接続文字列」で指定します。SSIS デザイナで接続文字列を編集する場合は、接続マネージャーで作成した Exce ソースを右クリックし、プロパティを開きます。プロパティエリアに「ConnectionString」という項目がありますので、その文字列を直接編集します。GUI で設定するパターンもありますが、こちらは IMEX が設定できないので注意してください。
IMEX パラメータは下記のように設定します。一番後ろにある「Extended Properties」内にセミコロン区切りで「IMEX=1」を追加します。
接続文字列については以前まとめましたのでこちらのページを参照してください。
さて、これですべての列は文字列として読み込める「はず」なのですが、前述したとおり、Excel にすべて数値が入力されていた場合、または何も入力されていない場合はどうしても列の型が数値として読み込まれてしまいます。ですので、Excel の1行目か2行目に「1行すべて文字列だけを入力した行」を入れるようにします。こうすればほぼ間違いなく文字列として読み込めるようになります。読み込みもとの Excel ファイルにもよりますが、テキスト行を作ってその行だけ非表示にすれば編集上は問題ないかと思います。
まあ、個人的には Excel で読み込むのではなく、型を意識しない CSV ファイルのほうがよかったりもするんですけどね。Excel 上で編集すると「0000」とテキストとして貼り付けたつもりが数値として 0 になってしまってて気づかなかったりとかあるので。実は CSV も CSV でダブルクォーテーションのエスケープが考慮されてなかったりとかいろいろ問題はありますが (^^;)
]]>Excel で作成した印刷用の資料で各ページの上下左右に枠線を表示させたい場合があると思います。上部、左右については改ページされていても常に枠線を設定しておくことが可能ですが (行挿入しても左右の線は自動的に設定される)、各ページの下部に枠線を入れるには各ページごとに改ページのライン位置に枠線を設定しなくてはなりません。ですが、実際にやってみるといろいろと面倒なことがわかります。
ここでは下部の枠線を意識せずに自働的に枠線を設定する方法を、条件付き書式を使う方法で設定手順を説明します。
【環境】
【条件】
【手順】
ネットワークが特殊な環境で2383ポートが使用できず、80(または443)ポートが使用可能な場合、HTTP経由でキューブにアクセスする方法があります。
詳しくは公式サイトに載っていますので手順通りに設定すれば問題ないかと思います。
※SQL Server 2012 へのリンクページですが、デフォルトのページが一部英語であったため、すべて日本語になっている上記のリンクに飛ばしています。
上記のリンク先の説明で気をつける点があります。
まず「msmdpump.dll」「msmdpump.ini」「Resources」の配置先が「C:inetpubwwwrootolap」と「C:inetpubwwwrootolapisapi」の2パターンが書いてありますが、isapiフォルダはなくても問題ありません。接続先のURLを短くしたいのであれば olap フォルダの直下に上記の3つを入れてしまった方がいいでしょう。
もう一点「msmdpump.ini」ファイル内の「ServerName」のサーバー名は「IISから見たキューブ(Anarysis Services)があるサーバーの名前」です。ですので、IISとキューブが同じサーバーにある場合はそのまま「localhost」で問題ありません。勘違いして外から見たIISサーバー名を指定するとつながらなくなってしまう場合があります。私はこれで結構はまってしまいました。
]]>