问题:
当IMPORTRANGE
用于从不同的电子表格中提取数据时,原始电子表格中包含包含 VLOOKUP 的公式的单元格通常(但不总是)返回#N/A (ERROR: Did not find value 'xxx' in VLOOKUP evaluation)
. 在原始表中,公式计算正确并显示了一个值。这并不总是发生,有时它确实会引入正确的值。
意图:
要从不同的电子表格中获取数据,请将它们组合到不同的电子表格中并对其进行一些计算。然后将此计算电子表格(或多个计算电子表格)中的信息提取到报告电子表格中,以进行进一步的计算和格式化。
设置:
有几个源数据电子表格,dataspreadsheet1
比如dataspreadsheet2
和dataspreadsheet3
。创建一个计算电子表格 ( calcspreadsheet
),在每个数据电子表格中创建一个副本,并分别sheet1
命名这些工作表和。用于此的语句创建如下:where
is a sheet in ,其中包含相应列中的名称、类型和 ID。datasheet1
datasheet2
datasheet3
IMPORTRANGE
importrange(+VLOOKUP("dataspreadsheet1",filelist!A1:C1000,3,FALSE),"sheet1!a1:Z1000")
filelist!A1:C1000
calcspreadsheet
然后将这些工作表中的每一个中的值datasheet1-3
用于另一个工作表中的计算,calcsheet1
在calcspreadsheet
. 因为这样做的主要目标是从 3 中添加每日值dataspreadsheets
,但这些值sourcesheets
在同一行上并不都具有相同的数据,因此VLOOKUP
再次使用 a 以确保添加日期使用该行作为日期,datasheet1-3
而不管其行号。例如VLOOKUP($A11,'datasheet1'!$A:$P,4) + VLOOKUP($A11,'datasheet2'!$A:$P,4) + VLOOKUP($A11,'datasheet3'!$A:$P,4)
,其中 A 列是所有工作表中的日期列。
这似乎工作正常,虽然在打开calcspreadsheet
时可能需要很长时间才能完成更新,在此期间#N/A
会显示很多 's。最终它还是正确的。
当reportspreadsheet
创建 a 时会出现问题,然后使用IMPORTRANGE
调用从中提取信息calcsheet1
以便能够使用它。这通常但并非总是会导致一开始就出现问题状态。这里的IMPORTRANGE
调用的reportspreadsheet
生成方式与calcspreadsheet
: =importrange(+VLOOKUP(calc!B1,sheetcodes!A1:C3000,3,FALSE),"sheet1!a1:Z1000")
wherecalc!B1
包含源电子表格的名称(在此calc
将是 'calcspreadsheet' 并sheetcodes!A1:C3000
再次包含带有Name
,Type
和Id
在相应列中的工作表列表)中的调用类似
我尝试过的解决方法:
我确实注意到IMPORTRANGE
在不包含的单元格上效果更好VLOOKUP
所以我试图将 的内容复制calcsheet
到另一个表中calcspreadsheet
,调用exportsheet
但只有值在那里,而不是公式,然后IMPORTRANGE
在这个上使用exportsheet
。使用的复制脚本如下:
function exportPrep() {
// Get the active spreadsheet and the active sheet
//var ss = SpreadsheetApp.getActiveSpreadsheet();
//var sheet = ss.getSheetByName("stream");
//sheet.activate();
var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("calcsheet");
var sourceDataRange = source.getDataRange();
var sourceSheetValues = sourceDataRange.getValues();
var sourceRows = sourceDataRange.getNumRows();
var sourceColumns = sourceDataRange.getNumColumns();
var destination = SpreadsheetApp.getActiveSpreadsheet();
SpreadsheetApp.setActiveSheet(destination.setActiveSheet("exportsheet"));
destination.getDataRange().offset(0, 0, sourceRows, sourceColumns).setValues(sourceSheetValues);
}
这似乎可行,但不幸的是,用于将 calcsheet 的值复制到 exportsheet 的复制脚本现在显示了相同的行为,它有时会起作用,有时会给出#N/A
,所以让我遇到了同样的问题。
我的问题:
我已经阅读了各种具有类似问题和回复的帖子,其中提到此功能是喜怒无常或有错误。其他人说不可能在IMPORTRANGE
. 鉴于它有时有效,有时无效,我怀疑该功能本身可能是正确的,但设置中存在同步或超时问题。
如何设置上述功能。要么使用
IMPORTRANGE
并VLOOKUP
完全进行一些更改/添加,要么以不同于一开始的方式构建。