本文介绍了通过自定义菜单从浏览器下载Google Sheet数据的JSON格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有一种方法可以直接从Google工作表下载JSON,如下所示:我希望使用App脚本创建自定义菜单。将有一个按钮用于从工作表数据创建JSON对象,完成后将立即将其作为文件下载。因此,没有涉及GDrive或其他应用程序,只有一个谷歌工作表和一个应用程序脚本。
这在某种程度上可能做到吗?我找不到这样的东西。
推荐答案
我相信您的目标如下。
- 您要从自定义菜单运行该脚本。
- 您希望将活动工作表作为包括JSON数据的文件下载。
- 示例JSON数据如下所示。
[{"a1": "a2", "b1": "b2"},{"a1": "a3", "b1": "b3"},,,]
在这种情况下,为了下载文件,需要使用Java脚本。为此,在此答案中使用了一个对话框。因此,此示例脚本的流程如下所示。
- 从自定义菜单运行脚本。
- 打开一个对话框。
- 将在该对话框上运行Java脚本,并下载该文件。
- 该对话框已关闭。
当上述流反映到脚本时,它将如下所示。
示例脚本:
请将以下脚本复制并粘贴到脚本编辑器中,然后运行onOpen
或重新打开电子表格。由此创建自定义菜单。Google Apps脚本端:Code.gs
请将以下脚本复制并粘贴到脚本编辑器中作为Google Apps脚本。
function onOpen() {
SpreadsheetApp.getUi().createMenu('Custom Menu').addItem('Export to JSON', 'download').addToUi();
}
function download() {
const html = HtmlService.createHtmlOutputFromFile("index");
SpreadsheetApp.getUi().showModalDialog(html, "sample");
}
function downloadFile() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const [header, ...values] = sheet.getDataRange().getValues();
const obj = values.map(r => r.reduce((o, c, j) => Object.assign(o, {[header[j]]: c}), {}));
const filename = `${sheet.getSheetName()}.txt`;
const blob = Utilities.newBlob(JSON.stringify(obj), MimeType.PLAIN_TEXT, filename);
return {data: `data:${MimeType.PLAIN_TEXT};base64,${Utilities.base64Encode(blob.getBytes())}`, filename: filename};
}
HTML端:index.html
请将以下脚本复制并粘贴到脚本编辑器中作为HTML。
<script>
google.script.run
.withSuccessHandler(({ data, filename }) => {
if (data && filename) {
const a = document.createElement("a");
document.body.appendChild(a);
a.download = filename;
a.href = data;
a.click();
}
google.script.host.close();
})
.downloadFile();
</script>
引用:
这篇关于通过自定义菜单从浏览器下载Google Sheet数据的JSON格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!