脚本解决方法解决下拉列表中的importRange问​​题

时间:2012-06-29 01:23:36

标签: google-apps-script google-sheets google-sheets-formula importrange

我正在分享这个希望我解决这个问题的解决方案。 我正在使用数据验证来获取下拉菜单的值。这些值来自我称之为“计算”的工作表中的范围(“A1:A40”)

由于我有大约50个使用相同下拉值和相同模式的电子表格,我只是决定使用importRange函数来填充Sheet(“计算”)中的信息。范围(“A1:A50”)。 importRange从我专门为此目的的单独电子表格中获取列表。

这样做的目的仅仅是因为这是我要更新和更改的类别列表,我希望下拉菜单考虑到这些更改,而无需手动更改50+电子表格中的值

现在理论上这没有问题,但是importRange函数非常不稳定,它显示随机电子表格发生的#REF错误。我看到有同样问题抱怨的帖子,所以我放弃了希望importRange是一个可行的解决方案。

我希望您在一个好的解决方法中避免这样的问题。

我想到的一个解决方案是让一个脚本将值从一个工作表复制到所有这些工作表并让这个脚本每天工作但我不知道如何将整个范围从一个电子表格复制到另一个电子表格,坦白说我不是确定这个解决方案是否最好。

我使用跨电子表格脚本的经验是,从50多张纸中获取数据的脚本可能需要超过5分钟,并最终停止超过允许的时间。

5 个答案:

答案 0 :(得分:2)

尝试添加一个菜单项,该菜单项将导致刷新功能运行。 我发现这个函数导致importRange起作用。

function onOpen() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menuEntries = [];
    menuEntries.push({name: "Refresh", functionName: "SheetFlush"});
    ss.addMenu("Menu", menuEntries);
}

function SheetFlush(worksheet) {
    worksheet = worksheet || SpreadsheetApp.getActive();
    var sheets = worksheet.getSheets();
    SpreadsheetApp.flush();
}

答案 1 :(得分:1)

您的50个电子表格中有多少出现此错误? 此外,用户是否可以访问原始电子表格,以便它可以运行importRange()?

脚本可能不适合您的情况,您最好继续使用importRange并使其工作。

答案 2 :(得分:1)

我们也有导入功能的可靠性问题。在我们的案例中,我们需要自动更新信息,但每天一次对我们的应用程序来说是好的。

我们的解决方案是每晚复制并粘贴一次值的脚本。我们还包括一个菜单项,用户可以根据需要强制更新。

我们没有50页需要维护,因此编写脚本很简单。根据您的具体情况,您可以在一个地方维护ID并让脚本循环遍历每个电子表格,或者您可以让每个电子表格运行自己的脚本。

注意 - 我们根据私人信息页上的信息汇总了公开报告。该报告使用嵌入式图表显示在网站上。图表通常会显示错误,通过返回公共工作表并让导入功能刷新来修复错误。

答案 3 :(得分:0)

您是否可以指定尝试访问电子表格的方式?我不认为存在气质函数这样的东西......它通常是没有充分定义导致随机错误的东西。

答案 4 :(得分:0)

通过恢复单元格公式

强制重新计算importrange

必需:

导入的数据 - 将所有内容复制到的目标。

导入的数据配置 - 包含以下字段:

+---------------------------------------------+--------------------------------+
|                      A                      |               B                |
+---------------------------------------------+--------------------------------+
| Import Data from Spreadsheet with the key:  | key                            |
| Import Data from Spreadsheet between range: | A:AA                           |
| Imported Data select columns:               | SELECT *                       |
| Imported Data criteria:                     | WHERE Col15 contains 'Offered' |
| Imported Data should by ordered by column:  | ORDER BY Col1                  |
+---------------------------------------------+--------------------------------+

脚本:

function onOpen() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
}
catch(err)
{
Browser.msgBox(err);
}

var configsheet = ss.getSheetByName("Imported Data Config");

var configkey = configsheet.getRange("B1").getValue();
var configrange = configsheet.getRange("B2").getValue();
var configselect = configsheet.getRange("B3").getValue();
var configwhere = configsheet.getRange("B4").getValue();
var configorderby = configsheet.getRange("B5").getValue();

var importedsheet = ss.getSheetByName("Imported Data");
importedsheet.getRange("A1").setValue('=QUERY(IMPORTRANGE("' + configkey + '","' + configrange + '"),"' + configselect + ' ' + configwhere + ' ' + configorderby + '")');

SpreadsheetApp.flush();

// Solution of sourcecode is: http://stackoverflow.com/questions/13631584/how-can-i-force-a-recalculation-of-cell-using-importrange-function-in-a-google-s
// OnOpen Trigger: https://developers.google.com/apps-script/understanding_triggers
// Active Spreadsheet solution: https://productforums.google.com/forum/#!topic/docs/XIY0WNX0uL8

Browser.msgBox("Sync Complete!");
}

这使您可以在不编辑脚本的情况下更改公式,并且可以更轻松地在各种工作表中传输脚本。