需求如图 首先说明是不能拆分单元格的,因为单元格是最小单位。只能通过合并单元格来实现。
实现思路:点击导出按钮,去请求后端数据。data数据如下:
[{OrderNo: 'No637829645038060996', Name: '营养快线', Num: 1, Floor: 1}
{OrderNo: 'No637829644168104671', Name: '营养快线', Num: 1, Floor: 1}
{OrderNo: 'No637829644168104671', Name: '营养快线', Num: 1, Floor: 1}
{OrderNo: 'No637829640444687386', Name: '营养快线', Num: 1, Floor: 1}
{OrderNo: 'No637829621299943451', Name: '营养快线', Num: 1, Floor: 1}
{OrderNo: 'No637829582358522702', Name: '营养快线', Num: 1, Floor: 1}]
将相同OrderNo的数据合并,必须是上下相连着的。 使用组件:layui-excel,先去看这个组件的文档,才能看得懂代码,此组件不仅仅是layui,可以应用于各种项目。 核心代码如下:
$.get('/Order/GetOrderListByExportFile', { startTime, endTime, deviceCode, phoneNum, orderNo, merchantName, limit: 0, page: 0 },
function (data) {
data.data.unshift({ OrderNo: '订单号', Name: '商品名称', Num: '数量', Floor: '所在层' });
data = data.data
var mergeConfigArr = [], temp = [];
data.forEach((item, i) => {
if (!data[i + 1]) {
if (temp.length == 1) {
temp.push('A' + (i + 1))
mergeConfigArr.push(temp)
temp = []
}
return
}
var nextOrder = data[i + 1]['OrderNo'], thisOrder = item['OrderNo'];
if (thisOrder== nextOrder) {
if (temp.length == 0) {
temp.push('A' + (i+1))
}
} else {
if (temp.length == 1) {
temp.push('A' + (i+1))
mergeConfigArr.push(temp)
temp = []
}
}
})
var mergeConf = LAY_EXCEL.makeMergeConfig(mergeConfigArr);
LAY_EXCEL.exportExcel(data, '订单列表.xlsx', 'xlsx', {
extend: {
sheet1: {
'!merges': mergeConf
}
}
})
})
明天更如果有多列要合并该怎么办。
|