5. Excelの書式のその他の情報¶
5.1. 標準書式について¶
標準書式の場合、特に数値の場合、値によってフォーマットが変わります。
100,000,000,000
以上の値、または 0.0000000001
以下の値の時、指数の書式 0.#####E-0
となります。
ただし、Excelのセルの幅が小さいと、表示される有効桁数が自動的に変わります。
さらに、それ以外の値の場合は、整数部の桁数によって、小数部の精度が変わります。
整数部の桁数が10桁以上のときは小数部はなく、整数部が10桁未満の場合は小数部が1桁づつ増えます。
例えば、 12345678.12345
の場合、書式は 0.##
となります。
値 |
Excel上の表記 |
---|---|
100000000000 |
1E+11 |
99999999999 |
99999999999 |
12345678901234 |
1.23457E+13 |
0.0000000001 |
1E-10 |
0.999999999 |
0.999999999 |
0.000000000001234567 |
1.23457E-12 |
1234567890.12345 |
1234567890 |
123456789.12345 |
123456789.1 |
12345678.12345 |
12345678.12 |
5.2. ファイル内部の日付の基準日の設定¶
Excelは、日付情報をファイル内部では数値型として値を保持しており、値が0の場合は基準日として、通常は 「1899年12月31日(Excel表記上は1900年1月0日)」 を表します。
この基準日は、設定によって変更することができ、ファイルごとに設定を持ちます。
5.2.1. Excelの1904年始まりの設定変更方法¶
Excelのバージョンによって設定方法は変わります。
Excel2000~2003の場合、メニュー「ツール」-「オプション」から表示されるダイアログ中のタブ「計算方法」から設定できます。
Excel2007の場合、Officeボタンの「オプション」から表示されるダイアログ中のペイン「詳細設定」から設定できます。
Excel2010の場合、メニュー「ファイル」の「オプション」から表示されるダイアログ中のペイン「詳細設定」から設定できます。
LibreOfficeの場合、メニュー「ツール」-「オプション」から表示されるダイアログ中のペイン「LibreOffice Calc」-「計算式」から設定できます。
5.2.2. ライブラリによる1904年始まりの判定方法¶
5.2.2.1. Apache POIにおける1904年始まりの判定方法¶
Apache POIの場合、ファイルのフォーマットによって取得方法が変わります。
公開されていないメソッドなのでリフレクションを使用して取得します。
本ライブラリでは、 POICell#isDateStart1904() 中のメソッドで実装されています。
1904年始まりかどうかの設定はファイル単位に持つため、Workbookを取得して判定を行います。
final Workbook workbook = cell.getSheet().getWorkbook();
if(workbook instanceof HSSFWorkbook) {
// 拡張子がxlsの場合
try {
Method method = HSSFWorkbook.class.getDeclaredMethod("getWorkbook");
method.setAccessible(true);
InternalWorkbook iw = (InternalWorkbook) method.invoke(workbook);
return iw.isUsing1904DateWindowing();
} catch(NoSuchMethodException | SecurityException e) {
logger.warn("fail access method HSSFWorkbook.getWorkbook.", e);
return false;
} catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
logger.warn("fail invoke method HSSFWorkbook.getWorkbook.", e);
return false;
}
} else if(workbook instanceof XSSFWorkbook) {
// 拡張子がxlsxの場合
try {
Method method = XSSFWorkbook.class.getDeclaredMethod("isDate1904");
method.setAccessible(true);
boolean value = (boolean) method.invoke(workbook);
return value;
} catch(NoSuchMethodException | SecurityException e) {
logger.warn("fail access method XSSFWorkbook.isDate1904.", e);
return false;
} catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
logger.warn("fail invoke method XSSFWorkbook.isDate1904.", e);
return false;
}
}
5.2.2.2. JExcelAPIにおける1904年始まりの判定方法¶
JExcel APIの場合も同様にWorkbookから取得しますが、セルクラスから上位のSheetクラスなどを取得できないため不便です。
公開されていないメソッドなのでリフレクションを使用して取得します。
本ライブラリでは、 JXLUtils#isDateStart1904(...) 中のメソッドで実装されています。
1904年始まりかどうかの設定はシートにも引き継がれるため、Sheet、Wookbookのどちらからも判定できます。
// Workbookを元に判定を行う場合
public static boolean isDateStart1904(final Workbook workbook) {
ArgUtils.notNull(workbook, "workbook");
if(workbook instanceof WorkbookParser) {
try {
Field field = WorkbookParser.class.getDeclaredField("nineteenFour");
field.setAccessible(true);
boolean value = field.getBoolean(workbook);
return value;
} catch (NoSuchFieldException | SecurityException e) {
logger.warn("fail access field WrokbookParser#nineteenFour", e);
return false;
} catch (IllegalArgumentException | IllegalAccessException e) {
logger.warn("fail invoke field WrokbookParser#nineteenFour", e);
return false;
}
}
return false;
}
// Sheetを元に判定を行う場合
public static boolean isDateStart1904(final Sheet sheet) {
ArgUtils.notNull(sheet, "sheet");
if(sheet instanceof SheetImpl) {
try {
Field field = SheetImpl.class.getDeclaredField("nineteenFour");
field.setAccessible(true);
boolean value = field.getBoolean(sheet);
return value;
} catch (NoSuchFieldException | SecurityException e) {
logger.warn("fail access field SheetImpl#nineteenFour", e);
return false;
} catch (IllegalArgumentException | IllegalAccessException e) {
logger.warn("fail invoke field SheetImpl#nineteenFour", e);
return false;
}
}
return false;
}
5.2.3. 日時の内部表現¶
Excelの場合、日時ファイル内部では数値として値を保持し、次の仕様となっています。
整数部が日付情報。
1日は、値は1.0。
小数部が時刻情報。
1秒は、
1/(24*60*60)≒1.15741e-5
。Excelは、秒までの精度しか持たない。
タイムゾーンは持たない。
タイムゾーンは持たないため、OSの言語環境など変わっても、表示される時間は変わりません。
基準日の値は、
0.0
となる。ファイルの基準日の設定により、値が
0.0
のとき、1900年1月0日始まりか1904年1月1日始まりか変わります。
内部的な値が負の数とる基準日より前の日時は表現できない。
1900年始まりの場合、他のオフィスアプリと互換性を持たすために、以下の不良のような仕様を引き継いでる。
1900年1月0日から始まる。
グレゴリオ歴上は閏年でないのに、1900年2月29日が存在する。
注釈
グレゴリオ歴の閏年の定義
グレゴリオ暦 では、次の規則に従って400年間に(100回ではなく)97回の閏年を設ける。
西暦年が4で割り切れる年は閏年。
ただし、西暦年が100で割り切れる年は平年(閏年でない)。
ただし、西暦年が400で割り切れる年は閏年。
Excel表記上の日時 |
数値表現
1900年始まり
|
数値表現
1904年始まり
|
備考 |
---|---|---|---|
1900年01月00日 00時00分00秒 |
0.00000000000 |
1900年始まりの基準日。 |
|
1900年01月01日 00時00分00秒 |
1.00000000000 |
基準日から1日進む。 |
|
1900年02月29日 00時00分00秒 |
60.00000000000 |
正しくない閏日。 |
|
1900年03月01日 00時00分00秒 |
61.00000000000 |
正しくない閏日の翌日。 |
|
1904年01月01日 00時00分00秒 |
1462.00000000000 |
0.00000000000 |
1904年始まりの基準日。 |
1970年01月01日 00時00分00秒 |
25569.00000000000 |
24107.00000000000 |
UTCの基準日。 |
YYYY年MM月DD日 00時00分01秒 |
0.0000115741 |
0.0000115741 |
基準日から1秒経過 |
YYYY年MM月DD日 00時01分00秒 |
0.00069444444444 |
0.00069444444444 |
基準日から1分経過 |
YYYY年MM月DD日 00時01分00秒 |
0.04166666666667 |
0.04166666666667 |
基準日から1時間経過 |
YYYY年MM月DD日 23時59分59秒 |
0.99998842592593 |
0.99998842592593 |
基準日から23時間59分59秒経過 |
5.2.3.1. Excel上の日時の値をUTC表記に変換する方法¶
Excelは日時は内部では数値で保持しており、Javaの java.util.Date
に渡す形式であるUTC表現とは異なります。
また、基準日が複数あるため、UTC形式に変換するには次の計算を行う。
1904年始まりの場合。
24107の値を足す。(1970年1月1日から見て、1904年1月1日の経過日数を足す。)
1900年始まりの場合。
値が61.0以上ならば、1.0を引く。(1900年2月29日はUTC上存在しないため、1900年3月1日(=61.0)以降は、1日多くなるので調整する。)
25568.0の値を足す。(1970年1月1日から見て、1900年1月0日(=1899年12月31日)の経過日数を足す。)
値に24*60*60*1000を掛ける。(Excelは時刻が小数部なので、24*60*60で整数1桁目の精度を秒にする。UTCはミリ秒精度なので、さらに1000を掛ける。)
注釈
Excelの日時をUTCに返還する際の注意事項
本ライブラリでは、
ExcelDateUtils#convertJavaDate(...)
メソッドで提供されています。1900年始まりの場合、1900年1月0日は、1899年12月31日と表現します。
1900年始まりの場合、1900年2月29日は、1900年3月1日と表現します。、
5.3. ビルトインフォーマット(組み込み書式)について¶
Excelの書式は、ファイル内部では インデックス番号 に対して、 書式のパターン が割り振られています。
その中で、インデックス番号が 0~49は予め固定のフォーマットを持ち、ビルトインフォーマット(組み込み書式)と呼ばれます。
Excelのバージョンによっては、インデックス番号だけ持ち、書式を持たない場合があります。
50番以降は、ユーザ定義用書式として、ファイルによって異なります。
ただし、50~59番は、Excelの言語環境によって予約された番号で、インデックス番号だけ持ち、書式を持たない場合があります。
ビルインフォーマットは、JExcelAPIの場合とApaceh POIでは一部異なっています。
OSの言語環境によって変わるものがあります。
日時、通貨記号を含む書式は、環境によって変わる可能性があります。
JExcelAPI/Apache POIとも英語環境の値で固定で定義されており、日本語の書式には対応していません。
注釈
ビルトインフォーマットは、各ライブラリでプログラムで固定長の文字列として記述されています。
Apache POIの場合、
org.apache.poi.ss.usermodel.BuiltinFormats
(Javadoc ) で定義されています。JExcel APIの場合、 非公開のクラス
jxl.biff.BuiltInFormat
で定義されています。
本ライブラリでは、OSの言語によって変わるような書式や間違っている書式は、
予め FormatterResolver#registerDefaultFormat()
メソッド内で登録し、正しい書式で取得できるようにしています。
index
16進
|
index
10進
|
英語環境 |
日本語環境
(英語環境と同じ場合は省略)
|
例 |
備考 |
---|---|---|---|---|---|
0 |
0 |
|
|
標準の設定。日本語の場合、内部的には英語環境と同じ。 |
|
1 |
1 |
|
|
小数なしの数値の書式。 |
|
2 |
2 |
|
|
小数ありの数値の書式。 |
|
3 |
3 |
|
|
桁区切りの数値の書式。 |
|
4 |
4 |
|
|
小数あり、桁区切りの数値の書式。 |
|
5 |
5 |
|
|
|
会計用の書式。通貨の単位や括弧が異なる。 |
6 |
6 |
|
|
-123 |
会計用の書式。通貨の単位や括弧が異なる。 |
7 |
7 |
|
|
|
会計用の書式。通貨の単位や括弧が異なる。 |
8 |
8 |
|
|
|
会計用の書式。通貨の単位や括弧が異なる。 |
9 |
9 |
|
|
100分率の書式。 |
|
a |
10 |
|
|
100分率の書式。 |
|
b |
11 |
|
|
指数用の書式。 |
|
c |
12 |
|
|
分数の書式。 |
|
d |
13 |
|
|
分数の書式。 |
|
e |
14 |
|
|
|
日付の書式。年の桁数、順番が異なる。 |
f |
15 |
|
|
日付の書式。 |
|
10 |
16 |
|
|
日付の書式。 |
|
11 |
17 |
|
|
日付の書式。 |
|
12 |
18 |
|
|
時刻の書式。 |
|
13 |
19 |
|
|
時刻の書式。 |
|
14 |
20 |
|
|
時刻の書式。 |
|
15 |
21 |
|
|
時刻の書式。 |
|
16 |
22 |
|
|
|
日時の書式。年の桁数、順番が異なる。 |
17 |
23 |
|
|
||
18 |
24 |
|
|
||
19 |
25 |
|
|
||
1a |
26 |
|
|
||
1b |
27 |
|
|
|
日付の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、57番に割り振られる。
|
1c |
28 |
|
|
|
日付の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、58番に割り振られる。
|
1d |
29 |
|
|
|
日付の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、58番に割り振られる。
|
1e |
30 |
|
|
日付の書式。 |
|
1f |
31 |
|
|
|
日付の書式。日本語環境の場合、和暦表示。 |
20 |
32 |
|
|
|
時間の書式。日本語環境の場合、区切りが異なる。 |
21 |
33 |
|
|
|
時間の書式。日本語環境の場合、区切りが異なる。 |
22 |
34 |
|
|
|
時刻の書式。日本語環境の場合、日付の書式。
ファイルを際保存すると、55番に割り振られる。
|
23 |
35 |
|
|
|
時刻の書式。日本語環境の場合、日付の書式。
ファイルを際保存すると、56番に割り振られる。
|
24 |
36 |
|
|
|
時刻の書式。日本語環境の場合、和暦表示。
ファイルを際保存すると、57番に割り振られる。
|
25 |
37 |
|
|
|
数値の書式。日本語の場合、負の表現に括弧が付かない。 |
26 |
38 |
|
|
|
数値の書式。日本語の場合、負の表現に括弧が付かない。 |
27 |
39 |
|
|
|
数値の書式。日本語の場合、負の表現に括弧が付かない。 |
28 |
40 |
|
|
|
数値の書式。日本語の場合、負の表現に括弧が付かない。 |
29 |
41 |
|
|
|
数値の書式。日本語の場合、負の表現に括弧が付かない。 |
2a |
42 |
|
|
|
会計の書式。通貨が異なる。日本語の場合、負の表現に括弧が付かない。 |
2b |
43 |
|
|
|
数値の書式。日本語の場合、負の表現に括弧が付かない。 |
2c |
44 |
|
|
|
会計の書式。通貨が異なる。日本語の場合、負の表現に括弧が付かない。 |
2d |
45 |
|
|
時刻の書式。 |
|
2e |
46 |
|
|
時間時間の書式。 |
|
2f |
47 |
|
|
時間の書式。 |
|
30 |
48 |
|
|
指数の書式。 |
|
41 |
49 |
|
|
文字列の書式。 |
index
16進
|
index
10進
|
英語環境 |
日本語環境
(英語環境と同じ場合は省略)
|
例 |
備考 |
---|---|---|---|---|---|
37 |
55 |
|
|
|
時刻の書式。日本語の場合、日付の書式。 |
38 |
56 |
|
|
|
時刻の書式。日本語の場合、日付の書式。 |
39 |
57 |
|
|
|
日付の書式。日本語の場合、和暦表示。 |
3A |
58 |
|
|
|
日付の書式。日本語の場合、和暦表示。 |
組み込み書式以外で、OSの言語環境によって変わる書式があります。 Excel上では、書式の前にアスタリスク(*)が付いている書式です。
英語環境 |
日本の語環境 |
例 |
備考 |
---|---|---|---|
|
|
|
日付の書式。Excelの表記上は、「* 2001/3/14」と表示されます。
インデックス番号14の組み込み書式です。
|
|
|
|
日付の書式。Excelの表記上は、「* 2001年3月14日」と表示されます。 |
|
|
|
日付の書式。Excelの表記上は、「* 13:30:55」と表示されます。 |
5.3.1. JExcelAPIによる書式のインデックスの取得¶
JExcelAPIでは、書式のインデックスの取得は
DisplayFormat#getFormatIndex()
から取得します。ビルトインフォーマットの定義は、非公開のクラス
jxl.biff.BuiltInfFomrat
で定義されています。本ライブラリでは、
JXLCell#getFormatIndex()
で実装されている。
final CellFormat cellStyle = cell.getCellFormat();
if(cellStyle == null) {
// 書式を持たない場合
return 0;
}
final Format cellFormat = cellStyle.getFormat();
if(cellFormat == null && cellStyle instanceof XFRecord) {
final XFRecord record = (XFRecord) cellStyle;
return (short) record.formatIndex;
} else if(cellFormat == null) {
// 書式を持たない場合
return 0;
}
if(cellFormat instanceof DisplayFormat) {
final DisplayFormat displayFormat = (DisplayFormat)cellFormat;
return (short) displayFormat.getFormatIndex();
}
// 不明な場合
return 0;
5.3.2. Apache POIによる書式のインデックスの取得¶
Apache POIの書式のインデックスは、
CellSyle#getDataFormat()
から取得します。
short formatIndex = cell.getCellStyle().getDataFormat();
5.4. エラーのセルについて¶
Excelの計算結果などによって、エラー値が表示されます。
エラー値は数種類あり、ライブラリではコード値から判断します。
エラーコード
(10進数)
|
エラーコード
(16進数)
|
表示 |
説明 |
---|---|---|---|
0 |
0 |
|
正しくない参照演算子または正しくないセル参照を使っている場合に表示されます。
例
=SUM(A1:A3 C1:C3) |
7 |
7 |
|
数式や関数が0(ゼロ)または空白のセルで割られている場合に表示されます。
例
=200/0 |
15 |
15 |
|
関数の引数の形式が間違っている場合に表示されます。
例
=MAX("Dekiru") |
23 |
17 |
|
数式内で無効なセルが参照されている
例
=INT(A1) とセルA1を移動または削除してしまった場合に表示されます。 |
29 |
1d |
|
Excelの関数では利用できない名前が使用されている場合に表示されます。
例
=HEIKIN(A1:C1) |
36 |
24 |
|
数式または関数の数値が不適切な場合に表示されます。
例
=SMALL(A1:A3,C1) と入力して第2引数の値を数値以外のセルを指定した場合に表示されます。 |
42 |
2a |
|
計算や処理の対象となるデータがない、または正当な結果が得られない場合に表示されます。
例
=MODE(10,20,30,40) |
警告
Apache POIでエラー値を取得する場合の注意事項。
POIでエラー値が正しく取得できない場合があります。
ファイルの形式がxls(HSSF)の場合、全て「#VALUE!」となります。ただし、ファイルの形式がxlsx(XSSF)だと各種類が取得できます。
xlsx(XSSF)形式の場合でも場合によっては異なるコード値となります。
関数「=DATE(50000,1,1)」はExcelでは「#NUM!」と表示され計算できないが、POIの場合は正常に計算ができます。
これは、Javaの日付の表示範囲がExcelよりも広いため。
5.5. ロケールID(LCID)の一覧¶
Excelで指定可能なロケールの一覧は、外部サイトの ロケール ID (LCID) の一覧 で確認できます。
Excelの書式で指定する際には、16進数表記の値で指定します。
日本語の場合、LCIDは0x0411であるため、書式上では [$-411]
と指定します。
ロケール名 |
言語コード |
16進値 |
10進数 |
ロケール名 |
言語コード |
16進値 |
10進数 |
---|---|---|---|---|---|---|---|
アフリカーンス語 |
af |
0x0436 |
1078 |
ヒンズー語 |
hi |
0x0439 |
1081 |
アルバニア語 |
sq |
0x041C |
1052 |
ハンガリー語 |
hu |
0x040E |
1038 |
アラビア語 (U.A.E.) |
ar-ae |
0x3801 |
14337 |
アイスランド語 |
is |
0x040F |
1039 |
アラビア語 (バーレーン) |
ar-bh |
0x3C01 |
15361 |
インドネシア語 |
in |
0x0421 |
1057 |
アラビア語 (アルジェリア) |
ar-dz |
0x1401 |
5121 |
イタリア語 (イタリア) |
it |
0x0410 |
1040 |
アラビア語 (エジプト) |
ar-eg |
0x0C01 |
3073 |
イタリア語 (スイス) |
it-ch |
0x0810 |
2064 |
アラビア語 (イラク) |
ar-iq |
0x0801 |
2049 |
日本語 |
ja |
0x0411 |
1041 |
アラビア語 (ヨルダン) |
ar-jo |
0x2C01 |
11265 |
韓国語 |
ko |
0x0412 |
1042 |
アラビア語 (クウェート) |
ar-kw |
0x3401 |
13313 |
ラトビア語 |
lv |
0x0426 |
1062 |
アラビア語 (レバノン) |
ar-lb |
0x3001 |
12289 |
リトアニア語 |
lt |
0x0427 |
1063 |
アラビア語 (リビア) |
ar-ly |
0x1001 |
4097 |
マケドニア語 (FYROM) |
mk |
0x042F |
1071 |
アラビア語 (モロッコ) |
ar-ma |
0x1801 |
6145 |
マレー語 (マレーシア) |
ms |
0x043E |
1086 |
アラビア語 (オマーン) |
ar-om |
0x2001 |
8193 |
マルタ語 |
mt |
0x043A |
1082 |
アラビア語 (カタール) |
ar-qa |
0x4001 |
16385 |
ノルウェー語 (ブークモール) |
no |
0x0414 |
1044 |
アラビア語 (サウジアラビア) |
ar-sa |
0x0401 |
1025 |
ポーランド語 |
pl |
0x0415 |
1045 |
アラビア語 (シリア) |
ar-sy |
0x2801 |
10241 |
ポルトガル語 (ポルトガル) |
pt |
0x0816 |
2070 |
アラビア語 (チュニジア) |
ar-tn |
0x1C01 |
7169 |
ポルトガル語 (ブラジル) |
pt-br |
0x0416 |
1046 |
アラビア語 (イエメン) |
ar-ye |
0x2401 |
9217 |
レトロマン語 |
rm |
0x0417 |
1047 |
バスク語 |
eu |
0x042D |
1069 |
ルーマニア語 |
ro |
0x0418 |
1048 |
ベラルーシ語 |
be |
0x0423 |
1059 |
ルーマニア語 (モルドバ) |
ro-mo |
0x0818 |
2072 |
ブルガリア語 |
bg |
0x0402 |
1026 |
ロシア語 |
ru |
0x0419 |
1049 |
カタロニア語 |
ca |
0x0403 |
1027 |
ロシア語 (モルドバ) |
ru-mo |
0x0819 |
2073 |
中国語 (中華人民共和国) |
zh-cn |
0x0804 |
2052 |
セルビア語 (キリル文字) |
sr |
0x0C1A |
3098 |
中国語 (香港) |
zh-hk |
0x0C04 |
3076 |
ツワナ語 |
tn |
0x0432 |
1074 |
中国語 (シンガポール) |
zh-sg |
0x1004 |
4100 |
スロベニア語 |
sl |
0x0424 |
1060 |
中国語 (台湾) |
zh-tw |
0x0404 |
1028 |
スロバキア語 |
sk |
0x041B |
1051 |
クロアチア語 |
hr |
0x041A |
1050 |
ソルビア語 |
sb |
0x042E |
1070 |
チェコ語 |
cs |
0x0405 |
1029 |
スペイン語 (スペイン) |
es |
0x040A |
1034 |
デンマーク語 |
da |
0x0406 |
1030 |
スペイン語 (アルゼンチン) |
es-ar |
0x2C0A |
11274 |
オランダ語 |
nl |
0x0413 |
1043 |
スペイン語 (ボリビア) |
es-bo |
0x400A |
16394 |
オランダ語 (ベルギー) |
nl-be |
0x0813 |
2067 |
スペイン語 (チリ) |
es-cl |
0x340A |
13322 |
英語 (オーストラリア) |
en-au |
0x0C09 |
3081 |
スペイン語 (コロンビア) |
es-co |
0x240A |
9226 |
英語 (ベリーズ) |
en-bz |
0x2809 |
10249 |
スペイン語 (コスタリカ) |
es-cr |
0x140A |
5130 |
英語 (カナダ) |
en-ca |
0x1009 |
4105 |
スペイン語 (ドミニカ共和国) |
es-do |
0x1C0A |
7178 |
英語 (アイルランド) |
en-ie |
0x1809 |
6153 |
スペイン語 (エクアドル) |
es-ec |
0x300A |
12298 |
英語 (ジャマイカ) |
en-jm |
0x2009 |
8201 |
スペイン語 (グアテマラ) |
es-gt |
0x100A |
4106 |
英語 (ニュージーランド) |
en-nz |
0x1409 |
5129 |
スペイン語 (ホンジュラス) |
es-hn |
0x480A |
18442 |
英語 (南アフリカ) |
en-za |
0x1C09 |
7177 |
スペイン語 (メキシコ) |
es-mx |
0x080A |
2058 |
英語 (トリニダード) |
en-tt |
0x2C09 |
11273 |
スペイン語 (ニカラグア) |
es-ni |
0x4C0A |
19466 |
英語 (U.K.) |
en-gb |
0x0809 |
2057 |
スペイン語 (パナマ) |
es-pa |
0x180A |
6154 |
英語 (U.S.) |
en-us |
0x0409 |
1033 |
スペイン語 (ペルー) |
es-pe |
0x280A |
10250 |
エストニア語 |
et |
0x0425 |
1061 |
スペイン語 (プエルトリコ) |
es-pr |
0x500A |
20490 |
ペルシャ語 |
fa |
0x0429 |
1065 |
スペイン語 (パラグアイ) |
es-py |
0x3C0A |
15370 |
フィンランド語 |
fi |
0x040B |
1035 |
スペイン語 (エルサルバドル) |
es-sv |
0x440A |
17418 |
フェロー語 |
fo |
0x0438 |
1080 |
スペイン語 (ウルグアイ) |
es-uy |
0x380A |
14346 |
フランス語 (フランス) |
fr |
0x040C |
1036 |
スペイン語 (ベネズエラ) |
es-ve |
0x200A |
8202 |
フランス語 (ベルギー) |
fr-be |
0x080C |
2060 |
ソト語 |
sx |
0x0430 |
1072 |
フランス語 (カナダ) |
fr-ca |
0x0C0C |
3084 |
スウェーデン語 |
sv |
0x041D |
1053 |
フランス語 (ルクセンブルグ) |
fr-lu |
0x140C |
5132 |
スウェーデン語 (フィンランド) |
sv-fi |
0x081D |
2077 |
フランス語 (スイス) |
fr-ch |
0x100C |
4108 |
タイ語 |
th |
0x041E |
1054 |
ゲール語 (スコットランド) |
gd |
0x043C |
1084 |
トルコ語 |
tr |
0x041F |
1055 |
ドイツ語 (ドイツ) |
de |
0x0407 |
1031 |
ツォンガ語 |
ts |
0x0431 |
1073 |
ドイツ語 (オーストリア) |
de-at |
0x0C07 |
3079 |
ウクライナ語 |
uk |
0x0422 |
1058 |
ドイツ語 (リヒテンシュタイン) |
de-li |
0x1407 |
5127 |
ウルドゥー語 (パキスタン) |
ur |
0x0420 |
1056 |
ドイツ語 (ルクセンブルグ) |
de-lu |
0x1007 |
4103 |
ベトナム語 |
vi |
0x042A |
1066 |
ドイツ語 (スイス) |
de-ch |
0x0807 |
2055 |
コーサ語 |
xh |
0x0434 |
1076 |
ギリシャ語 |
el |
0x0408 |
1032 |
イディッシュ語 |
ji |
0x043D |
1085 |
ヘブライ語 |
he |
0x040D |
1037 |
ズールー語 |
zu |
0x0435 |
1077 |
5.6. 漢数字/大字変換のアルゴリズム¶
漢数字や大字への変換は、下記のように行います。
値が0の時は、値を〇(ゼロ)として処理を終了。
下の桁から4桁ごとに分割する。
実装方式としては、数値形式の場合は、10,000で割っていった余りに対して処理する。
分割した内容を漢数字に変換する。
0の場合は省略する。
1の場合は、桁数におおじて数値を省略し、単位のみを付与する。例えば、1の位の場合は数値を省略しない。十の位は、「十」と数値を省略して単位を付与する。
分割した変換結果に、4桁区切りの単位を付けて、結合する。