【问题标题】:Is it possible to create a public database (spreadsheet) search with Google Scripts?是否可以使用 Google 脚本创建公共数据库(电子表格)搜索?
【发布时间】:2013-04-15 10:38:21
【问题描述】:

我正在尝试创建一个网站,用户可以在其中查找一组资源,例如门户网站或 JSTOR 等数据库。我正在使用 Weebly;这个网站最终会交给不懂电脑的人,所以我尽量让事情简单(并且免费,只要可行)

我的想法是使用 Google Spreadsheets/Forms 来处理每个单独资源(标题、作者、类型、主题、国家/地区等)的数据的输入和存储,然后找到一些创建可以放置在网站上的搜索功能的方法。任何用户都可以到达该站点,输入他们想要查找的任何标准,并且数据库中的任何资源都将被列出以供用户进一步调查。用户不会向电子表格添加数据;只查询它的数据。

我的第一个问题是这样的脚本/安排是可能的,它可以嵌入到网站页面中吗?我的第二个问题是最好的方法是什么?

【问题讨论】:

    标签: database search google-apps-script google-sheets


    【解决方案1】:

    是的,这当然是可能的,但可以通过多种方式实现。

    您可以采用的一种方法是将电子表格中的所有数据以 JSON 格式检索,并将其作为 HTML 表格添加到 DOM。然后你可以使用一个不错的插件,比如dataTables,它有一个很好的原生搜索功能。我将在下面给出一个基本示例。

    要检索数据,您可以使用Googles spreadsheet JSON API。下面是一个基本示例。

    <script src="http://spreadsheets.google.com/feeds/cells/*ID*/*WS*/public/values?alt=json-in-script&amp;callback=*FN*"></script>
    
    • 其中 ID 是电子表格的长 ID。
    • 其中 WS 是工作表编号,例如1,2,3等。
    • FN 是您要调用的函数。在我下面的函数中,我使用 importGSS

    然后我编写了以下脚本,将数据添加到 HTML 表中。它首先将第一行添加到 &lt;thead&gt; 部分,然后将其余部分添加到 &lt;tbody&gt; 部分。

    function cellEntries(json, dest) {
        var table = document.createElement('table');
        var thead = document.createElement('thead');
        var tbody = document.createElement('tbody');
        var thr;
        var tr;
        var entries = json.feed.entry;
        var cols = json.feed.gs$colCount.$t;
    
        for (var i=0; i <cols; i++) {
            var entry = json.feed.entry[i];
            if (entry.gs$cell.col == '1') {
                if (thr != null) {
                    tbody.appendChild(thr);
                }
                thr = document.createElement('tr');
            }
            var th = document.createElement('th');
            th.appendChild(document.createTextNode(entry.content.$t));
            thr.appendChild(th);
        } 
        for (var i=cols; i < json.feed.entry.length; i++) {
            var entry = json.feed.entry[i];
            if (entry.gs$cell.col == '1') {
                if (tr != null) {
                    tbody.appendChild(tr);
                }
                tr = document.createElement('tr');
            }
            var td = document.createElement('td');
            td.appendChild(document.createTextNode(entry.content.$t));
            tr.appendChild(td);
        } 
        $(thead).append(thr);
        $(tbody).append(tr);
        $(table).append(thead);
        $(table).append(tbody);
        $(dest).append(table);
        $(dest + ' table').dataTable();
    }
    

    然后您可以使用 ... 回调该函数,其中 #Destination 是您要添加 HTML 表格的 &lt;div&gt;

    function importGSS(json){
       cellEntries(json, '#Destination');
    };
    

    全部完成后,您会看到类似于以下屏幕截图的内容,顶部是最终结果,底部是原始电子表格。我已经编辑了一些信息。我希望这对您有所帮助。

    【讨论】:

    • 谢谢,这是一个美好的开始。我对使用和适应更敏感一些;从头开始写作就更少了。虽然我已经玩了一些,但我确实有几个问题: - 数据的 HTML 脚本调用是否正确地放在网页上?同样的,在网页上也必须调用DataTable,但是定位重要吗? - cellEntriesimportGSS$(document).ready(如果我从 DataTables 中正确理解) 必须在电子表格脚本中,对吗?
    • 抱歉,我应该指出订购确实很重要。谷歌&lt;script&gt; 需要放在你声明importGSS()cellEntries() 函数的下面,所以我刚刚将它添加到页面底部。我还所做的是将dataTables() 声明添加到cellEntries() 的底部,所以我知道它会在加载数据后创建它,例如$(dest).dataTable();
    • 我想我明白了,但恐怕我还有几个问题: - 上面代码中的“#Destination”应该与页面上的 &lt;div id="#Destination"&gt; 相关我希望表格出现,对吗? - 文档的流程应该是:页眉:define JQuerry, define DataTables, define the above JS code,正文:define div for table,页脚:Google script,对吗? - Google &lt;script&gt; 只将电子表格数据传递给已定义的函数,对吗?
    • @vltech 啊,越来越近了……我在错误控制台中收到以下消息:json.feed.gs$colCount is undefined。我能够获得运行中的DataTables tutorial 的副本,但我仍然缺少从 Google 使用的功能。 Here是我目前的进度;我确定我只是有些事情不正常。 - 如果我没看错,DataTables 会响应表的 ID,而不是 div。这会是个问题吗?
    • @TerraFimeira 有 3 个错误。 1)对不起,这是我的错,你的 tablescript.js 的第一行应该是 function cellEntries(json, dest) { .... 2)在 cellEntries 函数的底部你写了$('resourcetable').dataTable(); 这应该是$(dest).dataTable(); ......和3)在 importGSS 函数中,您编写了 cellEntries(json, 'resourcetable'); 这应该是 cellEntries(json, '#resourcetable');... 并带有 # 以将其指向一个 ID。
    猜你喜欢
    • 2011-11-25
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多