0

我有一个“数据库”表 - 60列宽100,000行。优化谷歌脚本值检索

在我的其他工作表上,我有一列(V)指定该数据库表中的行,我需要显示不同列(T)中特定数据库列的相应值。因此,我试图编写一个自定义函数,该函数接收V中的所有值,从数据库中检索值并将其填充到T. E.g.在T3中,我会有= myFunction(V3:V100)

然后,我的脚本循环通过V中的每个单元格,并做这样的事情:(* people_sheet =我的数据库表;行=每个V cell)

output_array[i] = people_sheet.getRange(row, last_name_col_num, 1, 1).getValue() + " (" + people_sheet.getRange(row, first_name_col_num, 1, 1).getValue() + ")" + people_sheet.getRange(row, suffix_specifier_wikipedia, 1, 1).getValue(); 

然后我返回output_array,它的想法是它从T3填充col T。

我发现这是非常低效的,脚本超时并产生错误(除非我减少了调用像myFunction的(V3:V4);

我通过从谷歌优化的网页阅读,但没有解决从表中获取值的问题。

会有人能够提出一个办法来解决这个问题呢?

回答

0

该解决方案最终被避免“getRange”和“的getValue”完全呼吁。他们在访问谷歌表格上的数据时似乎效率极低

我结束了重写我的功能实际上接受我的数据库的范围,增加了新的参数: = myFunction的(V3:V207,People1 F1:H100000)

里面的功能:

output_array[i] = people_sheet_FGH_array[row][last_name_col_num - col_F_index] + " (" + people_sheet_FGH_array[row][first_name_col_num - col_F_index] + ")" + people_sheet_FGH_array[row][suffix_specifier_wikipedia - col_F_index]; 

请注意,我不输入全部60列。 (实际上,我不得不将这个数字减少到20,因为我从“新”谷歌表单中跑出了2,000,000个单元格的限制,并将其分散在多张表单中)。我只导入那些将被这个函数使用的东西。 (幸运的是它们是相邻的,如果不是这样的话,我可能会创建另一个“帮手”表,通过引用将所有需要的列聚合在一起。)