2019年6月4日火曜日

ODS EXCELで「ヘッダー・フッター」の書式を設定する




以前、ODS EXCELでヘッダーとフッターを設定する方法を紹介しました。



上の記事の番外編でちょっとしたテクニックを紹介したいと思います。



これはSASではなくExcel側の機能なんですが、以下の「VBAコード」や「書式コード」と呼ばれるものを用いて、ヘッダー・フッターに書式を設定することが出来ます。

  書式コード    機能    
 &L 文字を左側に表示する 
 &C 文字を中央部に表示する
 &R 文字を右側に表示する
 &B 文字を太文字にする
 &I 文字を斜体にする
 &U 文字を下線付きにする
 &"フォント名" 指定したフォントにする(ダブルクォーテーションで囲って指定)
 &Kカラー 指定したカラーにする(16進カラーコードを指定)
 &nn 指定したフォントサイズにする(nnには2桁の数値を指定)
  VBAコード    機能    
 &D 現在の日付を表示
 &T  現在の時刻を表示
 &Z ファイルパスを表示
 &F   ファイル名を表示
 &A シート名を表示
 &P   ページ番号を表示
 &N  総ページ数を表示
 ...等々





title '&Lあいうえお&Rかきくけこ';
footnote '&"Arial"&P/&"Arial"&N';

ods excel file="出力するパスを指定\test.xlsx" options(  flow = "table" );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;



注意点

文字をダブルクォーテーションで囲むと「&L」などのコードがマクロ変数と認識されちゃいます。

title "&Lあいうえお&Rかきくけこ";

シングルクォーテーションで囲んでマクロ変数に見られないようにしときましょう。



また、「&」を含む文字自体をヘッダー・フッターに設定したい場合は注意。
例えばヘッダーに「A&B」と設定した場合、「&B」が太文字の書式コードとして誤認されます。

title 'A&B';

「A&&B」とすれば、Excelの印刷プレビュー等で見た時に「A&B」のまま、かつ太文字にならずに表示できます
(内部では「A&&B」のまま)


とにもかくにも、「&」まわりはExcel側の挙動なので、詳細はExcelのヘッダー・フッターに設定できる書式コード・VBAコード、として調べてみて下さい。




落とし穴


「TITLEステートメント」または「FOOTNOTEステートメント」を使ってヘッダー・フッターを設定する場合は先ほどの方法でOKでしたが、、


今度は以下のように「PRINT_HEADER」または「PRINT_FOOTER」を使ってヘッダー・フッターを設定した場合は、、

title;
footnote;

ods excel file="出力するパスを指定\test.xlsx" options(
    
flow = "table"
    print_header = '&Lあいうえお'
    print_footer = '&Rかきくけこ' );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;


生成されたExcelを開こうとすると、上のようなメッセージが出てしまいます。なんかぶっ壊れたらしい。


SASのバージョンにもよるのかもしれません。もし上のようにぶっ壊れてしまったら、以下のように「&」を「&」に置き換えるとうまくいきます。

title;
footnote;
ods excel file="出力するパスを指定\test.xlsx" options(
    
flow = "table"
    print_header = '&Lあいうえお'
    print_footer = '&Rかきくけこ' );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;


ods excel close;




2 件のコメント:

  1. SASユーザ総会での発表ありがとうございました。大変興味深かったです。
    SASによると、&が&にエスケープ処理されない件についてはM6で修正されているそうです。また、M4、M5だと、&Uを指定すると何故か全ての&をエスケープしてくれるので、固定で入れておくと便利かもしれません。参考まで

    返信削除
    返信
    1. じゅぺさん、コメントありがとうございます。

      先ほど確認してみましたところ、動作しました!
      ご教示いただき有難う御座います、
      今後ともよろしくお願いいたします!

      削除