Office脚本:将当前日期转换为指定格式以实现工作表日期比较
Office脚本:将当前日期转换为指定格式以实现工作表日期比较
我来帮你搞定这个日期格式转换和比较的问题!你当前的代码里直接调用getMonth()返回的是0-11的数字,年份也是完整四位数,这和你需要的DD-MMM-YY格式完全不匹配,所以自然没法正确匹配工作表里的日期。下面给你两种可行的解决方案:
方案一:转换为指定格式的字符串进行比较
这种方法适合工作表中存储的日期是文本格式的情况,我们手动拼接出DD-MMM-YY格式的字符串:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getWorksheet("Summary"); // 修正了你之前引号不配对的问题 let dataRange = selectedSheet.getRange("AC:AC").getUsedRange(); let maxRows = dataRange.getRowCount(); // 去掉多余的+7,getUsedRange已经是实际有数据的行范围 let maxCols = dataRange.getColumnCount(); // 定义月份缩写数组,对应0-11的月份数字 const monthAbbrs = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; const today = new Date(); // 构建DD-MMM-YY格式的字符串 const day = today.getDate(); const month = monthAbbrs[today.getMonth()]; const year = today.getFullYear().toString().slice(-2); // 取年份后两位 const formattedToday = `${day}-${month}-${year}`; console.log("当前日期格式化后:", formattedToday); for (let row = 0; row < maxRows; row++) { for (let col = 0; col < maxCols; col++) { let cellValue = dataRange.getCell(row, col).getValue(); // 处理单元格值:如果是日期对象就转成目标格式,否则直接用原文本 let cellText = typeof cellValue === "object" ? cellValue.toLocaleDateString("en-US", {day: "numeric", month: "short", year: "2-digit"}) : cellValue; if (cellText === formattedToday) { console.log(`第${row+1}行匹配成功!`); } } } }
方案二:直接比较日期对象(更可靠)
如果工作表中的日期是Excel日期类型(不是文本),直接比较日期对象会更准确,避免字符串格式不一致的问题:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getWorksheet("Summary"); let dataRange = selectedSheet.getRange("AC:AC").getUsedRange(); let maxRows = dataRange.getRowCount(); let maxCols = dataRange.getColumnCount(); // 获取今天的日期(去掉时分秒,只保留年月日部分) const today = new Date(); const todayOnlyDate = new Date(today.getFullYear(), today.getMonth(), today.getDate()); for (let row = 0; row < maxRows; row++) { for (let col = 0; col < maxCols; col++) { let cellValue = dataRange.getCell(row, col).getValue(); // 检查单元格值是否为日期对象 if (cellValue instanceof Date) { // 去掉单元格日期的时分秒,只保留年月日 const cellDateOnly = new Date(cellValue.getFullYear(), cellValue.getMonth(), cellValue.getDate()); if (cellDateOnly.getTime() === todayOnlyDate.getTime()) { console.log(`第${row+1}行匹配成功!`); } } } } }
几个关键注意点:
- 你原来的代码里
workbook.getWorksheet("Summary)存在引号不配对的错误,我已经修正了; - 不要随便给
maxRows加+7,getUsedRange()已经返回了实际有数据的行范围,直接用getRowCount()即可; - 如果不确定单元格里的日期是文本还是日期类型,可以先判断类型再处理,避免出现报错。
内容来源于stack exchange




