我正在尝试编写Office脚本以循环表列范围并检查Regex Pattern是否匹配。如果匹配,请标记为红色:
function main(workbook: ExcelScript.Workbook) {
let worksheet = workbook.getWorksheet("Workstreams");
let usedColumn = worksheet.getTables()[0].getColumn("Last Update Time");
let regexPattern = "^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(23) ([1-9]|0[1-9]|1[0-2]):[0-5][0-9] ([AaPp][Mm])$"
}
如何
1.循环通过列?
1.用红色标记单元格
谢谢你的帮助Michal
编辑日期:2023年2月2日:尝试从单元格获取值的代码:
function main(workbook: ExcelScript.Workbook) {
let worksheet = workbook.getWorksheet("Workstreams");
let usedColumn = worksheet.getTables()[0].getColumn("Last Update Time");
let dataRange = usedColumn.getRangeBetweenHeaderAndTotal();
//const values = dataRange.getValues();
let regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(23) ([1-9]|0[1-9]|1[0-2]):[0-5][0-9] ([AaPp][Mm])$/;
for (let i = 0; i < dataRange.getValues().length; i++) {
let cRow: number = i;
let rowCell: ExcelScript.Range = dataRange.getCell(cRow, 0);
let rowValue: string = rowCell.getValue() as string;
console.log(rowValue);
}
}
输出如下:44641.25 44713.21875 44587.1361111111测试
对于列中的这些值:2022年3月21日上午6:00 2022年6月1日上午5:15 2022年1月26日上午3:16测试
所以问题是JS正在以某种方式将字符串转换为数字...最好的,Michal
2条答案
按热度按时间c86crjj01#
我认为你的问题是在javascript和Office Scripts API的交叉点上。你可以使用string的.match函数来测试一个值是否与正则表达式匹配,例如:
在x内,您可以获得一些详细信息(例如:输入的哪一部分匹配),但是如果您只关心得到了A匹配,则可以测试返回值是否为null
你可以从你的表的列中获取值,方法是先获取数据的范围,然后获取值,如下所示:
值将是number类型的二维数组|弦|这是getRange函数返回2D区域的一个怪癖。由于列是垂直的,所以其中的数据看起来像[[row1Data],[row2Data],... ]
现在你可以对这些值运行forEach并测试正则表达式,如果正则表达式失败,你可以应用你的格式:
bf1o4zei2#
你可以试试下面的代码:
这段代码迭代表列中的值,还从模式中创建了一个正则表达式对象,使用RE对象测试正在迭代的列中的值,如果匹配,则将该值的单元格颜色设置为红色。