javascript - 下载后 Excel 的求和函数在以 hh:mm:ss 格式的时间上不工作
下载 xlsx 文件后,我需要在状态栏中求和时间值,并查看平均值、总计、计数等。
我已附上显示当前情况为0的截图。
TS 代码
public exportAsExcelFile(summary:any[], json: any[], excelFileName: string): void {
let report = "Global Service Desk SLA";
let ReportName = [{"Report":`Report Name : ${report}`}];
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(ReportName ,{skipHeader:true});
if(worksheet['A2'] == undefined){
worksheet['A2'] = {"t":"s","v":`Date Range : ${summary[0].FromDate +" - "+summary[0].ToDate}`};
}
if(worksheet['A3'] == undefined){
worksheet['A3'] = {"t":"s","v":`Bot : ${summary[0].Bot}`}
}
if(worksheet['A4'] == undefined){
worksheet['A4'] = {"t":"s","v":`Timezone : ${summary[0].timeZone}`}
}
const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data']};
XLSX.utils.sheet_add_json(worksheet,json,{origin:"A7"});
const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
this.saveAsExcelFile(excelBuffer, excelFileName);
}
如果我像截图中那样选择队列时间列,平均总数显示为0,我需要在平均值部分显示总值的总和
如果我将 hh:mm:ss 改为 h:mm:ss 会起作用
如果我删除该列单元格中的单个 0,平均总数就会显示,请参见我的截图
我如何通过使用 SheetJS 库的代码来强制执行此类型?或者,有没有其他方法让 Excel 对 hh:mm:ss 格式计算总和?
答案#1
你需要将时间表示为一个数字,即时间的秒数除以 86400。
例如,对于 10:30:00,它是 (10.5 小时 x 60 分钟 x 60 秒)/86400
然后你将需要的单元格的 z 属性设置为 hh:mm:ss。
请参见下面的示例代码,它在美国英语区域设置中有效:
const XLSX = require("xlsx");
const filename = "./Book7.xlsx";
// 3 times: 00:00:00, 00:10:00, 02:30:00
const times = [0, (10 * 60) / 86400, ((2.5 * 60) * 60) / 86400];
const data = [
["a", times[0], times[0]],
["b", times[1], times[1]],
["c", times[2], times[2]],
];
// put array of arrays to sheet
const worksheet = XLSX.utils.aoa_to_sheet(data);
// update 'z' property to time format
for (let i=1; i<=data.length; i++) {
worksheet[`C${i}`].z = "hh:mm:ss";
}
console.log(worksheet);
// write workbook to disk
const workbook = { Sheets: { 'data': worksheet }, SheetNames: ['data']};
XLSX.writeFile(workbook, filename, {cellNF: true});
请注意,我更新了列 C 的 z 属性,但列 B 保持为简单的数字。总和和平均值显示正常。


