数値、日付および通貨の書式設定
数値の書式設定
Publisherでは、数値の書式を指定するために、2つの方法がサポートされています。
-
Oracleのformat-number関数(推奨)
-
Microsoft Word固有の数値書式マスク
ノート:
XSL固有のformat-number関数を使用して、数値を書式設定することもできます。詳細は、ネイティブXSL数値の書式設定を参照してください。
前述の方法のいずれかを使用してください。両方の方法を使用して数値書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。
グループ・セパレータと数値セパレータは、テンプレート・ロケールに基づいて実行時に設定されます。en-US以外のロケールで作業していたり、テンプレートに翻訳が必要な場合は、Oracleの書式マスクを使用します。
データソース要件
Oracle書式マスクまたはMicrosoft書式マスクを使用するには、データソースの数値がRaw形式であること、つまり、書式設定が適用されていない(例: 1000.00)ことが必要です。数値が書式設定されている場合(たとえば、欧州形式に1.000,00と書式設定されている場合)、その書式は機能しません。
Publisherパーサーでは、Java BigDecimal文字列表現が必要です。この表現は、オプション記号(-)、0(ゼロ)以上の10進数列(整数)、小数(オプション)および指数(オプション)で構成されます。たとえば、-123456.3455e-3となります。
ローカライゼーションに関する検討事項
en-US以外のロケールで作業していたり、テンプレートに翻訳が必要な場合は、Oracleの書式マスクを使用します。
Microsoftの書式マスクは、異なるロケール設定で実行されるテンプレートにおいて予期しない結果を生じる可能性があります。
「%」記号は、数値表示でパーセント記号の位置を固定するため、書式マスクに含めないでください。この記号は、ロケールに基づいて、数値の先頭または後に配置できます。
Microsoft数値書式マスクの使用
数値を書式設定するには、Microsoft Wordのフィールド書式設定機能を使用します。この機能は、「テキスト ボックス フォーム フィールド」ダイアログで設定できます。
数値書式をフォーム・フィールドに適用するには:
- プレースホルダ・フィールドに対して「フォーム・フィールドのオプション」ダイアログを開きます。
- 「Type」を「Number」に設定します。
- 「Number format」のオプション・リストから適切な数値書式を選択します。
サポートされているMicrosoft書式マスク定義
出力を標準化するために、いくつかの書式マスク定義を使用できます。
次の表に、サポートされているMicrosoft書式マスク定義を示します。
記号 | 場所 | 意味 |
---|---|---|
0 |
Number |
数字。他に数字が存在しない場合には、明示的に0(ゼロ)が表示されます。 例: 書式マスク: 00.0000 データ: 1.234 表示: 01.2340 |
# |
Number |
数字。#に設定すると、受信したデータのみが表示されます。 例: 書式マスク: ##.#### データ: 1.234 表示: 1.234 |
. |
Number |
小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。 例: 書式マスク: #,##0.00 データ: 1234.56 英語ロケールでの表示: 1,234.56 ドイツ語ロケールでの表示: 1.234,56 |
- |
Number |
マイナスの数値のマイナス記号の位置を決定します。 |
, |
Number |
グループ・セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。 例: 書式マスク: #,##0.00 データ: 1234.56 英語ロケールでの表示: 1,234.56 ドイツ語ロケールでの表示: 1.234,56 |
E |
Number |
科学表記法で仮数および指数を区切ります。 例: 0.###E+0: 正の数には必ずプラス記号が表示されます 0.###E-0: 正の数にはプラス記号は表示されません。 |
; |
サブパターンの境界 |
プラスおよびマイナスのサブパターンを区切ります。この表の後の注意事項を参照してください。 |
% |
プリフィクスまたはサフィックス |
100を乗算してパーセントで表示します。 |
' |
プリフィクスまたはサフィックス |
プリフィクスまたはサフィックスに特殊文字を引用するために使用します。 |
ノート:
サブパターンの境界: パターンには、「#,##0.00;(#,##0.00)」のように、プラスおよびマイナスのサブパターンが含まれます。各サブパターンには、プリフィクス、数値部分およびサフィックスが含まれます。マイナスのサブパターンはオプションです。マイナスのサブパターンを指定しない場合、そのマイナスのサブパターンは、プラスのサブパターンの先頭にローカライズされたマイナス記号(ほとんどのロケールで「-」を使用)を付けて表します。つまり、「0.00」は「0.00;-0.00」と同じになります。明示的にマイナスのサブパターンを指定した場合、このサブパターンは単にマイナスのプリフィクスとサフィックスを指定するために使用されます。桁数、最小数字などすべての特性はプラスのパターンと同じです。つまり、「#,##0.0#;(#)」と「#,##0.0#;(#,##0.0#)」の動作は完全に同じになります。Oracle書式マスクの使用
Oracle書式マスクは、フォーム・フィールドで使用できます。
Oracle書式マスクをフォーム・フィールドに適用するには:
説明
fieldnameは、書式設定するデータ要素のXMLタグ名です。
999G999D99はマスク定義です。
次の図に、データ要素empnoに関する、「Form Field Help Text」ダイアログへの入力例を示します。
次の表に、サポートされているOracle数値書式マスクの記号とその定義を示します。
記号 | 意味 |
---|---|
0 |
数字。他に数字が存在しない場合には、明示的に0(ゼロ)が表示されます。例:書式マスク: 00.0000データ: 1.234表示: 01.2340 |
9 |
数字。指定桁数の値を戻し、正の数の場合は先頭に空白が付き、負の数の場合は先頭にマイナス記号が付きます。先行0(ゼロ)は空白ですが、0(ゼロ)値の場合は固定小数点数の整数部分に0(ゼロ)を戻します。例:書式マスク: 99.9999データ: 1.234表示: 1.234 |
C |
指定した位置にISO通貨記号を戻します。 |
D |
小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。例:書式マスク: 9G999D99データ: 1234.56表示(英国ロケールの場合): 1,234.56表示(ドイツ・ロケールの場合): 1.234,56 |
EEEE |
科学表記法で値を戻します。 |
G |
グループ(千単位)セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。例:書式マスク: 9G999D99データ: 1234.56表示(英国ロケールの場合): 1,234.56表示(ドイツ・ロケールの場合): 1.234,56 |
L |
指定した位置にローカル通貨記号を戻します。 |
MI |
マイナスの値を末尾に「-」を付けて表示します。 |
PR |
マイナスの値を<>で囲んで表示します。 |
PT |
マイナスの値を()で囲んで表示します。 |
S (数値の前) |
プラスの値の場合は先頭に「+」を付け、マイナスの値の場合は先頭に「-」を付けて表示します。 |
S (数値の後) |
プラスの値の場合は末尾に「+」を付け、マイナスの値の場合は末尾に「-」を付けて表示します。 |
日付の書式設定
Publisherでは、日付の書式を指定するために、3つの方法がサポートされています。
-
Microsoft Word固有の日付書式マスクを使用して、明示的な日付書式マスクを指定します。
-
Oracleのformat-date関数を使用して、明示的な日付書式マスクを指定します。
-
Oracleの抽象日付書式マスクを使用して、抽象日付書式マスクを指定します(多言語テンプレートの場合に推奨)。
1つの方法のみを使用してください。OracleとMSの両方の書式マスクを指定した場合、データが2回書式設定されるため、予期しない動作が発生します。
データソース要件
Microsoft書式マスクまたはOracle書式マスクを使用するには、XMLデータソースの日付が標準書式であることが必要です。
この書式は次のとおりです。
YYYY-MM-DDThh:mm:ss+HH:MM
説明
-
YYYYは年です。
-
MMは月です。
-
DDは日です。
-
Tは、日付部分と時刻部分のセパレータです。
-
hhは、24時間書式の時間です。
-
mmは分です。
-
ssは秒です。
-
+HH:MMは、世界標準時(UTC)またはグリニッジ標準時からのタイムゾーン・オフセットです。
次に、この書式の例を示します。
2005-01-01T09:30:10-07:00
「T」の後のデータはオプションです。このため、2005-01-01という日付は、いずれかの日付書式設定オプションを使用して書式設定できます。
ノート:
時間コンポーネントおよびタイムゾーンのオフセットがXMLソース日付に含まれていない場合、Publisherでは、12:00 AM UTC(つまり、yyyy-mm-ddT00:00:00-00:00)を示すと想定します。
Microsoft日付書式マスクの使用
日付値を書式設定するには、Microsoft Wordのフィールド書式設定機能を使用します。この機能は、「Form Field Options」ダイアログで設定できます。
日付書式をフォーム・フィールドに適用するには:
- プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。
- 「Type」を「Date」、「Current Date」または「Current Time」に設定します。
- 「日付の書式」のオプション・リストから適切な日付書式を選択します。
「日付書式」フィールドでマスクを指定しない場合は、デフォルトとして抽象書式マスク「MEDIUM」が使用されます。
次の表に、サポートされているMicrosoft日付書式マスクのコンポーネントを示します。
記号 | 意味 |
---|---|
d |
月の日。1日-9日の場合、先頭に0 (ゼロ)は付きません。 |
dd |
月の日。1日-9日の場合、先頭に0(ゼロ)が付きます。 |
ddd |
曜日の略称。AbbreviatedDayNamesで定義されます。 |
dddd |
曜日の正式名称。DayNamesで定義されます。 |
M |
数値で表した月。1月-9月の場合、先頭に0 (ゼロ)は付きません。 |
MM |
数値で表した月。1月-9月の場合、先頭に0(ゼロ)が付きます。 |
MMM |
月の略称。AbbreviatedMonthNamesで定義されます。 |
MMMM |
月の正式名称。MonthNamesで定義されます。 |
yy |
世紀部分を除いた年。世紀部分を除いた年が10未満の場合は、先頭に0(ゼロ)を付けて表示されます。 |
yyyy |
4桁の年。 |
gg |
時代または年号。書式設定される日付に関連する時代または年号文字列がない場合、このパターンは無視されます。 |
h |
12時間書式の時間。1時-9時の場合、先頭に0 (ゼロ)は付きません。 |
hh |
12時間書式の時間。1時-9時の場合、先頭に0(ゼロ)が付きます。 |
H |
24時間書式の時間。1時-9時の場合、先頭に0 (ゼロ)は付きません。 |
HH |
24時間書式の時間。1時-9時の場合、先頭に0(ゼロ)が付きます。 |
m |
分。1分-9分の場合、先頭に0 (ゼロ)は付きません。 |
mm |
分。1分-9分の場合、先頭に0(ゼロ)が付きます。 |
s |
秒。1秒-9秒の場合、先頭に0 (ゼロ)は付きません。 |
ss |
秒。1秒-9秒の場合、先頭に0(ゼロ)が付きます。 |
f |
1桁で表したミリ秒を表示します。 |
ff |
2桁で表したミリ秒を表示します。 |
fff |
3桁で表したミリ秒を表示します。 |
ffff |
4桁で表したミリ秒を表示します。 |
fffff |
5桁で表したミリ秒を表示します。 |
ffffff |
6桁で表したミリ秒を表示します。 |
fffffff |
7桁で表したミリ秒を表示します。 |
tt |
AM/PMの指標。AMDesignatorまたはPMDesignatorで定義します(存在する場合)。 |
z |
システムの現行タイムゾーンのタイムゾーン・オフセットを時間でのみ表示します(この要素は書式設定でのみ使用可能)。 |
zz |
システムの現行タイムゾーンのタイムゾーン・オフセットを時間でのみ表示します(この要素は書式設定でのみ使用可能)。 |
zzz |
システムの現行タイムゾーンのタイムゾーン・オフセットを時間と分で表示します。 |
: |
デフォルトの時間セパレータ。TimeSeparatorで定義されます。 |
/ |
デフォルトの日付セパレータ。DateSeparatorで定義されます。 |
' |
引用符付き文字列。文字列のリテラル値の前後を'文字で囲んで表示します。 |
" |
引用符付き文字列。文字列のリテラル値の前後を"文字で囲んで表示します。 |
Oracle書式マスクの使用
日付と時間の表示方法を指定するには、Oracle書式マスクを使用します。
Oracle書式マスクを日付フィールドに適用するには:
次の表に、サポートされているOracle書式マスクのコンポーネントを示します。
ノート:
Excel2007出力(.xlsx)では、E、EE、W、WW、X、XXの書式マスクはサポートされません。RTFテンプレートでこれらを使用してExcel2007出力を生成すると、これらのどの書式の日付も表示できなくなります。これらの書式マスクの組合せによっては、Excel2007(.xlsx)出力を開いた際にエラーが発生する可能性もあります。記号 | 意味 |
---|---|
- / , . ; : "text" |
記号および引用符が付いたテキストが再現されて表示されます。 |
AD A.D. |
ピリオド付き/なしで西暦を示します。 |
AM A.M. |
ピリオド付き/なしで子午線インジケータを示します。 |
BC B.C. |
ピリオド付き/なしで紀元前を示します。 |
CC |
世紀。たとえば、2002は21を戻し、2000は20を戻します。 |
DAY |
日の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。 |
D |
曜日(1から7)。 |
DD |
日付(1から31)。 |
DDD |
年における日(1から366)。 |
DL |
長い日付書式で値が戻されます。 |
DS |
短い日付書式の値を戻します。 |
DY |
曜日の省略形。 |
E |
年号の略称。 |
EE |
年号の正式名称。 |
FF[1..9] |
ミリ秒。FFの後に1から9の数字を設定して、戻される日時値のミリ秒部分の桁数を指定します。 例: 'HH:MI:SS.FF3' |
HH |
時間(1から12)。 |
HH12 |
時間(1から12)。 |
HH24 |
時間(0から23)。 |
MI |
分(0から59)。 |
MM |
月(01から12。01は1月)。 |
MON |
月の名前の省略形。 |
MONTH |
月の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。 |
PM P.M. |
ピリオド付き/なしで子午線インジケータを示します。 |
RR |
2桁のみを使用して、21世紀に20世紀の日付を格納できます。 |
RRRR |
年を丸めます。4桁または2桁で入力できます。2桁の場合、RRの場合と同様の結果が戻ります。この機能を使用しない場合は、単に4桁の年を入力します。 |
SS |
秒(0から59)。 |
TZD |
夏時間情報。TZD値は、夏時間情報を含むタイムゾーンの簡略文字列です。この値は、TZRで指定する地域に対応する必要があります。 例: PST(太平洋標準時) PDT(太平洋夏時間) |
TZH |
タイムゾーンの時間。(書式設定要素TZMを参照)。 |
TZM |
タイムゾーンの分。(TZH書式要素を参照。) 例: 'HH:MI:SS.FFTZH:TZM' |
TZR |
タイムゾーン地域の情報。値は、データベースでサポートされるタイムゾーン地域である必要があります。 例: PST(太平洋標準時) |
WW |
年における週(1から53)。第1週はその年の1月1日で始まり、1月7日で終了します。 |
W |
月における週(1から5)。第1週はその月の1日で始まり、7日で終了します。 |
X |
ローカル基数文字。 |
YYYY |
4桁の年。 |
YY Y |
年の最後の2桁または1桁。 |
デフォルトの書式マスク
MS書式マスクまたはOracle書式マスクのいずれも指定しない場合は、マスク定義を省略してデフォルトの書式マスクを使用できます。デフォルトの書式マスクは、Oracleが提供するMEDIUM抽象書式マスクです
Microsoftの方式でデフォルト・オプションを使用するには、「テキスト ボックス フォーム フィールド」ダイアログで、「種類」を「日付」に設定し、「日付の形式」フィールドを空白のままにします。
Oracle書式マスクのデフォルト・オプションを使用するには、次のように、format-date関数コールにマスク定義を指定しないでください。次に例を示します。
<?format-date:hiredate?>
Oracle抽象書式マスク
抽象日付書式マスクは、I18Nライブラリの日付/時刻書式設定のデフォルト実装を反映します。
いずれかのマスクを使用すると、レポートに関連付けられているロケールに基づいて出力が生成されます。
抽象書式マスクは、次の構文を使用して指定します。
<?format-date:fieldname;'MASK'?>
ここで、fieldnameはXML要素タグです。
MASKは、Oracle抽象書式マスクの名称です。
次に例を示します。
<?format-date:hiredate;'SHORT'?>
<?format-date:hiredate;'LONG_TIME_TZ'?>
<?format-date:xdoxslt:sysdate_as_xsdformat();'MEDIUM'?>
次の表に、抽象書式マスク、および米国ロケールで生成されたサンプル出力を示します。
マスク | 米国ロケールの出力 |
---|---|
SHORT |
2/31/99 |
MEDIUM |
Dec 31, 1999 |
LONG |
Friday, December 31, 1999 |
SHORT_TIME |
12/31/99 6:15 PM |
MEDIUM_TIME |
Dec 31, 1999 6:15 PM |
LONG_TIME |
Friday, December 31, 1999 6:15 PM |
SHORT_TIME_TZ |
12/31/99 6:15 PM GMT |
MEDIUM_TIME_TZ |
Dec 31, 1999 6:15 PM GMT |
LONG_TIME_TZ |
Friday, December 31, 1999 6:15 PM GMT |
レポートでのシステム日付(sysdate)の表示
sysdateを正しく表示するには、xdoxslt:sysdate_as_xsdformat()関数と<?format-date:?>
コマンドを使用します。
次に例を示します。
<?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関数のパラメータは、次のとおりです。
<?format-currency:Amount_Field;CurrencyCode;displaySymbolOrNot?>
説明
Amount_Field
は、データ内の量/額の値を保持するXML要素のタグ名を取得します。
CurrencyCode
は静的値に設定することも、動的に設定することもできます。レポートの値が静的な場合は、‘USD’のようにISOの3文字の通貨コードを一重引用符で囲んで入力します。
値を動的に設定するには、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の場合、Publisherプロパティ・フィールドの構文は、次のようになります。
<?format-currency:US_SALES;'USD'?>
実行時、これらのフィールドは次の図のように表示されます。
例: 1つのレポートでの複数の通貨コードの表示
次の単純なXMLコードには、量/額(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'?>
次の図に、生成される複数通貨レポートを示します。