需要一个程序 在表格中有一个登记时间和交接时间。在登记时间后七天(包含七天)若交接时间没有写入则这一排数据将会提醒。提醒的样式不限。
抽空给你写了一个,根据需要自己修改哪一列是登记时间和交接时间;
Cells(i, 'A').Text;//修改'A'为你自己的登记时间的列名字
Cells(i, 'B').Text;//修改'B'为你自己的登记时间的列名字
for (let i = firstRow + 1; i <= lastRow; i++) { //如果有大标题,那么firstRow +1(从第二行开始),如果有大标题和小标题,从第三行开始,改成+2
支持以下时间格式
年+月+日
月+日
支持以下分隔符号:
-/、年月日
// 定义今天和每月最后一天的时间
const now = new Date();// 获取当前日期和时间
const currentYear = now.getFullYear();// 获取当前年份
const currentMonth = now.getMonth() + 1;// 获取当前月份,注意需要[+1]
const currentDay = now.getDate();// 今天
// 定义API
var API = Application;
// 定义使用区域
var UsedRange = API.ActiveSheet.UsedRange;
var firstCol = UsedRange.Column;
var lastCol = UsedRange.ColumnEnd;
var firstRow = UsedRange.Row;
var lastRow = UsedRange.RowEnd;
// 打印激活区域的范围
console.log(
'[' + 'firstCol: ' + firstCol + ']',
'[' + 'lastCol: ' + lastCol + ']',
'[' + 'firstRow: ' + firstRow + ']',
'[' + 'lastRow: ' + lastRow + ']'
)
//判断日期是年+月+日或年+月
/**
* @param {any} str
*/
function checkDate(str) {
let formatA = /^\d{4}[-\/、\u4e00-\u9fa5]\d{1,2}[-\/、\u4e00-\u9fa5]\d{1,2}$$/; //判断时间格式年+月+日,支持-\/、年月日分隔符
let formatB = /^\d{1,2}[-\/、\u4e00-\u9fa5]\d{1,2}$$/; //判断时间格式月+日,支持-\/、月日分隔符
if (formatA.test(str)) {
return true;
} else if (formatB.test(str)) {
return false;
} else {
console.log('错误的时间格式');
return 0;
}
}
//计算现在时间和登记日期的差值
/**
* @param {number} targetYear
* @param {number} targetMonth
* @param {number} targetDay
*/
function isSevenDaysOrMore(targetYear, targetMonth, targetDay) {
const oneDayInMilliseconds = 24 * 60 * 60 * 1000; // 一天的毫秒数
const currentDateTimestamp = new Date(currentYear, currentMonth, currentDay).getTime();//现在时间 年+月+日
const targetDateTimestamp = new Date(targetYear, targetMonth, targetDay).getTime();//登记时间 年+月+日
const differenceInDays = Math.round((currentDateTimestamp - targetDateTimestamp) / oneDayInMilliseconds);//计算时间差
const timeDiff = (differenceInDays >= 7 ? true : false);//输出布尔值判断
return timeDiff;//返回结果
}
//strA 假设A列是登记时间
//strB 假设B列是交接时间
//'#FF0000' 红色
//'#FFFF00' 黄色
for (let i = firstRow + 1; i <= lastRow; i++) {
let cellA = Cells(i, 'A').Text;//获取A列文本内容
let dateA = new Date(cellA);//A列文本转换为登记时间
let yearA = (checkDate(cellA) ? dateA.getFullYear() : currentYear);//提取年份
let monthA = dateA.getMonth() + 1;//提取月份
let dayA = dateA.getDate();//提取日期
let cellB = Cells(i, 'B').Text;//获取B列文本内容
//let dateB = new Date(cellB);//B列文本转换为交接时间
//let yearA = date.getFullYear();
//let monthA = date.getMonth();
//let dayA = date.getDate();
//如果登记时间的格式为年+月+日
if (yearA && monthA && dayA) {
//直接从登记时间获取年+月+日并计算时间差
let timeDiff = isSevenDaysOrMore(yearA, monthA, dayA);
//如果大于等于7天并且没有交接时间
if (timeDiff && !cellB) {
console.log(yearA + '-' + monthA + '-' + dayA, ' ','大于等于7天且未填写交接日期');
Cells(i, 'A').Font.Color = '#FF0000';//设置单元格字体红色
Cells(i, 'B').Font.Color = '#FF0000';//设置单元格字体红色
Cells(i, 'C').Font.Color = '#FF0000';//设置单元格字体红色
Cells(i, 'D').Font.Color = '#FF0000';//设置单元格字体红色
Cells(i, 'E').Font.Color = '#FF0000';//设置单元格字体红色
Cells(i, 'F').Font.Color = '#FF0000';//设置单元格字体红色
}
}
}