数値、日付および通貨の書式設定
数値のフォーマット
「パブリッシャ」では、数値書式を指定するための2つのメソッドがサポートされています。
-
Oracleのformat-number関数(推奨)。
-
Microsoft Wordのネイティブ数値書式マスク。
ノート:
ネイティブXSLのformat-number関数を使用して、数値を書式設定することもできます。 詳細は、「ネイティブXSL番号の書式設定」を参照してください。
次のいずれかのメソッドのみを使用してください。 両方のメソッドを使用して数値書式マスクを指定した場合、データは2回書式設定され、予期しない動作が発生します。
グループ・セパレータと数値セパレータは、テンプレート・ロケールに基づいて実行時に設定されます。 en-US以外のロケールで作業している場合、またはテンプレートで翻訳が必要な場合は、Oracle書式マスクを使用します。
データ・ソース要件
Oracle書式マスクまたはMicrosoft書式マスクを使用するには、データ・ソースの数値は、書式を適用せずにRAW書式である必要があります(たとえば、: 1000.00 ). ヨーロッパ諸国の番号が書式設定されている場合(例: : 1.000、00)の場合、フォーマットは機能しません。
「パブリッシャ」パーサーには、JavaのBigDecimal文字列表現が必要です。 これは、オプションの符号("-")のあとに0個以上の10進数のシーケンス(整数)が続き、オプションでそのあとに小数部が続き、オプションで指数が続きます。 次に例を示します: -123456.3455 e-3.
ローカリゼーションに関する考慮事項
en-US以外のロケールで作業している場合、またはテンプレートで翻訳が必要な場合は、Oracle書式マスクを使用します。
Microsoft書式マスクは、テンプレートが異なるロケール設定で実行される予期しない結果を生成する可能性があります。
書式マスクに「%」を含めないでください。パーセント記号のロケーションは数値表示に固定され、目的のロケーションはロケールに応じて数値の先頭または末尾に固定されます。
Microsoft数値書式マスクの使用
数値を書式設定するには、「テキスト・フォーム・フィールド・オプション」ダイアログで使用可能なMicrosoft Wordのフィールド書式設定機能を使用します。
フォーム・フィールドに数値書式を適用するには:
- プレースホルダー・フィールドの「フォーム・フィールド・オプション」ダイアログを開きます。
- 「タイプ」をNumberに設定します。
- オプションのリストから適切な「数値書式」を選択します。
サポートされているMicrosoft書式マスク定義
いくつかの書式マスク定義を使用して、出力を標準化できます。
次の表に、サポートされているMicrosoft書式マスクの定義を示します。
記号 | 事業所 | 意味 |
---|---|---|
0 |
数値 |
桁 明示的に設定された各0は、その位置にほかの番号が入っていない場合に表示されます。 例: 書式マスク: 00.0000 データ: 1.234 表示: 01.2340 |
# |
数値 |
桁 #に設定すると、受信データのみが表示されます。 例: 書式マスク: ##.#### データ: 1.234 表示: 1.234 |
. |
数値 |
小数点セパレータの位置を決定します。 使用される小数点記号は、テンプレート・ロケールに基づいて実行時に決定されます。 例: 書式マスク: #,## 0.00 データ: 1234.56 英語ロケールで表示: 1, 234.56 ドイツ語ロケールで表示: 1.234,56 |
- |
数値 |
マイナス数値のマイナス記号の配置を決定します。 |
, |
数値 |
グループ化セパレータの配置を決定します。 使用されるグループ化区切り記号は、テンプレート・ロケールに基づいて実行時に決定されます。 例: 書式マスク: #,## 0.00 データ: 1234.56 英語ロケールで表示: 1, 234.56 ドイツ語ロケールで表示: 1.234,56 |
E |
数値 |
mantissaとexponentを科学表記で区切ります。 例: 0.###E+0のプラス記号は、常に正の数で表示されます 0.###E-0プラス記号は正の数値には表示されません |
; |
サブパターン境界 |
正と負のサブパターンを区切ります。 表の後のノートを参照してください。 |
% |
プレフィクスまたはサフィクス |
100で乗算し、パーセントとして表示 |
' |
プレフィクスまたはサフィクス |
プリフィクスまたはサフィクスの特殊文字を引用符で囲みます。 |
ノート:
サブパターン境界: パターンには、正および負のサブパターンが含まれます(例: "#,##0.00;(#,##0.00) ")。 各サブパターンには、プリフィクス、数値部およびサフィクスが含まれます。 負のサブパターンはオプションです。 存在しない場合、先頭にローカライズされたマイナス記号(ほとんどのロケールでは「-」)が付いた正のサブパターンが、負のサブパターンとして使用されます。 つまり、「0.00」のみは「0.00 ;-0.00」と同じです。 明示的な負のサブパターンがある場合、負のプレフィクスとサフィクスを指定するだけです。 桁数、最小桁数およびその他の特性は、すべて正のパターンと同じです。 つまり、"#、## 0.0 #;(#)"は、"#,##0.0#;(#,##0.0#) "と同じ動作を正確に生成します。日付の書式設定
「パブリッシャ」では、日付書式を指定するための3つのメソッドがサポートされています。
-
Microsoft Wordのネイティブ日付書式マスクを使用して、明示的な日付書式マスクを指定します。
-
Oracleのformat-date関数を使用して明示的な日付書式マスクを指定します。
-
Oracleの抽象日付書式マスクを使用して、抽象日付書式マスクを指定します。 (多言語テンプレートに推奨されます。)
1つのメソッドのみを使用します。 OracleとMSの両方の書式マスクが指定されている場合、データは2回フォーマットされるため、予期しない動作が発生します。
データ・ソース要件
Microsoft書式マスクまたはOracle書式マスクを使用するには、XMLデータ・ソースの日付が標準書式である必要があります。
フォーマットは次のとおりです:
YYYY-MM-DDThh:mm:ss+HH:MM
where
-
YYYYは年
-
MMは月
-
DDは日
-
Tは、日付と時間コンポーネントのセパレータです
-
hhは、24時間形式の時間です
-
mmは分
-
ssは秒です
-
+HH:MMは、協定世界時(UTC)またはグリニッジ標準時からのタイム・ゾーン・オフセットです
この構成の例は次のとおりです:
2005-01-01T09:30:10-07:00
"T"より後のデータはオプションであるため、次の日付: 2005-01-01いずれかの日付書式オプションを使用して書式設定できます。
ノート:
時間コンポーネントおよびタイム・ゾーン・オフセットがXMLソース日付に含まれていない場合、「パブリッシャ」はUTCの12:00 AM (つまり、yyyy-mm-ddT00:00:00-00:00)を表します。
Microsoft日付書式マスクの使用
日付値を書式設定するには、「フォーム・フィールド・オプション」ダイアログで使用可能なMicrosoft Wordのフィールド書式設定機能を使用します。
フォーム・フィールドに日付書式を適用するには:
- プレースホルダー・フィールドの「フォーム・フィールド・オプション」ダイアログ・ボックスを開きます。
- 「タイプ」を日付、現在の日付または現在の時間に設定します。
- オプションのリストから適切な「日付書式」を選択します。
「日付書式」フィールドにマスクを指定しない場合、抽象書式マスク"MEDIUM"がデフォルトとして使用されます。
サポートされているMicrosoft日付書式マスク:
- d - 月の日。 1桁の日には先頭にゼロがありません。
- dd - 月の日。 1桁の日には先頭にゼロが付きます。
- ddd - AbbreviatedDayNamesで定義された曜日の短縮名。
- dddd - DayNamesで定義されている曜日の完全な名前。
- M - 数値の月。 1桁の月には先頭にゼロがありません。
- MM - 数値の月。 1桁の月には前ゼロがあります。
- MMM - AbbreviatedMonthNamesで定義されている月の短縮名。
- yy - 世紀のない年。 世紀のない年が10未満の場合、その年は先頭にゼロで表示されます。
- yyyy - 4桁の年。
- gg - 期間または年号。 書式設定する日付に期間または年号文字列が関連付けられていない場合、このパターンは無視されます。
- h - 12時間制の時間。 1桁の時間には前ゼロがありません。
- H - 24時間制の時間。 1桁の時間には前ゼロがありません。
- HH - 24時間制の時間。 1桁の時間には先行ゼロがあります。
- m - 分。 1桁の分には先頭にゼロがありません。
- mm - 分。 1桁の分は前にゼロが付きます。
- s - 2番目。 1桁の秒には先頭にゼロがありません。
- ss - 2番目。 1桁の秒は先頭にゼロが付きます。
- f - 秒単位の小数を1桁で表示します。
- ff - 2桁で表される秒の小数を表示します。
- fff - 3桁で表される秒の小数を表示します。
- ffff - 4桁で表される秒の小数を表示します。
- fffff - 5桁で表される秒数の分数を表示します。
- ffffff - 6桁で表される秒数の分数を表示します。
- fffffff - 7桁で表される秒数の分数を表示します。
- tt - AMDesignatorまたはPMDesignatorで定義されたAM/PM指示子(ある場合)。
- z - システムの現在のタイムゾーンのタイムゾーン・オフセットを時間単位で表示します。 (この要素は書式設定にのみ使用できます)
- zz - システムの現在のタイムゾーンのタイムゾーン・オフセットを時間単位で表示します。 (この要素は書式設定にのみ使用できます)
- zzz - システムの現在のタイムゾーンのタイムゾーン・オフセットを時間と分単位で表示します。
- : - TimeSeparatorで定義されたデフォルトの時間セパレータ。
- / - DateSeparatorで定義されたデフォルトの日付セパレータ。
- ' - 引用符で囲まれた文字列。 2つの'文字の間の任意の文字列のリテラル値を表示します。
- " - 引用符で囲まれた文字列。 2つの"文字の間の任意の文字列のリテラル値を表示します。
デフォルト・フォーマット・マスク
MSメソッドまたはOracleメソッドのいずれかで書式マスクを指定しない場合は、マスク定義を省略してデフォルトの書式マスクを使用できます。 デフォルトの書式マスクは、OracleのMEDIUM抽象書式マスクです。
Microsoftメソッドを使用してデフォルト・オプションを使用するには、「タイプ」をDateに設定しますが、「テキスト・フォーム・フィールド・オプション」ダイアログの「日付書式」フィールドは空白のままにします。
Oracleメソッドを使用してデフォルト・オプションを使用するには、"format-date"関数コールにマスク定義を指定しないでください。 たとえば:
<?format-date:hiredate?>
Oracle抽象書式マスク
抽象日付書式マスクは、I18Nライブラリの日時書式のデフォルトの実装を反映します。
これらのマスクのいずれかを使用する場合、生成される出力は、レポートに関連付けられているロケールによって異なります。
次の構文を使用して、抽象マスクを指定します:
<?format-date:fieldname;'MASK'?>
ここで、「フィールド名」はXML要素タグで、
MASKはOracle抽象フォーマット・マスク名です
たとえば:
<?format-date:hiredate;'SHORT'?>
<?format-date:hiredate;'LONG_TIME_TZ'?>
<?format-date:xdoxslt:sysdate_as_xsdformat();'MEDIUM'?>
次の表に、抽象書式マスクと、USロケール用に生成されるサンプル出力を示します。
マスク | USロケールの出力 |
---|---|
SHORT |
2/31/99 |
MEDIUM |
1999年12月31日 |
LONG |
1999年12月31日(金) |
SHORT_TIME |
12/31/99 6:15 PM |
MEDIUM_TIME |
1999年12月31日午後6:15 |
LONG_TIME |
1999年12月31日(金)午後6時15分 |
SHORT_TIME_TZ |
12/31/99 6:15 PM GMT |
MEDIUM_TIME_TZ |
Dec 31, 1999 6:15 PM GMT |
LONG_TIME_TZ |
1999年12月31日(金)午後6時15分(GMT) |
レポートでのシステム日付(sysdate)の表示
sysdateを正しく表示するには、<?format-date:?>
コマンドで関数xdoxslt:sysdate_as_xsdformat()を使用します。
たとえば:
<?format-date:xdoxslt:sysdate_as_xsdformat();'MEDIUM'?>
<?format-date:xdoxslt:sysdate_as_xsdformat();'LONG'?>
<?format-date:xdoxslt:sysdate_as_xsdformat();'LONG_TIME_TZ'?>
<?format-date-and-calendar:xdoxslt:sysdate_as_xsdformat();
'LONG_TIME';'ROC_OFFICIAL';?>
フィールドへの通貨書式の適用
フォーマット通貨関数のパラメータを理解し、通貨書式をフィールドに適用するには、次のステップに従います。
format-currency関数のパラメータは次のとおりです:
<?format-currency:Amount_Field;CurrencyCode;displaySymbolOrNot?>
where
Amount_Field
は、データの金額値を保持するXML要素のタグ名を取得します。
CurrencyCode
は、静的値に設定することも、動的に設定することもできます。 レポートの値が静的である場合は、ISO 3文字の通貨コードを一重引用符で囲んで入力します(例: 'USD')。
値を動的に設定するには、ISO通貨コードを保持するXML要素のタグ名を入力します。 通貨コードを含む要素がデータに存在する必要があることに注意してください。
実行時に、Amount_Field
は、レポート・プロパティで通貨コードに対して設定した書式に従って書式設定されます。
displaySymbolOrNot
は、次のいずれかの値を取ります: true
またはfalse
。 true
に設定すると、CurrencyCodeの値に基づいて通貨記号がレポートに表示されます。 通貨記号を表示しない場合は、false
を入力するか、パラメータを指定しないでください。
例: レポートでの複数通貨書式の表示
次の表に、レポート・プロパティで様々な通貨書式を設定したことを前提とした例を示します。
通貨コード | フォーマット・マスク |
---|---|
USD |
9G999D99 |
INR |
9G99G99G999D99 |
この例では、通貨コードを動的に設定する必要はありません。 XMLデータには次の要素があります:
<TOTAL_SALES>
<US_SALES>8596526459.56</US_SALES>
<INDIA_SALES>60000000</INDIA_SALES>
</TOTAL_SALES>
テンプレートにこれら2つの合計フィールドを表示します。
US_SALESの場合、「パブリッシャ」プロパティ・フィールドの構文は次のとおりです:
<?format-currency:US_SALES;'USD'?>
実行時には、次の図に示すようにフィールドが表示されます:
例: 単一レポートでの複数通貨コードの表示
この単純なXMLコードには、Amount (Trans_amount)を含む要素と、ISO通貨コード(Cur_Code)を含む要素が含まれます。
<ROW>
<Trans_Amount>123</Trans_Amount>
<Cur_Code>USD</Cur_Code>
</ROW>
<ROW>
<Trans_Amount>-456</Trans_Amount>
<Cur_Code>GBP</Cur_Code>
</ROW>
<ROW>
<Trans_Amount>748</Trans_Amount>
<Cur_Code>EUR</Cur_Code>
</ROW>
<ROW>
<Trans_Amount>-987</Trans_Amount>
<Cur_Code>JPY</Cur_Code>
</ROW>
これらの各金額を適切な通貨記号で表示するには、金額を表示するフィールドのテンプレートに次の情報を入力します:
<?format-currency:Trans_Amount;Cur_Code;'true'?>
次の図は、生成される複数通貨レポートを示しています: