You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Office Script读取Excel日期显示序列号,如何保留格式并定位当前日期?

问题原因与解决方案

你遇到的问题是因为Excel中日期本质存储为序列号(代表1900年1月0日以来的天数),getValues()方法获取的是单元格的原始存储值,而非格式化后的显示文本。另外你的代码还有两处语法错误需要修正:

  • getActiveworksheet是错误方法名,获取指定工作表应该用getWorksheet()
  • getRange("A1:A10)缺少闭合引号,应为getRange("A1:A10")

下面提供两种解决方法:

方法1:直接获取单元格显示文本

使用getTexts()方法可以直接拿到Excel中单元格显示的格式化日期字符串,和你在表格里看到的格式完全一致:

function main(workbook: ExcelScript.Workbook) {
  let sheet = workbook.getWorksheet("rainbow");
  let range = sheet.getRange("A1:A10");
  let displayTexts = range.getTexts();

  for (let i = 0; i < displayTexts.length; i++) {
    console.log(displayTexts[i][0]);
  }
}

方法2:将序列号转为日期并自定义格式化

如果需要自定义日期输出格式,可以把序列号转换为JavaScript日期对象,再按需格式化:

function main(workbook: ExcelScript.Workbook) {
  let sheet = workbook.getWorksheet("rainbow");
  let range = sheet.getRange("A1:A10");
  let values = range.getValues();

  for (let i = 0; i < values.length; i++) {
    let serialNumber = values[i][0];
    if (typeof serialNumber === "number") {
      // 转换Excel序列号为JS日期(Excel以1900年为基准,需做偏移调整)
      let date = new Date((serialNumber - 25569) * 86400000);
      // 自定义格式,示例为YYYY-MM-DD,可根据需求修改参数
      let formattedDate = date.toLocaleDateString("zh-CN", {
        year: "numeric",
        month: "2-digit",
        day: "2-digit"
      });
      console.log(formattedDate);
    }
  }
}

内容的提问来源于stack exchange,提问作者Marcusaurelius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:12:10