js-xlsx 格式化单元格是在单元格数据中添加一个 key 为 s 的 json 对象。配置如下:
var datas = {
A1: {
v: '数据',
s: {
font: {
sz: 14,
bold: true,
color: { rgb: "FFFFAA00" }
},
fill: {
bgColor: {
indexed: 64
},
fgColor: {
rgb: "FFFF00"
}
}
}
}
};| 样式属性 | 子属性 | 取值 |
| fill 填充 | patternType 填充方式 | "solid" or "none" |
| fgColor | COLOR_SPEC | |
| bgColor 背景颜色 | COLOR_SPEC | |
| font 字体格式 | name 字体名称 | "Calibri" // default |
| sz 字体大小 | "11" // font size in points | |
| color 字体颜色 | COLOR_SPEC | |
| bold 是否为粗体 | true or false | |
| underline 是否有下划线 | true or false | |
| italic 是否为斜体字 | true or false | |
| strike | true or false | |
| outline | true or false | |
| shadow | true or false | |
| vertAlign | true or false | |
| numFmt 数字格式化 | "0" // integer index to built in formats, see StyleBuilder.SSF property | |
"0.00%" // string matching a built-in format, see StyleBuilder.SSF | ||
"0.0%" // string specifying a custom format | ||
"0.00%;\\(0.00%\\);\\-;@" // string specifying a custom format, escaping special characters | ||
| "m/dd/yy" // string a date format using Excel's format notation | ||
| alignment 对齐方式 | vertical 垂直对齐方式 | "bottom" or "center" or "top" |
| horizontal 水平对齐方式 | "bottom" or "center" or "top" | |
wrapText 文本是否自动换行 | true or false | |
readingOrder | 2 // for right-to-left | |
textRotation | Number from 0 to 180 or 255 (default is 0 ) | |
90 is rotated up 90 degrees | ||
45 is rotated up 45 degrees | ||
135 is rotated down 45 degrees | ||
180 is rotated down 180 degrees | ||
| 255 is special, aligned vertically | ||
border 边框 | top 上边框 | { style: BORDER_STYLE, color: COLOR_SPEC } |
| bottom 下边框 | { style: BORDER_STYLE, color: COLOR_SPEC } | |
left 左边框 | { style: BORDER_STYLE, color: COLOR_SPEC } | |
right 右边框 | { style: BORDER_STYLE, color: COLOR_SPEC } | |
diagonal | { style: BORDER_STYLE, color: COLOR_SPEC } | |
diagonalUp | true or false | |
| diagonalDown | true or false |
填充、字体和边框的颜色被指定为对象,或者:
{ auto: 1} 自动指定值
{ rgb: "FFFFAA00" } 指定十六进制ARGB值
{ theme: "1", tint: "-0.25"} 为主题颜色和色调值指定整数索引(默认为0)
{ indexed: 64} fill.bgColor 的默认值
边框样式是一个字符串值,可以使用以下任何一个值:
thin
medium
thick
dotted
hair
dashed
mediumDashed
dashDot
mediumDashDot
dashDotDot
mediumDashDotDot
slantDashDot
合并区域的边界为合并区域内的每个单元指定。因此,要将一个框边框应用到一个合并区域的3x3单元格,需要为8个不同的单元格指定边框样式。如下图:

其中:
左边边框:需要设置左边三个单元格的左边边框
右边边框:需要设置右边三个单元格的右边边框
顶部边框:需要设置顶部三个单元格的顶部边框
底部边框:需要设置底部三个单元格的底部边框
对 excel 的 C2 单元格进行格式化,设置字体为粗字体、字体大小为14,设置颜色为 #FFAA00,并且设置背景颜色为 #FFFF00。完成代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>JS-XLSX Demo</title>
<script type="text/javascript" src='./xlsx-style/xlsx.full.min.js'></script>
</head>
<body>
<p>使用JS导出Excel表,并且对表格的单元格进行格式化</p>
<p>
<button onclick="exportExcel()">导出Excel</button>
</p>
<script type="text/javascript">
function exportExcel() {
var datas = {
'!ref': 'A1:D10',
A1: { v: '分类' },
B1: { v: '编程语言' },
C1: { v: '描述信息' },
A2: { v:'后端编程' },
B2: { v:'Java' },
C2: {
v:'世界上最好的语言',
s:{
font: {
sz: 14,
bold: true,
color: { rgb: "FFFFAA00" }
},
fill: {
bgColor: {
indexed: 64
},
fgColor: {
rgb: "FFFF00"
}
}
}
},
A3: { v:'后端编程' },
B3: { v:'C#' },
C3: { v:'出自微软的手笔,微软的Java' },
A4: { v:'后端编程' },
B4: { v:'PHP' },
C4: { v:'我不是很喜欢的编程语言' },
A5: { v:'前端编程' },
B5: { v:'JavaScript' },
C5: { v:'前端人员必会语言,有了JavaScript才有灵魂' },
A6: { v:'操作系统' },
B6: { v:'Linux' },
C6: { v:'开源的操作系统,适合做服务器' },
};
var wb = {
SheetNames: ['Sheet1'],
Sheets: {
Sheet1: datas
}
};
var tmpDown = new Blob([
s2ab(
// 这里的数据是用来定义导出的格式类型
XLSX.write(wb, {
bookType: 'xlsx',
bookSST: false,
type: 'binary'
})
)
], {
type: ""
});
saveAs(tmpDown, "write_num.xlsx");
}
function saveAs(obj, fileName) {
var tmpa = document.createElement("a");
tmpa.download = fileName || "下载";
tmpa.href = URL.createObjectURL(obj);
tmpa.click();
setTimeout(function () {
URL.revokeObjectURL(obj);
}, 100);
}
function s2ab(s) {
if (typeof ArrayBuffer !== 'undefined') {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) {
view[i] = s.charCodeAt(i) & 0xFF;
}
return buf;
} else {
var buf = new Array(s.length);
for (var i = 0; i != s.length; ++i) {
buf[i] = s.charCodeAt(i) & 0xFF;
}
return buf;
}
}
</script>
</body>
</html>实例运行效果如下图:

点击“导出Excel”按钮,将数据导出到 Excel 表格。excel 效果如下图:

注意:该实例不能使用 js-xlsx 库,我们需要到 github / npm 库上面去下载 xlsx-style 库。淘宝 npm 库地址 https://npm.taobao.org/package/xlsx-style