【发布时间】:2017-10-25 05:36:20
【问题描述】:
我正在尝试构建一个 Google Apps Script Web 应用程序,该应用程序将从 Google 工作表中提取数据并在浏览器的 HTML 页面中以行和列的形式显示它。
通过遵循示例等,我编写了这个 WORKS 的代码!
function doGet(){
return HtmlService
.createTemplateFromFile('Report3')
.evaluate();
}
function getData(){
var spreadsheetId = '1Z6G2PTJviFKbXg9lWfesFUrvc3NSIAC7jGvhKiDGdcY';
var rangeName = 'Payments!A:D';
var values = Sheets
.Spreadsheets
.Values
.get(spreadsheetId,rangeName)
.values;
return values;
}
位于 A、B、C、D 列中的数据正在被提取并通过以下 HTML 模板正确显示
<? var data = getData(); ?>
<table>
<? for (var i = 0; i < data.length; i++) { ?>
<tr>
<? for (var j = 0; j < data[i].length; j++) { ?>
<td><?= data[i][j] ?></td>
<? } ?>
</tr>
<? } ?>
</table>
我不想从 A、B、C、D 中获取所有行和所有列,而是想运行一个 SQL 查询来检索一些带有 WHERE 子句(如 SQL)的列。我知道在电子表格中工作的 =QUERY() 函数在 GAS 中不起作用。所以我的下一个尝试是使用 getBatch 方法检索一些行.. 这就是我得到错误的地方
在这种情况下,我想排除 C 列并只获取 A、B 和 D、E 抛出错误的代码如下:
function getData2(){
var spreadsheetId = '1Z6G2PTJviFKbXg9lWfesFUrvc3NSIAC7jGvhKiDGdcY';
/* var rangeName1 = 'Payments!D'; */
/* var rangeName2 = 'Payments!A'; */
var values = Sheets
.Spreadsheets
.Values
.batchGet(spreadsheetId,{ranges: ['Payments!D:E', 'Payments!A:B']})
.values;
return values;
}
在相应的 HTML 模板中,所有的变化是 getData 被 getData2 替换
<? var data = getData2(); ?>
使用此代码,我收到以下错误:
TypeError:无法从未定义中读取属性“长度”。 (第 6 行,文件 “代码”,项目“Report003”)
现在我有两个问题:
- 我的代码有什么问题,我该如何解决?
- 是否可以使用 SQLite 来简化提取所需行和列的过程
我看过这个question,但我无法充分理解答案
【问题讨论】:
标签: sql sqlite google-apps-script google-sheets-api