2010年1月21日木曜日

Excel+Word差し込み印刷覚え書き

案内葉書の宛名だとか、研究会などの領収書を作るとき、ExcelなりAccessなりでデータを作っておいてWordの文面に流し込む、いわゆる「差し込み印刷」は結構便利。

ただし、使い方をきちんと把握してないと差し込み漏れが起きたり、変なページが大量に印刷されて紙が無駄になる。で実際にトラブったので、未来の自分のために覚え書きを残しておく。

今回は領収書を差し込み印刷で作ろうとしてトラブったのだが、流れは以下の通り。

1. テンプレート文書の用意

Microsoft Office Onlineから、Word用の領収書テンプレートをダウンロード。紙を節約したいということもあり、A4の1ページに4枚印刷できるものを選択。このテンプレートを使って新規の文書を作成。

2. 差し込むデータソースの選択

Word2007の場合、「差し込み文書」メニューの中にある、「宛先の選択」で「既存のリストを使用」を選択すると、ExcelやAccessといったデータソースを選択するダイアログが表示される。今回の場合は、ここで所定のデータが含まれているExcelファイルを選択。この後、条件を指定して(あるいは手動で)差し込みデータを絞り込むことも可能。

3. 差し込みフィールドの挿入

データソースの各フィールド(宛先・金額・但し書きなど。Excelでは各列というべきか)は対応する差し込みフィールドに埋め込まれる。ダウンロードしたテンプレートそのものには差し込みフィールドが無いので、フィールドを今作った文書に埋め込む。Word 2007の場合、上記と同じ「差し込み文書」メニューに「差し込みフィールドの挿入」があり、これを押すとデータソース中の各フィールドが表示されるので、例えば宛名なら宛名を差し込むべき位置にテキストカーソルを持って行った状態で「宛名」を選択する。そうすると文書上に≪宛名≫という表示が現れる。

本当に差し込まれるかどうかを確認するには、「結果のプレビュー」を押す。データソースの各フィールドが、差し込みフィールドの位置に埋め込まれた状態で画面表示される。これ自体は文書に影響を与えない(もう一度プレビューボタンを押すと元に戻る)。

ここではまった点が2つ。第1に、1ページに1データであれば問題無いのだが、今回のように1ページに4データを差し込む必要がある場合、ページの途中で「次のデータに進む」ことを明示しないといけない。これには、「ルール」のひとつであるNext Recordというものを領収書の切り替わりの場所に埋め込めばよい。ルールもメニューから選択でき、≪Next Record≫という形で画面上に現れる。

ここで、いい気になってすべての領収書の最後に≪Next Record≫ルールを入れてしまったのが間違い。ちょっと冷静になれば分かることだが、元々1ページごとに自動的に次のレコードに進むのだから、1ページ中の「最後の領収書」には≪Next Record≫を書く必要がない。というか、書くと誤ってレコードを1つ飛ばしてしまうのだ。今回は1ページ4レコードずつなので、(4n+1)番目のレコードが全部印刷されない、という結果になってしまった。

はまった点その2。使用したテンプレートでは、額面を表示する部分のデザインを良くするためにテキストボックスを使っている。ところが、ここに額面の差し込みフィールドを指定すると、そこだけは各レコードごとの額面が反映されず、何故か特定のレコードの額面が繰り返し表示されてしまう。

たぶん1つのページにおいて、テキストボックス中の差し込みフィールドが参照される順番が(画面上の見た目と異なっていて)特殊なんだと思うのだけど、具体的にどうすれば修正できるのかはまだ分かっていない。テキストボックスの代わりにレイアウト枠というのを使うとうまく行くという話もあるが、使用したテンプレート中のテキストボックスを直接レイアウト枠に変換すると、領収書自体のレイアウトがガタガタに崩れてしまう。修正するのも面倒なので、まだ検証はしていない。

以上、備忘録。

2010年1月13日水曜日

そうでしたquery-sourceでした

研究室のリゾルバ(BIND9)は普段、親玉のサーバを見るようにforwarders設定しているのだけれど、ちょっとした実験のためにforwarders設定を止めることにした。

ところが、ルータのファイアウォール設定を(53番ポートについて)開けても、応答が帰ってこない。学生と一緒に変だ変だと悩んでいたのだけど、いろいろ調べてquery-sourceっつー設定があることに気づいた。

古いBINDだと問い合わせは53番ポートを介すため、INBOUNDの53番を開けておけばOKだった。ところが新しいBINDでは問い合わせにランダムな非特権ポートを使う標準設定になったので、開ける場所が特定できない。ということで、query-sourceを使ってポートを固定し、そこをファイアウォールで開けた。うまくいくじゃん、良かった良かった。

【Feb.04, 2010追記】
これはあくまでファイアウォールがBINDのport randomizationに対応していない場合、かつ実験用ということで。常時運用の場合、キャッシュポイズニング対策のためにもポートを固定すべきではありません。

2010年1月6日水曜日

Twitterの更新情報を貼ってみた

Twitterが面白そうなので、ちょっと使ってみている。

で、ただつぶやいていてもしょうがないので、Blogger側に更新内容を表示させるウィジェット(Blogger的な用語だとガジェット?)を貼り付けてみた。

最初はBloggerが用意している……というか第三者が作って提供したらしい "Twitter Updates" というガジェットを使ってみた。Bloggerのレイアウト画面上にある「ガジェットの追加」をクリックして、出来合いのガジェットから選択すればOK。ところが、こいつを貼り付けると何故か他の人のツイートが表示されてしまう。"Twitter Updates Blogger" で検索すると、同じようなトラブルが起きているようだが、具体的にどう解決したのか書いていない。

しょうがないのでこっちのガジェットは諦め、Twitter側で用意しているウィジェットを使ってみることにした。「自分のサイト」メニューで表示される一覧から、プロフィールウィジェットを選択すればよい。ユーザ名の指定、Preferences、デザイン、サイズを適当に選び、「完了&コード取得」を押すとブログに埋め込むべきコードが表示される。Bloggerの場合、ご丁寧にBloggerへ貼り付けるボタンが表示されるのでこいつを使う。

ただしFirefoxのアドオンでNoScriptを使っていると、ボタンを使って貼り付け操作をした場合、XSS的な挙動を示すためにブロックされてしまう。ここは信じて再読み込みを許可するしかない。こちらのウィジェットは、問題無く自分のつぶやきが表示された。

英語配列のノートPCで日本語配列設定にしちゃった時に、アンダースコアを入力するTips

US配列のLG gram SuperSlimを購入した。で、Windowsの初期セットアップを始めたところ、最初に選択できるキー配列はMicrosoft IME(まあ要するに日本語配列)だけ。で、その後に「追加のキー配列」を選択できるのだが、後でやればいいやと思ってスルーしてしま...