1

我正在分享这个,希望我能解决我面临的这个问题。我正在使用数据验证来获取下拉菜单的值。这些值来自我称为“计算”的工作表中的 Range(“A1:A40”)</p>

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

这样做的目的仅仅是因为这是我想要更新和更改的类别列表,并且我希望下拉菜单考虑这些更改,而不必手动更改 50 多个电子表格中的值。

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

我希望您能提出一个好的解决方法来避免此类问题。

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

我使用跨电子表格脚本的经验是,从 50 多张表格中的几个单元格获取数据的脚本可能需要 5 分钟以上,并且最终会因超过允许的时间而停止。

4

5 回答 5

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();
}
于 2012-08-28T22:10:16.000 回答
1

我们也遇到了导入功能的可靠性问题。在我们的例子中,我们需要自动更新信息,但对于我们的应用程序来说,每天一次就可以了。

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

我们没有 50 张纸要维护,所以编写脚本很简单。根据您的情况,您可以将 id 保存在一个地方并让脚本循环遍历每个电子表格,或者您可以让每个电子表格运行自己的脚本。

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

于 2012-07-03T17:06:08.700 回答
1

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

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

于 2012-06-29T05:19:08.827 回答
0

Force recalculation of importrange by reinstating the cell formula

Required:

Imported Data - Your target where everything will be copied to.

Imported Data Config - Has the following fields:

+---------------------------------------------+--------------------------------+
|                      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                  |
+---------------------------------------------+--------------------------------+

Script:

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!");
}

This allows you to change your formula without editing the script, and make it easier to transfer the script across various sheets.

于 2014-01-30T19:35:37.170 回答
0

您能否指定如何尝试访问您的电子表格?我不认为有气质函数这样的东西......它通常是没有充分定义的东西,会导致随机错误。

于 2012-06-29T04:58:53.317 回答