|
|
@@ -47,6 +47,285 @@ var builtInNumFmt = map[int]string{
|
|
|
49: "@",
|
|
|
}
|
|
|
|
|
|
+// langNumFmt defined number format code with unicode in different language.
|
|
|
+var langNumFmt = map[string]map[int]string{
|
|
|
+ "zh-tw": zhtwNumFmt,
|
|
|
+ "zh-cn": zhcnNumFmt,
|
|
|
+ "zh-tw_unicode": zhtwUnicodeNumFmt,
|
|
|
+ "zh-cn_unicode": zhcnUnicodeNumFmt,
|
|
|
+ "ja-jp": jajpNumFmt,
|
|
|
+ "ko-kr": kokrNumFmt,
|
|
|
+ "ja-jp_unicode": jajpUnicodeNumFmt,
|
|
|
+ "ko-kr_unicode": kokrUnicodeNumFmt,
|
|
|
+ "th-th": ththNumFmt,
|
|
|
+ "th-th_unicode": ththUnicodeNumFmt,
|
|
|
+}
|
|
|
+
|
|
|
+// zh-tw format code.
|
|
|
+var zhtwNumFmt = map[int]string{
|
|
|
+ 27: "[$-404]e/m/d",
|
|
|
+ 28: `[$-404]e"年"m"月"d"日"`,
|
|
|
+ 29: `[$-404]e"年"m"月"d"日"`,
|
|
|
+ 30: "m/d/yy",
|
|
|
+ 31: `yyyy"年"m"月"d"日"`,
|
|
|
+ 32: `hh"時"mm"分"`,
|
|
|
+ 33: `hh"時"mm"分"ss"秒"`,
|
|
|
+ 34: `上午/下午 hh"時"mm"分"`,
|
|
|
+ 35: `上午/下午 hh"時"mm"分"ss"秒"`,
|
|
|
+ 36: "[$-404]e/m/d",
|
|
|
+ 50: "[$-404]e/m/d",
|
|
|
+ 51: `[$-404]e"年"m"月"d"日"`,
|
|
|
+ 52: `上午/下午 hh"時"mm"分"`,
|
|
|
+ 53: `上午/下午 hh"時"mm"分"ss"秒"`,
|
|
|
+ 54: `[$-404]e"年"m"月"d"日"`,
|
|
|
+ 55: `上午/下午 hh"時"mm"分"`,
|
|
|
+ 56: `上午/下午 hh"時"mm"分"ss"秒"`,
|
|
|
+ 57: "[$-404]e/m/d",
|
|
|
+ 58: `[$-404]e"年"m"月"d"日"`,
|
|
|
+}
|
|
|
+
|
|
|
+// zh-cn format code.
|
|
|
+var zhcnNumFmt = map[int]string{
|
|
|
+ 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"月"`,
|
|
|
+ 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"日"`,
|
|
|
+}
|
|
|
+
|
|
|
+// zh-tw format code (with unicode values provided for language glyphs where
|
|
|
+// they occur).
|
|
|
+var zhtwUnicodeNumFmt = map[int]string{
|
|
|
+ 27: "[$-404]e/m/d",
|
|
|
+ 28: `[$-404]e"5E74"m"6708"d"65E5"`,
|
|
|
+ 29: `[$-404]e"5E74"m"6708"d"65E5"`,
|
|
|
+ 30: "m/d/yy",
|
|
|
+ 31: `yyyy"5E74"m"6708"d"65E5"`,
|
|
|
+ 32: `hh"6642"mm"5206"`,
|
|
|
+ 33: `hh"6642"mm"5206"ss"79D2"`,
|
|
|
+ 34: `4E0A5348/4E0B5348hh"6642"mm"5206"`,
|
|
|
+ 35: `4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2"`,
|
|
|
+ 36: "[$-404]e/m/d",
|
|
|
+ 50: "[$-404]e/m/d",
|
|
|
+ 51: `[$-404]e"5E74"m"6708"d"65E5"`,
|
|
|
+ 52: `4E0A5348/4E0B5348hh"6642"mm"5206"`,
|
|
|
+ 53: `4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2"`,
|
|
|
+ 54: `[$-404]e"5E74"m"6708"d"65E5"`,
|
|
|
+ 55: `4E0A5348/4E0B5348hh"6642"mm"5206"`,
|
|
|
+ 56: `4E0A5348/4E0B5348hh"6642"mm"5206"ss"79D2"`,
|
|
|
+ 57: "[$-404]e/m/d",
|
|
|
+ 58: `[$-404]e"5E74"m"6708"d"65E5"`,
|
|
|
+}
|
|
|
+
|
|
|
+// zh-cn format code (with unicode values provided for language glyphs where
|
|
|
+// they occur).
|
|
|
+var zhcnUnicodeNumFmt = map[int]string{
|
|
|
+ 27: `yyyy"5E74"m"6708"`,
|
|
|
+ 28: `m"6708"d"65E5"`,
|
|
|
+ 29: `m"6708"d"65E5"`,
|
|
|
+ 30: "m-d-yy",
|
|
|
+ 31: `yyyy"5E74"m"6708"d"65E5"`,
|
|
|
+ 32: `h"65F6"mm"5206"`,
|
|
|
+ 33: `h"65F6"mm"5206"ss"79D2"`,
|
|
|
+ 34: `4E0A5348/4E0B5348h"65F6"mm"5206"`,
|
|
|
+ 35: `4E0A5348/4E0B5348h"65F6"mm"5206"ss"79D2"`,
|
|
|
+ 36: `yyyy"5E74"m"6708"`,
|
|
|
+ 50: `yyyy"5E74"m"6708"`,
|
|
|
+ 51: `m"6708"d"65E5"`,
|
|
|
+ 52: `yyyy"5E74"m"6708"`,
|
|
|
+ 53: `m"6708"d"65E5"`,
|
|
|
+ 54: `m"6708"d"65E5"`,
|
|
|
+ 55: `4E0A5348/4E0B5348h"65F6"mm"5206"`,
|
|
|
+ 56: `4E0A5348/4E0B5348h"65F6"mm"5206"ss"79D2"`,
|
|
|
+ 57: `yyyy"5E74"m"6708"`,
|
|
|
+ 58: `m"6708"d"65E5"`,
|
|
|
+}
|
|
|
+
|
|
|
+// ja-jp format code.
|
|
|
+var jajpNumFmt = map[int]string{
|
|
|
+ 27: "[$-411]ge.m.d",
|
|
|
+ 28: `[$-411]ggge"年"m"月"d"日"`,
|
|
|
+ 29: `[$-411]ggge"年"m"月"d"日"`,
|
|
|
+ 30: "m/d/yy",
|
|
|
+ 31: `yyyy"年"m"月"d"日"`,
|
|
|
+ 32: `h"時"mm"分"`,
|
|
|
+ 33: `h"時"mm"分"ss"秒"`,
|
|
|
+ 34: `yyyy"年"m"月"`,
|
|
|
+ 35: `m"月"d"日"`,
|
|
|
+ 36: "[$-411]ge.m.d",
|
|
|
+ 50: "[$-411]ge.m.d",
|
|
|
+ 51: `[$-411]ggge"年"m"月"d"日"`,
|
|
|
+ 52: `yyyy"年"m"月"`,
|
|
|
+ 53: `m"月"d"日"`,
|
|
|
+ 54: `[$-411]ggge"年"m"月"d"日"`,
|
|
|
+ 55: `yyyy"年"m"月"`,
|
|
|
+ 56: `m"月"d"日"`,
|
|
|
+ 57: "[$-411]ge.m.d",
|
|
|
+ 58: `[$-411]ggge"年"m"月"d"日"`,
|
|
|
+}
|
|
|
+
|
|
|
+// ko-kr format code.
|
|
|
+var kokrNumFmt = map[int]string{
|
|
|
+ 27: `yyyy"年" mm"月" dd"日"`,
|
|
|
+ 28: "mm-dd",
|
|
|
+ 29: "mm-dd",
|
|
|
+ 30: "mm-dd-yy",
|
|
|
+ 31: `yyyy"년" mm"월" dd"일"`,
|
|
|
+ 32: `h"시" mm"분"`,
|
|
|
+ 33: `h"시" mm"분" ss"초"`,
|
|
|
+ 34: `yyyy-mm-dd`,
|
|
|
+ 35: `yyyy-mm-dd`,
|
|
|
+ 36: `yyyy"年" mm"月" dd"日"`,
|
|
|
+ 50: `yyyy"年" mm"月" dd"日"`,
|
|
|
+ 51: "mm-dd",
|
|
|
+ 52: "yyyy-mm-dd",
|
|
|
+ 53: "yyyy-mm-dd",
|
|
|
+ 54: "mm-dd",
|
|
|
+ 55: "yyyy-mm-dd",
|
|
|
+ 56: "yyyy-mm-dd",
|
|
|
+ 57: `yyyy"年" mm"月" dd"日"`,
|
|
|
+ 58: "mm-dd",
|
|
|
+}
|
|
|
+
|
|
|
+// ja-jp format code (with unicode values provided for language glyphs where
|
|
|
+// they occur).
|
|
|
+var jajpUnicodeNumFmt = map[int]string{
|
|
|
+ 27: "[$-411]ge.m.d",
|
|
|
+ 28: `[$-411]ggge"5E74"m"6708"d"65E5"`,
|
|
|
+ 29: `[$-411]ggge"5E74"m"6708"d"65E5"`,
|
|
|
+ 30: "m/d/yy",
|
|
|
+ 31: `yyyy"5E74"m"6708"d"65E5"`,
|
|
|
+ 32: `h"6642"mm"5206"`,
|
|
|
+ 33: `h"6642"mm"5206"ss"79D2"`,
|
|
|
+ 34: `yyyy"5E74"m"6708"`,
|
|
|
+ 35: `m"6708"d"65E5"`,
|
|
|
+ 36: "[$-411]ge.m.d",
|
|
|
+ 50: "[$-411]ge.m.d",
|
|
|
+ 51: `[$-411]ggge"5E74"m"6708"d"65E5"`,
|
|
|
+ 52: `yyyy"5E74"m"6708"`,
|
|
|
+ 53: `m"6708"d"65E5"`,
|
|
|
+ 54: `[$-411]ggge"5E74"m"6708"d"65E5"`,
|
|
|
+ 55: `yyyy"5E74"m"6708"`,
|
|
|
+ 56: `m"6708"d"65E5"`,
|
|
|
+ 57: "[$-411]ge.m.d",
|
|
|
+ 58: `[$-411]ggge"5E74"m"6708"d"65E5"`,
|
|
|
+}
|
|
|
+
|
|
|
+// ko-kr format code (with unicode values provided for language glyphs where
|
|
|
+// they occur).
|
|
|
+var kokrUnicodeNumFmt = map[int]string{
|
|
|
+ 27: `yyyy"5E74" mm"6708" dd"65E5"`,
|
|
|
+ 28: "mm-dd",
|
|
|
+ 29: "mm-dd",
|
|
|
+ 30: "mm-dd-yy",
|
|
|
+ 31: `yyyy"B144" mm"C6D4" dd"C77C"`,
|
|
|
+ 32: `h"C2DC" mm"BD84"`,
|
|
|
+ 33: `h"C2DC" mm"BD84" ss"CD08"`,
|
|
|
+ 34: "yyyy-mm-dd",
|
|
|
+ 35: "yyyy-mm-dd",
|
|
|
+ 36: `yyyy"5E74" mm"6708" dd"65E5"`,
|
|
|
+ 50: `yyyy"5E74" mm"6708" dd"65E5"`,
|
|
|
+ 51: "mm-dd",
|
|
|
+ 52: "yyyy-mm-dd",
|
|
|
+ 53: "yyyy-mm-dd",
|
|
|
+ 54: "mm-dd",
|
|
|
+ 55: "yyyy-mm-dd",
|
|
|
+ 56: "yyyy-mm-dd",
|
|
|
+ 57: `yyyy"5E74" mm"6708" dd"65E5"`,
|
|
|
+ 58: "mm-dd",
|
|
|
+}
|
|
|
+
|
|
|
+// th-th format code.
|
|
|
+var ththNumFmt = map[int]string{
|
|
|
+ 59: "t0",
|
|
|
+ 60: "t0.00",
|
|
|
+ 61: "t#,##0",
|
|
|
+ 62: "t#,##0.00",
|
|
|
+ 67: "t0%",
|
|
|
+ 68: "t0.00%",
|
|
|
+ 69: "t# ?/?",
|
|
|
+ 70: "t# ??/??",
|
|
|
+ 71: "ว/ด/ปปปป",
|
|
|
+ 72: "ว-ดดด-ปป",
|
|
|
+ 73: "ว-ดดด",
|
|
|
+ 74: "ดดด-ปป",
|
|
|
+ 75: "ช:นน",
|
|
|
+ 76: "ช:นน:ทท",
|
|
|
+ 77: "ว/ด/ปปปป ช:นน",
|
|
|
+ 78: "นน:ทท",
|
|
|
+ 79: "[ช]:นน:ทท",
|
|
|
+ 80: "นน:ทท.0",
|
|
|
+ 81: "d/m/bb",
|
|
|
+}
|
|
|
+
|
|
|
+// th-th format code (with unicode values provided for language glyphs where
|
|
|
+// they occur).
|
|
|
+var ththUnicodeNumFmt = map[int]string{
|
|
|
+ 59: "t0",
|
|
|
+ 60: "t0.00",
|
|
|
+ 61: "t#,##0",
|
|
|
+ 62: "t#,##0.00",
|
|
|
+ 67: "t0%",
|
|
|
+ 68: "t0.00%",
|
|
|
+ 69: "t# ?/?",
|
|
|
+ 70: "t# ??/??",
|
|
|
+ 71: "0E27/0E14/0E1B0E1B0E1B0E1B",
|
|
|
+ 72: "0E27-0E140E140E14-0E1B0E1B",
|
|
|
+ 73: "0E27-0E140E140E14",
|
|
|
+ 74: "0E140E140E14-0E1B0E1B",
|
|
|
+ 75: "0E0A:0E190E19",
|
|
|
+ 76: "0E0A:0E190E19:0E170E17",
|
|
|
+ 77: "0E27/0E14/0E1B0E1B0E1B0E1B 0E0A:0E190E19",
|
|
|
+ 78: "0E190E19:0E170E17",
|
|
|
+ 79: "[0E0A]:0E190E19:0E170E17",
|
|
|
+ 80: "0E190E19:0E170E17.0",
|
|
|
+ 81: "d/m/bb",
|
|
|
+}
|
|
|
+
|
|
|
+// currencyNumFmt defined the currency number format map.
|
|
|
+var currencyNumFmt = map[int]string{
|
|
|
+ 164: `"CN¥",##0.00`,
|
|
|
+ 165: "[$$-409]#,##0.00",
|
|
|
+ 166: "[$$-45C]#,##0.00",
|
|
|
+ 167: "[$$-1004]#,##0.00",
|
|
|
+ 168: "[$$-404]#,##0.00",
|
|
|
+ 169: "[$$-C09]#,##0.00",
|
|
|
+ 170: "[$$-2809]#,##0.00",
|
|
|
+ 171: "[$$-1009]#,##0.00",
|
|
|
+ 172: "[$$-2009]#,##0.00",
|
|
|
+ 173: "[$$-1409]#,##0.00",
|
|
|
+ 174: "[$$-4809]#,##0.00",
|
|
|
+ 175: "[$$-2C09]#,##0.00",
|
|
|
+ 176: "[$$-2409]#,##0.00",
|
|
|
+ 177: "[$$-1000]#,##0.00",
|
|
|
+ 178: `#,##0.00\ [$$-C0C]`,
|
|
|
+ 179: "[$$-475]#,##0.00",
|
|
|
+ 180: "[$$-83E]#,##0.00",
|
|
|
+ 181: `[$$-86B]\ #,##0.00`,
|
|
|
+ 182: `[$$-340A]\ #,##0.00`,
|
|
|
+ 183: "[$$-240A]#,##0.00",
|
|
|
+ 184: `[$$-300A]\ #,##0.00`,
|
|
|
+ 185: "[$$-440A]#,##0.00",
|
|
|
+ 186: "[$$-80A]#,##0.00",
|
|
|
+ 187: "[$$-500A]#,##0.00",
|
|
|
+ 188: "[$$-540A]#,##0.00",
|
|
|
+ 189: `[$$-380A]\ #,##0.00`,
|
|
|
+}
|
|
|
+
|
|
|
// builtInNumFmtFunc defined the format conversion functions map. Partial format
|
|
|
// code doesn't support currently and will return original string.
|
|
|
var builtInNumFmtFunc = map[int]func(i int, v string) string{
|
|
|
@@ -247,7 +526,9 @@ func (f *File) styleSheetWriter() {
|
|
|
// parseFormatStyleSet provides function to parse the format settings of the
|
|
|
// borders.
|
|
|
func parseFormatStyleSet(style string) (*formatCellStyle, error) {
|
|
|
- var format formatCellStyle
|
|
|
+ format := formatCellStyle{
|
|
|
+ DecimalPlaces: 2,
|
|
|
+ }
|
|
|
err := json.Unmarshal([]byte(style), &format)
|
|
|
return &format, err
|
|
|
}
|
|
|
@@ -257,219 +538,161 @@ func parseFormatStyleSet(style string) (*formatCellStyle, error) {
|
|
|
//
|
|
|
// The following shows the border styles sorted by excelize index number:
|
|
|
//
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | Index | Name | Weight | Style |
|
|
|
-// +=======+===============+========+=================+
|
|
|
-// | 0 | None | 0 | |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 1 | Continuous | 1 | ``-----------`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 2 | Continuous | 2 | ``-----------`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 3 | Dash | 1 | ``- - - - - -`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 4 | Dot | 1 | ``. . . . . .`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 5 | Continuous | 3 | ``-----------`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 6 | Double | 3 | ``===========`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 7 | Continuous | 0 | ``-----------`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 8 | Dash | 2 | ``- - - - - -`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 9 | Dash Dot | 1 | ``- . - . - .`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 10 | Dash Dot | 2 | ``- . - . - .`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 11 | Dash Dot Dot | 1 | ``- . . - . .`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 12 | Dash Dot Dot | 2 | ``- . . - . .`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
-// | 13 | SlantDash Dot | 2 | ``/ - . / - .`` |
|
|
|
-// +-------+---------------+--------+-----------------+
|
|
|
+// | Index | Name | Weight | Style |
|
|
|
+// +-------+---------------+--------+-------------+
|
|
|
+// | 0 | None | 0 | |
|
|
|
+// | 1 | Continuous | 1 | ----------- |
|
|
|
+// | 2 | Continuous | 2 | ----------- |
|
|
|
+// | 3 | Dash | 1 | - - - - - - |
|
|
|
+// | 4 | Dot | 1 | . . . . . . |
|
|
|
+// | 5 | Continuous | 3 | ----------- |
|
|
|
+// | 6 | Double | 3 | =========== |
|
|
|
+// | 7 | Continuous | 0 | ----------- |
|
|
|
+// | 8 | Dash | 2 | - - - - - - |
|
|
|
+// | 9 | Dash Dot | 1 | - . - . - . |
|
|
|
+// | 10 | Dash Dot | 2 | - . - . - . |
|
|
|
+// | 11 | Dash Dot Dot | 1 | - . . - . . |
|
|
|
+// | 12 | Dash Dot Dot | 2 | - . . - . . |
|
|
|
+// | 13 | SlantDash Dot | 2 | / - . / - . |
|
|
|
//
|
|
|
// The following shows the borders in the order shown in the Excel dialog:
|
|
|
//
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | Index | Style | Index | Style |
|
|
|
-// +=======+=================+=======+=================+
|
|
|
-// | 0 | None | 12 | ``- . . - . .`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | 7 | ``-----------`` | 13 | ``/ - . / - .`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | 4 | ``. . . . . .`` | 10 | ``- . - . - .`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | 11 | ``- . . - . .`` | 8 | ``- - - - - -`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | 9 | ``- . - . - .`` | 2 | ``-----------`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | 3 | ``- - - - - -`` | 5 | ``-----------`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
-// | 1 | ``-----------`` | 6 | ``===========`` |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
+// | Index | Style | Index | Style |
|
|
|
+// +-------+-------------+-------+-------------+
|
|
|
+// | 0 | None | 12 | - . . - . . |
|
|
|
+// | 7 | ----------- | 13 | / - . / - . |
|
|
|
+// | 4 | . . . . . . | 10 | - . - . - . |
|
|
|
+// | 11 | - . . - . . | 8 | - - - - - - |
|
|
|
+// | 9 | - . - . - . | 2 | ----------- |
|
|
|
+// | 3 | - - - - - - | 5 | ----------- |
|
|
|
+// | 1 | ----------- | 6 | =========== |
|
|
|
//
|
|
|
// The following shows the shading styles sorted by excelize index number:
|
|
|
//
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | Index | Style | Index | Style |
|
|
|
-// +=======+=================+=======+=================+
|
|
|
-// | 0 | Horizontal | 3 | Diagonal down |
|
|
|
// +-------+-----------------+-------+-----------------+
|
|
|
+// | 0 | Horizontal | 3 | Diagonal down |
|
|
|
// | 1 | Vertical | 4 | From corner |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 2 | Diagonal Up | 5 | From center |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
//
|
|
|
// The following shows the patterns styles sorted by excelize index number:
|
|
|
//
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | Index | Style | Index | Style |
|
|
|
-// +=======+=================+=======+=================+
|
|
|
-// | 0 | None | 10 | darkTrellis |
|
|
|
// +-------+-----------------+-------+-----------------+
|
|
|
+// | 0 | None | 10 | darkTrellis |
|
|
|
// | 1 | solid | 11 | lightHorizontal |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 2 | mediumGray | 12 | lightVertical |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 3 | darkGray | 13 | lightDown |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 4 | lightGray | 14 | lightUp |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 5 | darkHorizontal | 15 | lightGrid |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 6 | darkVertical | 16 | lightTrellis |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 7 | darkDown | 17 | gray125 |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 8 | darkUp | 18 | gray0625 |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
// | 9 | darkGrid | | |
|
|
|
-// +-------+-----------------+-------+-----------------+
|
|
|
//
|
|
|
// The following the type of horizontal alignment in cells:
|
|
|
//
|
|
|
-// +------------------+
|
|
|
// | Style |
|
|
|
-// +==================+
|
|
|
-// | left |
|
|
|
// +------------------+
|
|
|
+// | left |
|
|
|
// | center |
|
|
|
-// +------------------+
|
|
|
// | right |
|
|
|
-// +------------------+
|
|
|
// | fill |
|
|
|
-// +------------------+
|
|
|
// | justify |
|
|
|
-// +------------------+
|
|
|
// | centerContinuous |
|
|
|
-// +------------------+
|
|
|
// | distributed |
|
|
|
-// +------------------+
|
|
|
//
|
|
|
// The following the type of vertical alignment in cells:
|
|
|
//
|
|
|
-// +------------------+
|
|
|
// | Style |
|
|
|
-// +==================+
|
|
|
-// | top |
|
|
|
// +------------------+
|
|
|
+// | top |
|
|
|
// | center |
|
|
|
-// +------------------+
|
|
|
// | justify |
|
|
|
-// +------------------+
|
|
|
// | distributed |
|
|
|
-// +------------------+
|
|
|
//
|
|
|
// The following the type of font underline style:
|
|
|
//
|
|
|
-// +------------------+
|
|
|
// | Style |
|
|
|
-// +==================+
|
|
|
-// | single |
|
|
|
// +------------------+
|
|
|
+// | single |
|
|
|
// | double |
|
|
|
-// +------------------+
|
|
|
//
|
|
|
-// Excel's built-in formats are shown in the following table:
|
|
|
+// Excel's built-in all languages formats are shown in the following table:
|
|
|
//
|
|
|
-// +-------+----------------------------------------------------+
|
|
|
// | Index | Format String |
|
|
|
-// +=======+====================================================+
|
|
|
-// | 0 | General |
|
|
|
// +-------+----------------------------------------------------+
|
|
|
+// | 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 | m/d/yy |
|
|
|
-// +-------+----------------------------------------------------+
|
|
|
// | 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 | m/d/yy h:mm |
|
|
|
-// +-------+----------------------------------------------------+
|
|
|
// | ... | ... |
|
|
|
-// +-------+----------------------------------------------------+
|
|
|
// | 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 | @ |
|
|
|
+//
|
|
|
+// Excelize built-in currency formats are shown in the following table, only
|
|
|
+// support these types in the following table (Index number is used only for
|
|
|
+// markup and is not used inside an Excel file and you can't get formatted value
|
|
|
+// by the function GetCellValue) currently:
|
|
|
+//
|
|
|
+// | Index | Symbol |
|
|
|
// +-------+----------------------------------------------------+
|
|
|
+// | 164 | CN¥ |
|
|
|
+// | 165 | $ English (China) |
|
|
|
+// | 166 | $ Cherokee (United States) |
|
|
|
+// | 167 | $ Chinese (Singapore) |
|
|
|
+// | 168 | $ Chinese (Taiwan) |
|
|
|
+// | 169 | $ English (Australia) |
|
|
|
+// | 170 | $ English (Belize) |
|
|
|
+// | 171 | $ English (Canada) |
|
|
|
+// | 172 | $ English (Jamaica) |
|
|
|
+// | 173 | $ English (New Zealand) |
|
|
|
+// | 174 | $ English (Singapore) |
|
|
|
+// | 175 | $ English (Trinidad & Tobago) |
|
|
|
+// | 176 | $ English (U.S. Vigin Islands) |
|
|
|
+// | 177 | $ English (United States) |
|
|
|
+// | 178 | $ French (Canada) |
|
|
|
+// | 179 | $ Hawaiian (United States) |
|
|
|
+// | 180 | $ Malay (Brunei) |
|
|
|
+// | 181 | $ Quechua (Ecuador) |
|
|
|
+// | 182 | $ Spanish (Chile) |
|
|
|
+// | 183 | $ Spanish (Colombia) |
|
|
|
+// | 184 | $ Spanish (Ecuador) |
|
|
|
+// | 185 | $ Spanish (El Salvador) |
|
|
|
+// | 186 | $ Spanish (Mexico) |
|
|
|
+// | 187 | $ Spanish (Puerto Rico) |
|
|
|
+// | 188 | $ Spanish (United States) |
|
|
|
+// | 189 | $ Spanish (Uruguay) |
|
|
|
//
|
|
|
func (f *File) NewStyle(style string) (int, error) {
|
|
|
var cellXfsID int
|
|
|
@@ -526,10 +749,70 @@ func setFont(style *xlsxStyleSheet, formatCellStyle *formatCellStyle) int {
|
|
|
// setNumFmt provides function to check if number format code in the range of
|
|
|
// built-in values.
|
|
|
func setNumFmt(style *xlsxStyleSheet, formatCellStyle *formatCellStyle) int {
|
|
|
+ dp := "0."
|
|
|
+ numFmtID := 164 // Default custom number format code from 164.
|
|
|
+ if formatCellStyle.DecimalPlaces < 0 || formatCellStyle.DecimalPlaces > 30 {
|
|
|
+ formatCellStyle.DecimalPlaces = 2
|
|
|
+ }
|
|
|
+ for i := 0; i < formatCellStyle.DecimalPlaces; i++ {
|
|
|
+ dp += "0"
|
|
|
+ }
|
|
|
_, ok := builtInNumFmt[formatCellStyle.NumFmt]
|
|
|
+ if !ok {
|
|
|
+ fc, currency := currencyNumFmt[formatCellStyle.NumFmt]
|
|
|
+ if !currency {
|
|
|
+ return setLangNumFmt(style, formatCellStyle)
|
|
|
+ }
|
|
|
+ fc = strings.Replace(fc, "0.00", dp, -1)
|
|
|
+ if style.NumFmts != nil {
|
|
|
+ numFmtID = style.NumFmts.NumFmt[len(style.NumFmts.NumFmt)-1].NumFmtID + 1
|
|
|
+ nf := xlsxNumFmt{
|
|
|
+ FormatCode: fc,
|
|
|
+ NumFmtID: numFmtID,
|
|
|
+ }
|
|
|
+ style.NumFmts.NumFmt = append(style.NumFmts.NumFmt, &nf)
|
|
|
+ style.NumFmts.Count++
|
|
|
+ } else {
|
|
|
+ nf := xlsxNumFmt{
|
|
|
+ FormatCode: fc,
|
|
|
+ NumFmtID: numFmtID,
|
|
|
+ }
|
|
|
+ numFmts := xlsxNumFmts{
|
|
|
+ NumFmt: []*xlsxNumFmt{&nf},
|
|
|
+ Count: 1,
|
|
|
+ }
|
|
|
+ style.NumFmts = &numFmts
|
|
|
+ }
|
|
|
+ return numFmtID
|
|
|
+ }
|
|
|
+ return formatCellStyle.NumFmt
|
|
|
+}
|
|
|
+
|
|
|
+// setLangNumFmt provides function to set number format code with language.
|
|
|
+func setLangNumFmt(style *xlsxStyleSheet, formatCellStyle *formatCellStyle) int {
|
|
|
+ numFmts, ok := langNumFmt[formatCellStyle.Lang]
|
|
|
+ if !ok {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ var fc string
|
|
|
+ fc, ok = numFmts[formatCellStyle.NumFmt]
|
|
|
if !ok {
|
|
|
return 0
|
|
|
}
|
|
|
+ nf := xlsxNumFmt{
|
|
|
+ FormatCode: fc,
|
|
|
+ NumFmtID: formatCellStyle.NumFmt,
|
|
|
+ }
|
|
|
+ if style.NumFmts != nil {
|
|
|
+ style.NumFmts.NumFmt = append(style.NumFmts.NumFmt, &nf)
|
|
|
+ style.NumFmts.Count++
|
|
|
+ } else {
|
|
|
+ numFmts := xlsxNumFmts{
|
|
|
+ NumFmt: []*xlsxNumFmt{&nf},
|
|
|
+ Count: 1,
|
|
|
+ }
|
|
|
+ style.NumFmts = &numFmts
|
|
|
+ }
|
|
|
return formatCellStyle.NumFmt
|
|
|
}
|
|
|
|