作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我正在尝试编写一个自定义函数,它接受一对单元格,循环遍历电子表格中的所有工作表以找到一对完全匹配的单元格,然后从同一行返回另一个值。
背景;表 0 是所有 LOA 和 ID 组合(主要是位置和序列号)的主表,需要在那里填写检查日期。进行这些检查的人使用 LOA-ID 组合 + 谷歌上的检查数据更新他们的个人工作表驾驶。我试图让主表在添加此数据时自动更新。
表格都遵循相同的格式(LOA,第 1 和第 2 列中的 ID,第 14 列中的检验日期)。这是一个自定义函数,我正在使用它来完成我想要的,但工作速度非常慢。我如何使它运行得更快? PER CELL 需要几秒钟;我需要在 10k+ 个单元格上运行它。
function findMatch(LOA,GRID) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var returnDate = "not found"
for (var sheetNum = 1; sheetNum < sheets.length; sheetNum++){
var ws = ss.getSheets()[sheetNum]
for (var count = 1; count<ws.getLastRow(); count++){
if (ws.getRange(count,1,1,1).getValues()==LOA && ws.getRange(count,2,1,1).getValues()==GRID)
{
returnDate = ws.getRange(count,14,1,1).getValue()
break;
}
else
{
}
}
}
Logger.log(returnDate)
return returnDate
最佳答案
最佳做法是执行尽可能少的电子表格服务调用,尤其是避免将它们置于循环内。相反,使用 getValues() 批量检索所有数据并使用 Javascript 迭代该数据。
function findMatch(LOA,GRID)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var returnDate = "not found", data;
for (var sheetNum = 1; sheetNum < sheets.length; sheetNum++)
{
data = sheets[sheetNum].getDataRange().getValues();
for (var count = 1; count < data.length; count++)
{
if (data[count][0] == LOA && data[count][1] == GRID)
{
returnDate = data[count][13];
break;
}
}
}
Logger.log(returnDate);
return returnDate;
}
关于google-apps-script - 快速遍历多个工作表以查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751188/
我是一名优秀的程序员,十分优秀!