Why the style set does not work #3259

Open
opened 2024-11-25 02:13:51 +00:00 by laxiry1 · 1 comment

version 0.20.3
the style set does not work
The code is as follows, where the style data of the output console is correct

export function exportExcelByAoa(wbName, wsName, aoa, titleRowCount, merges = [], cols = []) {
const newWorkbook = XLSX.utils.book_new()
const workSheet = XLSX.utils.aoa_to_sheet(aoa)
const border = {
top: { style: 'thin' },
bottom: { style: 'thin' },
left: { style: 'thin' },
right: { style: 'thin' }
}
// 设置单元格样式
const range = XLSX.utils.decode_range(workSheet['!ref'])
for (let R = range.s.r; R <= range.e.r; ++R) {
for (let C = range.s.c; C <= range.e.c; ++C) {
const cellAddress = XLSX.utils.encode_cell({ r: R, c: C });
const cellStyle = {
alignment: { vertical: 'center', horizontal: 'center' },
border: border
}
if (R < titleRowCount) { // 标题行
cellStyle.font = { bold: true }
}
if (!workSheet[cellAddress]) { workSheet[cellAddress] = {}}
if (!workSheet[cellAddress].s) { workSheet[cellAddress].s = {}}
workSheet[cellAddress].s = { ...cellStyle }
}
}
workSheet['!cols'] = cols
workSheet['!merges'] = merges
XLSX.utils.book_append_sheet(newWorkbook, workSheet, wsName)
for (let key in workSheet) {
if (workSheet[key] instanceof Object) {
console.log(key, '=>', workSheet[key].s)
}
}
XLSX.writeFile(newWorkbook, ${wbName}.xlsx, { cellStyles: true })
}

version 0.20.3 the style set does not work The code is as follows, where the style data of the output console is correct export function exportExcelByAoa(wbName, wsName, aoa, titleRowCount, merges = [], cols = []) { const newWorkbook = XLSX.utils.book_new() const workSheet = XLSX.utils.aoa_to_sheet(aoa) const border = { top: { style: 'thin' }, bottom: { style: 'thin' }, left: { style: 'thin' }, right: { style: 'thin' } } // 设置单元格样式 const range = XLSX.utils.decode_range(workSheet['!ref']) for (let R = range.s.r; R <= range.e.r; ++R) { for (let C = range.s.c; C <= range.e.c; ++C) { const cellAddress = XLSX.utils.encode_cell({ r: R, c: C }); const cellStyle = { alignment: { vertical: 'center', horizontal: 'center' }, border: border } if (R < titleRowCount) { // 标题行 cellStyle.font = { bold: true } } if (!workSheet[cellAddress]) { workSheet[cellAddress] = {}} if (!workSheet[cellAddress].s) { workSheet[cellAddress].s = {}} workSheet[cellAddress].s = { ...cellStyle } } } workSheet['!cols'] = cols workSheet['!merges'] = merges XLSX.utils.book_append_sheet(newWorkbook, workSheet, wsName) for (let key in workSheet) { if (workSheet[key] instanceof Object) { console.log(key, '=>', workSheet[key].s) } } XLSX.writeFile(newWorkbook, `${wbName}.xlsx`, { cellStyles: true }) }
Author

测试数据JSON
{
"wbName":"【2024-11-18~2024-11-20】测试项目阶段(TQ-S2493)项目工时记录表",
"wsName":"项目工时记录",
"aoa":[
[
"【2024-11-18~2024-11-20】测试项目阶段(TQ-S2493)项目工时记录表",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
],
[
"序号",
"日期",
"意向阶段",
"",
"",
"设计阶段",
"",
"",
"设计阶段",
"",
"",
"设计阶段",
"",
"",
"设计阶段",
"",
"",
"设计阶段",
"",
"",
"设计阶段",
"",
"",
"设计阶段",
"",
"",
"厂内安装调试阶段",
"",
"",
"厂内安装调试阶段",
"",
"",
"厂内安装调试阶段",
"",
"",
"厂内安装调试阶段",
"",
"",
"厂内安装调试阶段",
"",
"",
"厂内安装调试阶段",
"",
"",
"项目现场安装调试阶段",
"",
"",
"项目现场安装调试阶段",
"",
"",
"项目现场安装调试阶段",
"",
"",
"项目现场安装调试阶段",
"",
"",
"项目现场安装调试阶段",
"",
"",
"项目现场安装调试阶段",
"",
"",
"项目现场运营陪产阶段",
"",
"",
"管理费用",
"",
"",
"管理费用",
"",
""
],
[
"",
"",
"产品部人工工时",
"",
"",
"机械主设计人工工时",
"",
"",
"机械辅设计人工工时",
"",
"",
"电气主设计人工工时",
"",
"",
"电气辅设计人工工时",
"",
"",
"嵌入式设计人工工时",
"",
"",
"软件设计人工工时",
"",
"",
"视觉设计人工工时",
"",
"",
"机械装配人工工时",
"",
"",
"电气装配人工工时",
"",
"",
"电气调试人工工时",
"",
"",
"嵌入式调试人工工时",
"",
"",
"软件调试人工工时",
"",
"",
"视觉调试人工工时",
"",
"",
"机械装配人工工时",
"",
"",
"电气装配人工工时",
"",
"",
"电气调试人工工时",
"",
"",
"嵌入式调试人工工时",
"",
"",
"软件调试人工工时",
"",
"",
"视觉调试人工工时",
"",
"",
"陪产人工工时",
"",
"",
"项目经理人工工时",
"",
"",
"项目助理人工工时",
"",
""
],
[
"",
"",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)",
"姓名",
"工时(小时)",
"工时(天)"
],
[
1,
"2024-11-19",
"",
"",
"",
"赵凯",
15,
1.6667,
"",
"",
"",
"",
"",
"",
"娄本相",
8.52,
1.065,
"刘强",
9,
1.125,
"张志民",
5,
0.5556,
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"孙新龙",
15,
1.6667,
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
],
[
2,
"2024-11-19",
"",
"",
"",
"董光辉",
2,
0.2222,
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
]
],
"titleRowCount":4,
"merges":[
{
"s":{
"r":0,
"c":0
},
"e":{
"r":0,
"c":70
}
},
{
"s":{
"r":1,
"c":0
},
"e":{
"r":3,
"c":0
}
},
{
"s":{
"r":1,
"c":1
},
"e":{
"r":3,
"c":1
}
},
{
"s":{
"r":2,
"c":2
},
"e":{
"r":2,
"c":4
}
},
{
"s":{
"r":2,
"c":5
},
"e":{
"r":2,
"c":7
}
},
{
"s":{
"r":1,
"c":2
},
"e":{
"r":1,
"c":4
}
},
{
"s":{
"r":2,
"c":8
},
"e":{
"r":2,
"c":10
}
},
{
"s":{
"r":2,
"c":11
},
"e":{
"r":2,
"c":13
}
},
{
"s":{
"r":2,
"c":14
},
"e":{
"r":2,
"c":16
}
},
{
"s":{
"r":2,
"c":17
},
"e":{
"r":2,
"c":19
}
},
{
"s":{
"r":2,
"c":20
},
"e":{
"r":2,
"c":22
}
},
{
"s":{
"r":2,
"c":23
},
"e":{
"r":2,
"c":25
}
},
{
"s":{
"r":2,
"c":26
},
"e":{
"r":2,
"c":28
}
},
{
"s":{
"r":1,
"c":5
},
"e":{
"r":1,
"c":25
}
},
{
"s":{
"r":2,
"c":29
},
"e":{
"r":2,
"c":31
}
},
{
"s":{
"r":2,
"c":32
},
"e":{
"r":2,
"c":34
}
},
{
"s":{
"r":2,
"c":35
},
"e":{
"r":2,
"c":37
}
},
{
"s":{
"r":2,
"c":38
},
"e":{
"r":2,
"c":40
}
},
{
"s":{
"r":2,
"c":41
},
"e":{
"r":2,
"c":43
}
},
{
"s":{
"r":2,
"c":44
},
"e":{
"r":2,
"c":46
}
},
{
"s":{
"r":1,
"c":26
},
"e":{
"r":1,
"c":43
}
},
{
"s":{
"r":2,
"c":47
},
"e":{
"r":2,
"c":49
}
},
{
"s":{
"r":2,
"c":50
},
"e":{
"r":2,
"c":52
}
},
{
"s":{
"r":2,
"c":53
},
"e":{
"r":2,
"c":55
}
},
{
"s":{
"r":2,
"c":56
},
"e":{
"r":2,
"c":58
}
},
{
"s":{
"r":2,
"c":59
},
"e":{
"r":2,
"c":61
}
},
{
"s":{
"r":2,
"c":62
},
"e":{
"r":2,
"c":64
}
},
{
"s":{
"r":1,
"c":44
},
"e":{
"r":1,
"c":61
}
},
{
"s":{
"r":2,
"c":65
},
"e":{
"r":2,
"c":67
}
},
{
"s":{
"r":1,
"c":62
},
"e":{
"r":1,
"c":64
}
},
{
"s":{
"r":2,
"c":68
},
"e":{
"r":2,
"c":70
}
},
{
"s":{
"r":1,
"c":65
},
"e":{
"r":1,
"c":70
}
},
{
"s":{
"r":4,
"c":1
},
"e":{
"r":5,
"c":1
}
}
],
"cols":[
{
"wch":6
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
},
{
"wch":6
},
{
"wch":12
},
{
"wch":12
}
]
}

测试数据JSON { "wbName":"【2024-11-18~2024-11-20】测试项目阶段(TQ-S2493)项目工时记录表", "wsName":"项目工时记录", "aoa":[ [ "【2024-11-18~2024-11-20】测试项目阶段(TQ-S2493)项目工时记录表", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ], [ "序号", "日期", "意向阶段", "", "", "设计阶段", "", "", "设计阶段", "", "", "设计阶段", "", "", "设计阶段", "", "", "设计阶段", "", "", "设计阶段", "", "", "设计阶段", "", "", "厂内安装调试阶段", "", "", "厂内安装调试阶段", "", "", "厂内安装调试阶段", "", "", "厂内安装调试阶段", "", "", "厂内安装调试阶段", "", "", "厂内安装调试阶段", "", "", "项目现场安装调试阶段", "", "", "项目现场安装调试阶段", "", "", "项目现场安装调试阶段", "", "", "项目现场安装调试阶段", "", "", "项目现场安装调试阶段", "", "", "项目现场安装调试阶段", "", "", "项目现场运营陪产阶段", "", "", "管理费用", "", "", "管理费用", "", "" ], [ "", "", "产品部人工工时", "", "", "机械主设计人工工时", "", "", "机械辅设计人工工时", "", "", "电气主设计人工工时", "", "", "电气辅设计人工工时", "", "", "嵌入式设计人工工时", "", "", "软件设计人工工时", "", "", "视觉设计人工工时", "", "", "机械装配人工工时", "", "", "电气装配人工工时", "", "", "电气调试人工工时", "", "", "嵌入式调试人工工时", "", "", "软件调试人工工时", "", "", "视觉调试人工工时", "", "", "机械装配人工工时", "", "", "电气装配人工工时", "", "", "电气调试人工工时", "", "", "嵌入式调试人工工时", "", "", "软件调试人工工时", "", "", "视觉调试人工工时", "", "", "陪产人工工时", "", "", "项目经理人工工时", "", "", "项目助理人工工时", "", "" ], [ "", "", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)", "姓名", "工时(小时)", "工时(天)" ], [ 1, "2024-11-19", "", "", "", "赵凯", 15, 1.6667, "", "", "", "", "", "", "娄本相", 8.52, 1.065, "刘强", 9, 1.125, "张志民", 5, 0.5556, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "孙新龙", 15, 1.6667, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ], [ 2, "2024-11-19", "", "", "", "董光辉", 2, 0.2222, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ] ], "titleRowCount":4, "merges":[ { "s":{ "r":0, "c":0 }, "e":{ "r":0, "c":70 } }, { "s":{ "r":1, "c":0 }, "e":{ "r":3, "c":0 } }, { "s":{ "r":1, "c":1 }, "e":{ "r":3, "c":1 } }, { "s":{ "r":2, "c":2 }, "e":{ "r":2, "c":4 } }, { "s":{ "r":2, "c":5 }, "e":{ "r":2, "c":7 } }, { "s":{ "r":1, "c":2 }, "e":{ "r":1, "c":4 } }, { "s":{ "r":2, "c":8 }, "e":{ "r":2, "c":10 } }, { "s":{ "r":2, "c":11 }, "e":{ "r":2, "c":13 } }, { "s":{ "r":2, "c":14 }, "e":{ "r":2, "c":16 } }, { "s":{ "r":2, "c":17 }, "e":{ "r":2, "c":19 } }, { "s":{ "r":2, "c":20 }, "e":{ "r":2, "c":22 } }, { "s":{ "r":2, "c":23 }, "e":{ "r":2, "c":25 } }, { "s":{ "r":2, "c":26 }, "e":{ "r":2, "c":28 } }, { "s":{ "r":1, "c":5 }, "e":{ "r":1, "c":25 } }, { "s":{ "r":2, "c":29 }, "e":{ "r":2, "c":31 } }, { "s":{ "r":2, "c":32 }, "e":{ "r":2, "c":34 } }, { "s":{ "r":2, "c":35 }, "e":{ "r":2, "c":37 } }, { "s":{ "r":2, "c":38 }, "e":{ "r":2, "c":40 } }, { "s":{ "r":2, "c":41 }, "e":{ "r":2, "c":43 } }, { "s":{ "r":2, "c":44 }, "e":{ "r":2, "c":46 } }, { "s":{ "r":1, "c":26 }, "e":{ "r":1, "c":43 } }, { "s":{ "r":2, "c":47 }, "e":{ "r":2, "c":49 } }, { "s":{ "r":2, "c":50 }, "e":{ "r":2, "c":52 } }, { "s":{ "r":2, "c":53 }, "e":{ "r":2, "c":55 } }, { "s":{ "r":2, "c":56 }, "e":{ "r":2, "c":58 } }, { "s":{ "r":2, "c":59 }, "e":{ "r":2, "c":61 } }, { "s":{ "r":2, "c":62 }, "e":{ "r":2, "c":64 } }, { "s":{ "r":1, "c":44 }, "e":{ "r":1, "c":61 } }, { "s":{ "r":2, "c":65 }, "e":{ "r":2, "c":67 } }, { "s":{ "r":1, "c":62 }, "e":{ "r":1, "c":64 } }, { "s":{ "r":2, "c":68 }, "e":{ "r":2, "c":70 } }, { "s":{ "r":1, "c":65 }, "e":{ "r":1, "c":70 } }, { "s":{ "r":4, "c":1 }, "e":{ "r":5, "c":1 } } ], "cols":[ { "wch":6 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 }, { "wch":6 }, { "wch":12 }, { "wch":12 } ] }
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sheetjs/sheetjs#3259
No description provided.