javascript Excel求和函数在下载后不工作,时间为hh:mm:ss

mrfwxfqh  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(98)

下载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的总和?

vddsk6oq

vddsk6oq1#

您需要将时间表示为一个数字,即时间中的秒数/ 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,列B仍然是一个简单的数字。

相关问题