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
相关产品推荐
相关产品推荐

