我想使用Google Apps脚本填充包含来自其他电子表格的过滤数据的电子表格。
源文档是员工列表(列A,NAME),报告的小时数(列B,HOURS),他们正在处理的项目(C列,PROJECT)及其特定任务(D列,任务)。
我想用相同的信息填充第二个电子表格,但仅限于PROJECT等于“Project X”并且Task等于“Task 1”或“Task 2”。
我知道如何在源文档中没有脚本的情况下执行此操作,但Google电子表格不允许VLookup或我所知道的任何其他查找函数在不同文档中查找值。在这种情况下,使用ImportRange将源数据导入第二个电子表格不起作用,因为源数据太大(最终,由于一个电子表格的数据太多,因此必须更改此脚本以查看多个源文档)。
对不起,我没有代码。我试图独自解决这个问题让我无处可去。
谢谢!
答案 0 :(得分:0)
简短的回答:你不能,特别是如果数据很大的话。 您可以使用脚本(使用vlookup或查询)编写公式,但这有限制,例如,如果同时运行多个脚本,则必须轮流使用。 另一种更健壮的方法是将urlfetch与电子表格api一起使用。使用带有“q”过滤器的列表行api。即使使用同步脚本也能很好地工作。
答案 1 :(得分:0)
这是一个稍微陈旧的帖子,但是如何做到这一点的例子很少,我认为还有一个不会受到伤害。您可以将SQL语句传递给下面的querySpreadsheet()函数,例如:
var querySQL = "SELECT A, B, C, D WHERE C = 'Project X' AND (D = 'Task 1' OR D = 'Task 2')";
然后,您可以将函数返回的数据数组放入目标工作表中,如下所示:
var aryValues = querySpreadsheet(querySQL);
SpreadsheetApp.getActiveSpreadsheet().getRangeByName('OUTPUT_TOPLEFT_CELL').offset(0, 0, aryValues.length, 4).setValues(aryValues);
这些功能几乎不错,只需在指示的位置替换您的信息。 感谢Mogsdad提供此脚本的原始内容: Using QUERY URL to group data before sending to Google Apps Script dashboard
function querySpreadsheet(querySQL){
try {
//you can find both these items in the url of your spreadsheet
var ssKey = 'DOCUMENT KEY OF THE DATA SOURCE SPREADSHEET INSIDE THESE QUOTES - long code ends with "&" starts with "key="';
var gId = 'INDEX OF THE SHEET CONTAINING THE DATA - starts with "gid="';
var query = encodeURIComponent(querySQL);
var url = 'http://spreadsheets.google.com/tq?key=%KEY%&gid=%GID%&tq=%QUERY%'
.replace('%KEY%',ssKey)
.replace('%QUERY%',query)
.replace('%GID%',gId);
var response = UrlFetchApp.fetch(url);
var content = response.getContentText();
var jsonContent = getJSON(content);
var numCols = jsonContent.table.cols.length;
var numRows = jsonContent.table.rows.length;
// Decode objectContent into a two-dimensional array.
var mydata = [];
// Then data rows
for (var row = 0; row < numRows; row++) {
mydata[row] = [];
for (var col = 0; col < numCols; col++ ) {
mydata[row].push(jsonContent.table.rows[row].c[col].v);
}
}
return mydata;
} catch(error) {
Logger.log('querySpreadsheet: ERROR - ', error);
};
};
//the content text format is not uniform; try 2 methods to return a JSON object
function getJSON(contentText) {
try {
var regex = /.*google.visualization.Query.setResponse\((.*)\)/g
var ret = eval('('+ regex.exec(contentText)[1] +')');
return ret;
} catch(error) {
var ret = regex.exec(contentText)[1];
var ret = Utilities.jsonParse(ret);
return ret;
};
};