mirror of https://github.com/alibaba/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
379 lines
8.5 KiB
379 lines
8.5 KiB
package com.alibaba.excel.constant; |
|
|
|
import java.util.Locale; |
|
|
|
/** |
|
* Excel's built-in format conversion.Currently only supports Chinese. |
|
* |
|
* <p> |
|
* If it is not Chinese, it is recommended to directly modify the builtinFormats, which will better support |
|
* internationalization in the future. |
|
* |
|
* <p> |
|
* Specific correspondence please see: |
|
* https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.numberingformat?view=openxml-2.8.1 |
|
* |
|
* @author Jiaju Zhuang |
|
**/ |
|
public class BuiltinFormats { |
|
|
|
private static final String[] BUILTIN_FORMATS_CN = { |
|
// 0 |
|
"General", |
|
// 1 |
|
"0", |
|
// 2 |
|
"0.00", |
|
// 3 |
|
"#,##0", |
|
// 4 |
|
"#,##0.00", |
|
// 5 |
|
"\"¥\"#,##0_);(\"¥\"#,##0)", |
|
// 6 |
|
"\"¥\"#,##0_);[Red](\"¥\"#,##0)", |
|
// 7 |
|
"\"¥\"#,##0.00_);(\"¥\"#,##0.00)", |
|
// 8 |
|
"\"¥\"#,##0.00_);[Red](\"¥\"#,##0.00)", |
|
// 9 |
|
"0%", |
|
// 10 |
|
"0.00%", |
|
// 11 |
|
"0.00E+00", |
|
// 12 |
|
"# ?/?", |
|
// 13 |
|
"# ??/??", |
|
// 14 |
|
// The official documentation shows "m/d/yy", but the actual test is "yyyy/m/d". |
|
"yyyy/m/d", |
|
// 15 |
|
"d-mmm-yy", |
|
// 16 |
|
"d-mmm", |
|
// 17 |
|
"mmm-yy", |
|
// 18 |
|
"h:mm AM/PM", |
|
// 19 |
|
"h:mm:ss AM/PM", |
|
// 20 |
|
"h:mm", |
|
// 21 |
|
"h:mm:ss", |
|
// 22 |
|
// The official documentation shows "m/d/yy h:mm", but the actual test is "yyyy-m-d h:mm". |
|
"yyyy-m-d h:mm", |
|
// 23-26 No specific correspondence found in the official documentation. |
|
// 23 |
|
null, |
|
// 24 |
|
null, |
|
// 25 |
|
null, |
|
// 26 |
|
null, |
|
// 27 |
|
"yyyy\"年\"m\"月\"", |
|
// 28 |
|
"m\"月\"d\"日\"", |
|
// 29 |
|
"m\"月\"d\"日\"", |
|
// 30 |
|
"m-d-yy", |
|
// 31 |
|
"yyyy\"年\"m\"月\"d\"日\"", |
|
// 32 |
|
"h\"时\"mm\"分\"", |
|
// 33 |
|
"h\"时\"mm\"分\"ss\"秒\"", |
|
// 34 |
|
"上午/下午h\"时\"mm\"分\"", |
|
// 35 |
|
"上午/下午h\"时\"mm\"分\"ss\"秒\"", |
|
// 36 |
|
"yyyy\"年\"m\"月\"", |
|
// 37 |
|
"#,##0_);(#,##0)", |
|
// 38 |
|
"#,##0_);[Red](#,##0)", |
|
// 39 |
|
"#,##0.00_);(#,##0.00)", |
|
// 40 |
|
"#,##0.00_);[Red](#,##0.00)", |
|
// 41 |
|
"_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)", |
|
// 42 |
|
"_(\"¥\"* #,##0_);_(\"¥\"* (#,##0);_(\"¥\"* \"-\"_);_(@_)", |
|
// 43 |
|
"_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)", |
|
// 44 |
|
"_(\"¥\"* #,##0.00_);_(\"¥\"* (#,##0.00);_(\"¥\"* \"-\"??_);_(@_)", |
|
// 45 |
|
"mm:ss", |
|
// 46 |
|
"[h]:mm:ss", |
|
// 47 |
|
"mm:ss.0", |
|
// 48 |
|
"##0.0E+0", |
|
// 49 |
|
"@", |
|
// 50 |
|
"yyyy\"年\"m\"月\"", |
|
// 51 |
|
"m\"月\"d\"日\"", |
|
// 52 |
|
"yyyy\"年\"m\"月\"", |
|
// 53 |
|
"m\"月\"d\"日\"", |
|
// 54 |
|
"m\"月\"d\"日\"", |
|
// 55 |
|
"上午/下午h\"时\"mm\"分\"", |
|
// 56 |
|
"上午/下午h\"时\"mm\"分\"ss\"秒\"", |
|
// 57 |
|
"yyyy\"年\"m\"月\"", |
|
// 58 |
|
"m\"月\"d\"日\"", |
|
// 59 |
|
"t0", |
|
// 60 |
|
"t0.00", |
|
// 61 |
|
"t#,##0", |
|
// 62 |
|
"t#,##0.00", |
|
// 63-66 No specific correspondence found in the official documentation. |
|
// 63 |
|
null, |
|
// 64 |
|
null, |
|
// 65 |
|
null, |
|
// 66 |
|
null, |
|
// 67 |
|
"t0%", |
|
// 68 |
|
"t0.00%", |
|
// 69 |
|
"t# ?/?", |
|
// 70 |
|
"t# ??/??", |
|
// 71 |
|
"ว/ด/ปปปป", |
|
// 72 |
|
"ว-ดดด-ปป", |
|
// 73 |
|
"ว-ดดด", |
|
// 74 |
|
"ดดด-ปป", |
|
// 75 |
|
"ช:นน", |
|
// 76 |
|
"ช:นน:ทท", |
|
// 77 |
|
"ว/ด/ปปปป ช:นน", |
|
// 78 |
|
"นน:ทท", |
|
// 79 |
|
"[ช]:นน:ทท", |
|
// 80 |
|
"นน:ทท.0", |
|
// 81 |
|
"d/m/bb", |
|
// end |
|
}; |
|
|
|
private static final String[] BUILTIN_FORMATS_US = { |
|
// 0 |
|
"General", |
|
// 1 |
|
"0", |
|
// 2 |
|
"0.00", |
|
// 3 |
|
"#,##0", |
|
// 4 |
|
"#,##0.00", |
|
// 5 |
|
"\"$\"#,##0_);(\"$\"#,##0)", |
|
// 6 |
|
"\"$\"#,##0_);[Red](\"$\"#,##0)", |
|
// 7 |
|
"\"$\"#,##0.00_);(\"$\"#,##0.00)", |
|
// 8 |
|
"\"$\"#,##0.00_);[Red](\"$\"#,##0.00)", |
|
// 9 |
|
"0%", |
|
// 10 |
|
"0.00%", |
|
// 11 |
|
"0.00E+00", |
|
// 12 |
|
"# ?/?", |
|
// 13 |
|
"# ??/??", |
|
// 14 |
|
// The official documentation shows "m/d/yy", but the actual test is "yyyy/m/d". |
|
"yyyy/m/d", |
|
// 15 |
|
"d-mmm-yy", |
|
// 16 |
|
"d-mmm", |
|
// 17 |
|
"mmm-yy", |
|
// 18 |
|
"h:mm AM/PM", |
|
// 19 |
|
"h:mm:ss AM/PM", |
|
// 20 |
|
"h:mm", |
|
// 21 |
|
"h:mm:ss", |
|
// 22 |
|
// The official documentation shows "m/d/yy h:mm", but the actual test is "yyyy-m-d h:mm". |
|
"yyyy-m-d h:mm", |
|
// 23-26 No specific correspondence found in the official documentation. |
|
// 23 |
|
null, |
|
// 24 |
|
null, |
|
// 25 |
|
null, |
|
// 26 |
|
null, |
|
// 27 |
|
"yyyy\"年\"m\"月\"", |
|
// 28 |
|
"m\"月\"d\"日\"", |
|
// 29 |
|
"m\"月\"d\"日\"", |
|
// 30 |
|
"m-d-yy", |
|
// 31 |
|
"yyyy\"年\"m\"月\"d\"日\"", |
|
// 32 |
|
"h\"时\"mm\"分\"", |
|
// 33 |
|
"h\"时\"mm\"分\"ss\"秒\"", |
|
// 34 |
|
"上午/下午h\"时\"mm\"分\"", |
|
// 35 |
|
"上午/下午h\"时\"mm\"分\"ss\"秒\"", |
|
// 36 |
|
"yyyy\"年\"m\"月\"", |
|
// 37 |
|
"#,##0_);(#,##0)", |
|
// 38 |
|
"#,##0_);[Red](#,##0)", |
|
// 39 |
|
"#,##0.00_);(#,##0.00)", |
|
// 40 |
|
"#,##0.00_);[Red](#,##0.00)", |
|
// 41 |
|
"_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)", |
|
// 42 |
|
"_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)", |
|
// 43 |
|
"_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)", |
|
// 44 |
|
"_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)", |
|
// 45 |
|
"mm:ss", |
|
// 46 |
|
"[h]:mm:ss", |
|
// 47 |
|
"mm:ss.0", |
|
// 48 |
|
"##0.0E+0", |
|
// 49 |
|
"@", |
|
// 50 |
|
"yyyy\"年\"m\"月\"", |
|
// 51 |
|
"m\"月\"d\"日\"", |
|
// 52 |
|
"yyyy\"年\"m\"月\"", |
|
// 53 |
|
"m\"月\"d\"日\"", |
|
// 54 |
|
"m\"月\"d\"日\"", |
|
// 55 |
|
"上午/下午h\"时\"mm\"分\"", |
|
// 56 |
|
"上午/下午h\"时\"mm\"分\"ss\"秒\"", |
|
// 57 |
|
"yyyy\"年\"m\"月\"", |
|
// 58 |
|
"m\"月\"d\"日\"", |
|
// 59 |
|
"t0", |
|
// 60 |
|
"t0.00", |
|
// 61 |
|
"t#,##0", |
|
// 62 |
|
"t#,##0.00", |
|
// 63-66 No specific correspondence found in the official documentation. |
|
// 63 |
|
null, |
|
// 64 |
|
null, |
|
// 65 |
|
null, |
|
// 66 |
|
null, |
|
// 67 |
|
"t0%", |
|
// 68 |
|
"t0.00%", |
|
// 69 |
|
"t# ?/?", |
|
// 70 |
|
"t# ??/??", |
|
// 71 |
|
"ว/ด/ปปปป", |
|
// 72 |
|
"ว-ดดด-ปป", |
|
// 73 |
|
"ว-ดดด", |
|
// 74 |
|
"ดดด-ปป", |
|
// 75 |
|
"ช:นน", |
|
// 76 |
|
"ช:นน:ทท", |
|
// 77 |
|
"ว/ด/ปปปป ช:นน", |
|
// 78 |
|
"นน:ทท", |
|
// 79 |
|
"[ช]:นน:ทท", |
|
// 80 |
|
"นน:ทท.0", |
|
// 81 |
|
"d/m/bb", |
|
// end |
|
}; |
|
|
|
public static String getBuiltinFormat(Integer index, String defaultFormat, Locale locale) { |
|
String[] builtinFormat = switchBuiltinFormats(locale); |
|
if (index == null || index < 0 || index >= builtinFormat.length) { |
|
return defaultFormat; |
|
} |
|
return builtinFormat[index]; |
|
} |
|
|
|
private static String[] switchBuiltinFormats(Locale locale) { |
|
if (locale != null && Locale.US.getCountry().equals(locale.getCountry())) { |
|
return BUILTIN_FORMATS_US; |
|
} |
|
return BUILTIN_FORMATS_CN; |
|
} |
|
|
|
}
|
|
|